Nmap简介


Nmap也就是Network Mapper,是一款网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。它是网络管理员比用的软件之一,以及用以评估网络系统保安,nmap的核心功能有:

主机发现:用于发现目标主机是否处于活动状态。Nmap提供多种检测机制,可以更有效地辩识主机。

端口扫描:用于扫描主机上端口状态。Nmap可以将端口识别为开放(Open)、关闭(Closed)、过滤(Filtered)、未过滤(Unfiltered)、开放|过滤(Open|Filtered)、关闭|过滤(Closed|Filtered)。默认情况下,Nmap会扫描1000个常用端口,可以覆盖大多数基本应用情况。

版本侦测:用于识别端口上运行的应用程序与应用版本。Nmap目前可以识别数千钟中应用的签名,检测数百种应用协议。而对于不识别的应用,Nmap默认会将应用的指纹打印出来,如果用于确知该应用程序,那么用户可以将信息提交到社区,为社区做贡献。

操作系统侦测:用于识别目标机的操作系统类型、版本编号及设备类型。Nmap目前提供了上千种操作系统或设备的指纹数据库,可以识别通用PC系统、路由器、交换机等设备类型。

防火墙/IDS规避:Nmap提供多种机制来规避防火墙、IDS的屏蔽和检查,便于秘密地探查目标机的状况。基本的规避方式包括:分片/IP诱骗/IP伪装/MAC伪装等等。

NSE脚本引擎:NSE是Nmap最强大最灵活的特性之一,可以用于增强主机发现、端口扫描、版本侦测、操作系统侦测等功能,还可以用来扩展高级的功能如web扫描、漏洞发现。漏洞利用等等。Nmap使用lua语言来作为NSE脚本语言,目前的Nmap脚本库已经支持400多个脚本。

Nmap的工作流程


Nmap的执行流程简单清晰,主要分为三个阶段

  • 准备阶段:在其中会执行参数解析、资源分配、基本扫描信息的输出、端口与地址列表的初始化、NSE环境准备及pre_scripts的运行等基本的准备操作。

  • 工作阶段:然后进入主循环,每次循环对一组目标地址进行主机发现、端口扫描、服务与版本侦测、OS侦测及脚本扫描等操作,直到所有的目标地址都被扫描完毕才推出主循环

  • 善后阶段:在完成所有扫描操作后,调用post-script完成相应处理,然后打印出扫描的最终结果,并释放掉分配的资源。

下图为Nmap的执行流程图

Nmap脚本引擎

Nmap提供了强大的脚本引擎(NSE),以支持Lua编程来扩展Nmap的功能。目前脚本库已经包含400多个常用的Lua脚本,辅助完成Nmap的主机发现、端口扫描、服务侦测、操作侦测四个基本功能,并补充了其他扫描能力:如执行HTTP服务详细信息的探测、暴力破解简单密码、检查常见的漏洞信息等等。如果用户需要对特定的应用做更深入的探究,可以按照NSE脚本格式便携Lua脚本来增强Nmap的扫描能力。


实现原理

NSE主要分为两大部分:内嵌Lua解释器与NSE library。

解释器:Nmap采用嵌入的Lua解释器来支持Lua脚本语言。Lua语言小巧简单而且扩展灵活自身的C/C++语言融合。

NSE library:为Lua脚本与Nmap提供了连接,负责完成基本初始化及提供脚本调度、并发执行、IO框架及异常处理,并提供了默认的实用的脚本程序。


脚本分类


NSE中提供的Lua脚本分别为不同的类别,根据官方网站,目前的有14中类别:

auth:负责处理鉴权证书(绕开鉴权)的脚本
broadcast:在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务。
brute:提供暴力破解方式,针对常见的应用如http/snmp等
default:这是使用-sC或A选项扫描时默认的脚本,提供基本扫描能力
discovery:对网络进行更多的信息,如SMB枚举、SNMP查询等
dos:用于进行拒绝服务***
exploit:利用已知的漏洞***系统
external:利用第三方的数据库或资源,例如whois解析
fuzzer:模糊测试的脚本,发送异常的包的目标机,探测出潜在漏洞
intrusive:***性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware:探测目标机是否感染了病毒、开启了后门等信息
safe:此类与instrusive相反,属于安全性脚本
version:负责增强服务与版本扫描功能的脚本
vuln:负责检查目标机是否有常见的漏洞,如是否有MS08_067

每种脚本不止属于一种类型的,具体属于哪种类型可进入官网查看 http://www.nmap.org

NSE扫描流程


Nse脚本扫描属于主循环流程下的一个部分,其代码流程图如下

初始化流程

在命令行参数中指定脚本(–script/-sC)或指定-A选项或指定-sV选项,都会触发Nmap启动脚本引擎。其中-A选项表示全面扫描,会调用default类别的脚本扫描;而-sV选项表示应用与版本侦测,会调用Version类别的脚本,辅助侦测服务详细信息。

nmap_main()函数中,若判断需要启动脚本引擎,这首先需要调用open_nse()函数进行NSE环境的准备,首先要创建luaState(管理Lua解释器的执行的全局变量),然后调用init_main()函数进行详细的初始化过程。

进入init_main()函数,首先加载Lua标准版库与Nmap的扩展库,随后准备参数环境,然后加载并执行nse_main.lua文件。

nse_main.lua脚本为后续的脚本执行准备Lua环境,加载用户选择的需要调用的脚本(例如,用户–script discovery,那么会将该类别中所有的脚本加载进来),返回一个main()函数对象给init_main(),该main()是否后续脚本扫描需要的主函数,被保存在Lua的环境的注册表中。

在nse_main.lua中,定义两个核心的类,Script和Thread,Script用于管理NSE脚本,当新的脚本被加载时,调用Script.new创建脚本对象,该对象被保存下来在后续的扫描过程中使用;Thread用于管理脚本的执行,该类中也包含对脚本健全性的检查(sanitycheck,如是否包含Action函数,4.4会讲到)。在脚本执行时,如果脚本之间存在依赖关系,那么会将基础的无依赖的脚本统一执行完毕,再执行依赖性的脚本。

脚本扫描流程

执行脚本扫描时,从nmap_main()中调用script_scan()函数。

在进入script_scan()后,会标记扫描阶段类型,然后进入到初始化阶段返回的main()函数(来自nse_main.lua脚本中的main)中,在函数中解析具体的扫描类型。

main()函数负责处理三种类型的脚本扫描:预扫描(SCRIPT_PRE_SCAN)、脚本扫描(SCRIPT_SCAN)、后扫描(SCRIPT_POST_SCAN)。预扫描即在Nmap调用的最前面(没有进行主机发现、端口扫描等操作)执行的脚本扫描,通常该类扫描用于准备基本的信息,例如到第三服务器查询相关的DNS信息。而脚本扫描,是使用NSE脚本来扫描目标主机,这是最核心的扫描方式。后扫描,是整个扫描结束后,做一些善后处理的脚本,比如优化整理某些扫描。

在main()函数中核心操作由run函数负责。而run()函数的本身设计用于执行所有同一级别的脚本(根据依赖关系划分的级别),直到所有线程执行完毕才退出。

run()函数中实现三个队列:执行队列(Running Queue)、等待队列(Waiting Queue)、挂起队列(Pending Queue),并管理三个队列中线程的切换,直到全部队列为空或出错而退出。


NSE脚本结构


NSE的使用Lua脚本,并且配置固定格式,以减轻用户编程负担,通常的一个脚本氛围几个部分:

Description 字段:描述脚本功能的字符串,使用双层方括号表示。

Comment 字段:以__开头的行,描述脚本输出格式

Author   字段:描述脚本作者

License    字段:描述脚本使用许可证,通常配置为Nmap相同的license

Categories 字段:描述脚本所属的类别,以对脚本的调用进行管理。

Rule      字段:描述脚本执行的规则,也就是确定触发脚本执行的条件。在Nmap中有四种类型的规则。

A.Prerule()用于在Nmap没有执行扫描之前触发脚本执行,这类脚本脚本并不需要用到任何Nmap扫描的结果;

B.Hostrule()用在Nmap执行完毕主机发现后触发的脚本,根据主机发现的结果来触发该类脚本

C.Postrule用于Nmap执行端口扫描或版本侦测时触发的脚本,例如检测到某个端口时触发某个脚本执行以完成更详细的侦查

D.Postrule用于Nmap执行完毕所有扫描后,通常用于扫描结果的数据提取和整理。

Action   字段:脚本执行的具体内容。当脚本通过rule字段检查被触发执行时,就会调用action字段定义的函数

下面以broadcast-db2-discover.nse脚本为例说明(源代码请点击下方“阅读原文”查看)

参考文献

官网地址:http://www.nmap.org/

转载于:https://blog.51cto.com/smartest/1376094

安全扫描工具​Nmap引擎理解文档相关推荐

  1. 苹果手机iOS自带原生文档扫描功能,秒杀所有文档扫描软件

    很多小伙伴不知道IOS是自带文档扫描工具的.多数文档扫描需求都是通过appstore下载app来进行满足,而这些app除了扫描效果不理想外,部分app还会额外收费.今天小编就教大家如何用IOS自带功能 ...

  2. 【网络攻防】网络扫描工具Nmap的使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 实验目的 实验环境 一.zenmap(图形化界面) 1.观察界面 2.扫描主机 3.扫描服务器 二.namp命令行模式 1. ...

  3. Python 开发工具集:关于文档、测试、调试、程序的优化和分析

    Python 开发工具集:关于文档.测试.调试.程序的优化和分析 原文    http://segmentfault.com/a/1190000000410521 Python已经演化出了一个广泛的生 ...

  4. pdf 加深 扫描件_为什么PDF文档不能像Word文档一样随便编辑?如何免费将PDF转换为Word?...

    PDF文档是一种非常难编辑的文档,有时候我们需要编辑或者复制PDF文档里面的内容,把PDF文档转换为Word就是我们最佳的选择.为什么PDF文档这么难编辑?我们怎么免费把PDF文档转换为Word文档? ...

  5. python docx 合并文档 图片_MBT文档模型化生成工具——30倍效率文档撰写工程化方法...

    MBT(A model based document builder)文档模型化生成工具用户手册--30倍效率文档撰写工程化方法 1 简介 在软件工程领域,工程文档通常主要包括实施方案.需求分析.软件 ...

  6. 【办公常用软件有哪些】万彩办公大师教程丨扫描PDF转优化帮助文档

    关于万彩办公大师的扫描PDF转优化工具 扫描PDF转优化工具可以高效地优化扫描的PDF文档.这款工具不仅能使PDF文档中扫描的图像去扭斜,还能快速删除PDF中未使用的空白页.除此之外,可以将扫描的PD ...

  7. 网络扫描工具Nmap常用命令

    网络扫描工具Nmap常用命令 Nmap是一款知名的网络安全审计工具.它免费.开源,可以快速完成各种网络审计功能.它提供了多种探测方式,基于各种网络协议规范,可以发现网络设备并探测设备的各种常见端口.利 ...

  8. 扫描二维码读取文档_使用深度学习读取和分类扫描的文档

    扫描二维码读取文档 To many people's dismay, there is still a giant wealth of paper documents floating out the ...

  9. 如何用计算机扫描图片变成文字,如何把文字图片或者扫描的文件变成word文档?详细步骤...

    我们在日常工作,有时候会遇到需要把文字图片或者扫描的文件变成word文档,最笨的方法就是一个一个字的打到word文档,有一些图片的文字是可以在搜索引擎上找到的,但是首先这个需要运气好.不过,现在小编就 ...

最新文章

  1. C++走向远洋——39(指向学生类的指针)
  2. java代码(dex)注入
  3. 一个很不错的支持Ext JS 4的上传按钮
  4. linux安装rsync在各主机之间同步文件
  5. unicode 字符集环境下的mfc 读写 ini 配置文件的_WSL:在Windows下优雅地玩Linux
  6. OpenCV android sdk配置OpenCV android NDK开发实例
  7. Git的工作流程简介
  8. 带背景音乐的表白html,感人的表白背景音乐,适合浪漫表白的纯音乐
  9. bzoj 4548: 小奇的糖果 bzoj 3658: Jabberwocky(双向链表+树状数组)
  10. 双管道(CreatePipe)与本地cmd.exe进程通信(附源代码及编译好的程序,免费下载)
  11. 求素数 java 101 200_Java求101~200之间的素数
  12. android与后台交互,Android客户端与服务端交互
  13. vi命令下编辑文件时,按insert键文件底部不出现“INSERT”问题
  14. MipMap(纹理过滤)
  15. 【浏览器兼容】火狐浏览器滚动条不出现问题
  16. 《连线》杂志:Web已死 Internet永生(全文),互联网营销
  17. 计算网络之云运维发展历史
  18. 10倍杠杆炒股是什么意思
  19. 【CSS】CSS样式表+复合选择器
  20. 如何下载河北区卫星地图高清版大图

热门文章

  1. Dart_VM的相关简介与运行模式解析
  2. 神策数据荣登 2020 IDC 中国 Fintech 50 强榜单
  3. 参会全攻略 | 倒计时 7 天!30+ 位重量级嘉宾“聊”什么?
  4. websocket学习和群聊实现
  5. Application Virtualization 4.5 部署之(三)(
  6. Python map, reduce, filter和sorted
  7. 【分解质因数】【树状数组】【快速幂】codeforces 2014 ACM-ICPC Vietnam National Second Round E. ACM...
  8. Python连接MySQL数据库执行sql语句时的参数问题
  9. ASMSupport教程4.2
  10. typical career path for consulting industry