Nmap使用教程(进阶篇)

什么是防火墙?

防火墙是用来控制网络访问的软件或硬件。分为以下两类:1、基于主机的防火墙;2、基于网络的防火墙。
基于主机的防火墙

这是在单台主机上运行的软件,用来控制入站流量(从网络向主机)和出站流量(从主机向网络)。这些软件安装于操作系统之上,常见例子就是Linux上面的iptables和Windows上的Zone Alarm。
基于网络的防火墙

这些可以是硬件设备或软件,或者硬件设备和软件相结合,用来保护来自于未受保护的入站通信。

防火墙被安装在受保护和不受保护的网络之间,它们会查看所有的通信,并通过设置规则来控制入站和出站的通信。

进阶扫描技术

逃避或绕过防火墙

bypass或规避或逃避无非是进入系统的另一种方式。管理员使用防火墙或IDS / IPS阻止恶意攻击或垃圾邮件。但是从攻击者的角度来看,他会想办法绕过防火墙规则;Nmap有很多办法绕过防火墙。

1、碎片化

Nmap发送8个字节的数据包绕过防火墙/IDS/IPS。这种技术已经很古老了,但是在防火墙配置不当的时候依旧有用。

nmap -f host

MTU,最大传输单元,它是碎片化的别名,我们可以指定它的大小。

Nmap --mtu 16 host #使用16字节的数据包,我们可以指定自定义数据包大小为8的倍数。

2、诱饵

这种类型的扫描是非常隐蔽且无法察觉。目标由多个假冒或伪造IP地址进行扫描。这样防火墙就会认为攻击或扫描是通过多个资源或IP地址进行,于是就绕过了防火墙。

诱饵在初始的ping扫描(使用ICMP,SYN,ACK等)使用,在实际的端口扫描阶段使用。诱饵在远程操作系统检测(-O)期间也使用。诱饵不在版本检测工作或TCP连接扫描中使用。

这实际上在目标看来是由多个系统同时扫描,这使得防火墙更难追查扫描的来源。

我们这虚拟的实验环境中测试一下,把192.168.50.12作为目标主机,192.168.50.10是发起扫描主机,192.168.50.16和192.168.50.15是诱饵主机。在目标主机(这里使用的是Kali Linux)输入以下命令:

nmap -D192.168.50.15,192.168.50.16,ME -p 21,22,80,443 -Pn 192.168.50.12

-D开关表示实施一次诱饵扫描,-D后面紧跟选择好的诱饵主机的IP地址列表并且这些主机都在线。-Pn不发ping请求包,-p选择扫描的端口范围。“ME”可以用来代替输入自己主机的IP。

以下是扫描结果:


在网络上。我们来看一看流量(可以使用wireshark):

现在观察源地址那一列,会发现我们使用的诱饵主机构成了网络流量的主要记录。只要使用足够多的诱饵主机,就会在短时间内产生大量的记录,从而在进行扫描时完成迷惑和延迟网络管理员的注意。

3、空闲扫描

攻击者将首先利用一个空闲的系统并用它来扫描目标系统。

扫描的工作原理是利用某些系统中采用可预见的IP序列ID生成。为了使空闲扫描成功,僵尸主机的系统必须是在扫描时间处于闲置状态。对于任何疑问,请参考之前的文章。

在这种技术中会隐藏攻击者的IP地址。

01、认识空闲主机

空闲主机是一台可用作欺骗目标IP地址且具有可预设的IP ID序列号的机器。

02、寻找空闲主机

寻找空闲主机我们可以借助Nmap提供的ipidseq脚本。具体有两种寻找方式。第一种是全网段寻找,这种方式会在我们主机所在的网段进行探测寻找空闲主机。具体命令是nmap -p80 --open --script ipidseq /24。第二种是网上随机式扫描,这种方式会在网上随机寻找空闲主机。具体命令是:nmap -p80 --open --script ipidseq -iR 200。(-iR选项代表随机选择目标,200代表随机选择目标的数量,--open代表只选择端口开放状态的空闲主机)

注意:红框输出结果只用作参考,在空闲扫描中存在许多不确定性,不是说是空闲主机就可以成功利用

04、开启空闲扫描

开启空闲扫描只需要执行以下命令:

nmap –Pn -sI zombie target        #-sI选项调用空闲扫描,-Pn关闭主机发现操作

在空闲扫描的时候使用网上随机获取的空闲主机可能会出现ip地址与目标ip路径距离较远,使得空闲主机之间的通信出现延迟最终有可能造成空闲扫描失败的情况。建议最好去使用目标主机同网段下的空闲主机,这样成功的概率会比较高。

在进行空闲扫描的时候有可能遇到以下错误:有可能出现以下错误: 1.防火墙拦截数据。2.目标主机抛弃数据包。3.代理不可用。(解决办法是更换僵尸主机)


4、选项–source-port

每个TCP数据包带有源端口号。默认情况下Nmap会随机选择一个可用的传出源端口来探测目标。该–source-port选项将强制Nmap使用指定的端口作为源端口。这种技术是利用了盲目地接受基于特定端口号的传入流量的防火墙的弱点。端口21(FTP),端口53(DNS)和67(DHCP)是这种扫描类型的常见端口。

nmap --source-port 53 target

5、随机数据长度

附加随机数据长度,我们也可以绕过防火墙。许多防火墙通过检查数据包的大小来识别潜伏中的端口扫描。这是因为许多扫描器会发送具有特定大小的数据包。为了躲避那种检测,我们可以使用命令–data-length增加额外的数据,以便与默认大小不同。在下图中,我们通过加入25多个字节改变数据包大小。

nmap --data-length 25 target

6、随机顺序扫描目标

选项–randomize-host用于随机 顺序扫描指定目标。–randomize-host有助于防止因连续 扫描多个目标而防火墙和入侵检测系统检测到。

nmap --randomize-hosts targets

7、MAC地址欺骗

每台机器都有自己独特的mac地址。因此这也是绕过防火墙的另一种方法,因为某些防火墙是基于MAC地址启用规则的。为了获得扫描结果,您需要先了解哪些MAC地址可以使用。这可以通过手动或先进的模糊测试完成。我更喜欢模糊测试,用Python实现非常容易。我们只需要手工导入正则表达式到Python中,然后自动化执行。

特别是–spoof-MAC选项使您能够从一个特定的供应商选择一个MAC地址,选择一个随机的MAC地址,或者设定您所选择的特定MAC地址。 MAC地址欺骗的另一个优点是,你让你的扫描隐蔽,因为你的实际MAC地址就不会出现在防火墙的日志文件。

nmap -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff target

8、发送错误校验

在某些防火墙和IDS / IPS,只会检查有正确校验包的数据包。因此,攻击者通过发送错误校验欺骗IDS / IPS。

nmap --badsum target

Nmap脚本的使用

Nmap的脚本主要分为以下几类:

- Auth:负责处理鉴权证书(绕过鉴权)的脚本。
- Broadcast:在局域网内探查更多服务的开启情况,如DHCP/DNS/SQLServer等。
- Brute:针对常见的应用提供暴力破解方式,如HTTP/SMTP等。
- Default:使用-sC或-A选项扫描时默认的脚本,提供基本的脚本扫描能力。
- Discovery:对网络进行更多信息的搜集,如SMB枚举、SNMP查询等。
- Dos:用于进行拒绝服务攻击。
- Exploit:利用已知的漏洞入侵系统。
- External:利用第三方的数据库或资源。例如,进行Whois解析。
- Fuzzer:模糊测试脚本,发送异常的数据包到目标机,探测潜在漏洞。
- Intrusive:入侵性脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽。
- Malware:探测目标是否感染了病毒、开启后门等信息。
- Safe:此类与Intrusive相反,属于安全性脚本。
- Version:负责增强服务与版本扫描功能的脚本。
- Vuln:负责检查目标机器是否有常见漏洞,如MS08-067。

1、nmap的HTTP方法

Web服务器根据它们的配置和软件支持不同的HTTP方法,并且其中一些请求在一定条件下是危险的。HTTP的方法有GET, HEAD, POST, TRACE, DEBUG, OPTION, DELETE, TRACK, PUT等。

nmap -p80,443 --script http-methods scanme.nmap.org

如果需要详细的检查,那么命令:

nmap -p80,443 --script http-methods –script-args http-methods.retest scanme.nmap.org

默认情况下,脚本http-methods使用根文件夹为基础路径(/)。如果我们要设置一个不同的基本路径,设置参数的HTTP methods.url路径:

nmap -p80,443 --script http-methods --script-args http-methods.urlpath=/mypath/ scanme.nmap.org

HTTP方法TRACE,CONNECT,PUT和DELETE可能会出现安全风险,如果一个Web服务器或应用程序的支持这些方法的话,需要进行彻底测试。 TRACE使应用程序容易受到跨站跟踪(XST)攻击,可能导致攻击者访问标记为的HttpOnly的Cookie。 CONNECT方法可能会允许Web服务器作为未经授权的Web代理。 PUT和DELETE方法具有改变文件夹的内容的能力,如果权限设置不正确可能被滥用。

你可以了解每个方法更多的风险到:
https://www.owasp.org/index.php/Test_HTTP_Methods_(OTG-CONFIG-006)

2、HTTP User Agent

有些防火墙会过滤Nmap的默认UserAgent,你可以设置不同的用户代理。

nmap -p80 --script http-methods --script-args http.useragent=”Mozilla 5”  <target>

3、HTTP管道

一些web服务器允许多个HTTP请求的封装在一个包。这可以加快脚本执行的速度,如果web服务器支持的话建议启用。默认情况下一个管道会有40个请求,并且会根据网络情况自动调节大小。

nmap -p80 --script http-methods --script-args http.pipeline=25 <target>

另外,我们可以设置http.max-pipeline参数来控制http管道的最大值。如果设置了该参数,nmap会自动忽略http.pipeline。

nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>

4、扫描HTTP代理

使用http代理是为了隐藏自己的真实ip地址。下列命令显示如何检测开放代理:

nmap --script http-open-proxy -p8080 <target>

我们还可以指定用来验证的url。

nmap --script http-open-proxy --script-args http-open-proxy.url=http://whatsmyip.org,http-open-proxy.pattern=”Your IP address” -p8080 <target>

5、发现有趣的文件和目录和管理员账户

这是在渗透测试中常见的任务,通常采用自动化工具完成。经常讨论的Web应用程序的脆弱性有目录列表,用户账户枚举,配置文件等。用Nmap的NSE可以更快的帮助我们完成这个任务。

nmap --script http-enum -p80 <target>

查找lua脚本

指纹存储在nselib/data/http-fingerprints.lua,事实上是LUA表格。若要显示所有的存在页面

nmap script http-enum http-enum.displayall -p80 <target>

指定不同的User Agent来绕过某些防火墙

nmap -p80 --script http-enum --script-args http.useragent=”Mozilla 5″<target>

也可以指定HTTP管道数目来加快扫描

nmap -p80 --script http-enum --script-args http.pipeline=25 <target>

6、暴力破解HTTP身份认证

很多家用路由器,IP网络摄像头,甚至是Web应用程序仍然依赖于HTTP认证,渗透测试人员需要尝试弱密码的单词列表,以确保系统或用户帐户是安全的。现在多亏了NSE脚本http-brute,我们可以对HTTP认证保护的资源执行强大的字典攻击。请参见下面的命令:

nmap -p80 --script http-brute --script-args http-brute.path=/admin/ <target>

http-brute脚本默认使用的是自带的字典,如果要使用自定义的字典。

nmap -p80 --script http-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>
http-brute支持不同的模式进行攻击。

用户模式:该模式下,对于userdb中的每个user,会尝试passdb里面的每个password

nmap --script http-brute --script-args brute.mode=user <target>

密码模式:该模式下,对于passdb中的每个password,会尝试userdb里面的每个user。

nmap --script http-brute --script-args brute.mode=pass <target>

fcreds:此模式需要额外的参数brute.credfile。

nmap --script http-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>

7、mod_userdir渗透测试

Apache的模块UserDir提供了通过使用URI语法/~username/来访问用户目录的方法。我们可以使用Nmap进行字典攻击,确定web服务器上有效的用户名列表。

nmap -p80 –script http-userdir-enum <target>

跟上面的脚本一样,可以设置User Agent、HTTP管道参数。

8、测试默认账号

通常情况下Web应用程序存在默认凭据,通过NSE很容易发现。

nmap -p80 --script http-default-accounts <target>

脚本通过查找已知路径和已知的用户密码来登陆,依赖/nselib/data/http-default-accounts.nse存放的指纹文件。

9、WordPress审计

发现使用弱密码账户安装的wordpress,输入如下命令:

nmap -p80 --script http-wordpress-brute <target>

设置线程的数量,使用脚本参数http-wordpress-brute.threads:

nmap -p80 --script http-wordpress-brute --script-args http-wordpressbrute.threads=5 <target>

如果服务器是虚拟主机,利用参数http-wordpressbrute设置主机字段:

nmap -p80 --script http-wordpress-brute --script-args http-wordpressbrute.hostname=”ahostname.wordpress.com” <target>

设置一个不同的登陆URI,登录使用参数http-wordpress-brute.uri:

nmap -p80 --script http-wordpress-brute --script-args http-wordpressbrute.uri=”/hidden-wp-login.php” <target>

要改变存储的用户名和密码的POST变量的名称,设置参数http-wordpress-brute.uservar和http-wordpress-brute.passvar:

nmap -p80 --script http-wordpress-brute --script-args http-wordpressbrute.uservar=usuario,http-wordpress-brute.passvar=pasguord <target>

10、Joomla审计

Joomla是在许多国家非常流行的cms,使用http-joomla-brute脚本来检测弱密码账户。

nmap -p80 --script http-joomla-brute <target>

注:Wordpress的方法也适用于Joomla。

11、扫描目标网站备份

http-backup-finder.nse

nmap -p80 --script=http-backup-finder 192.168.3.0/24

12、iis6.0远程代码执行

调用http-vuln-cve2015-1635.nse测试脚本:

nmap -sV --script http-vuln-cve --script-args uri='anotheruri'  192.168.3.0/24

nmap官方脚本文档中有部分cve漏洞的测试脚本,大家可以根据需要调用

13、检测Web应用防火墙

要检测web应用防火墙,使用如下命令:

nmap -p80 --script http-waf-detect <target>

可以通过检测响应内容的变化来检测防火墙,推荐使用内容较少的页面。

nmap -p80 --script http-waf-detect --script-args=”http-waf-detect.detectBodyChanges” <target>

使用更多的攻击载荷:

nmap -p80 --script http-waf-detect --script-args=”http-waf-detect.aggro” <target>

14、检测跨站跟踪漏洞

当Web服务器存在跨站脚本漏洞,又启用了TRACE方法,这样就可以获取启用了HttpOnly的Cookie。如下命令检测是否启用TRACE。

nmap -p80 --script http-methods,http-trace --script-args http-methods.retest <target>

15、检测XSS漏洞

跨站脚本漏洞允许攻击者执行任意js代码。检测命令如下:

nmap -p80 --script http-unsafe-output-escaping <target>

该脚本会检测基于用户输入的输出可能出现的问题,发送以下内容到它发现的所有参数:ghz%3Ehzx%22zxc%27xcv

更多详情,查阅:

http://nmap.org/nsedoc/scripts/http-phpself-xss.html

http://nmap.org/nsedoc/scripts/http-unsafe-output-escaping.html

16检测SQL注入

使用如下命令:

nmap -p80 --script http-sql-injection <target>

可以设置脚本参数httpspider.maxpagecount,来加快扫描的速度。

nmap -p80 --script http-sql-injection --script-args httpspider.maxpagecount=200 <target>

一个有趣的参数是httpspider.withinhost,它限制nmap只能爬取给定的主机。默认情况下是启用的,如果为了爬行相关的站点可以禁用。

nmap -p80 --script http-sql-injection --script-args httpspider.withinhost=false

详情查阅官方文档:https://nmap.org/nsedoc/lib/httpspider.html

同样可以设置User Agent和HTTP管道的数目:

nmap -p80 --script http-sql-injection --script-args http.useragent=”Mozilla 42″ <target>

17 扫描主机名

使用如下命令:

nmap --script nbstat 192.168.xx.xx

139是TCP,135的UDP,这两个端口都是NETBIOS接口占用的,只要windows主机,安装了NetBIOS,通过这两个端口,可以查询共享文件,登录用户名,操作系统等信息。

nmap -p 139 --script nbstat 192.168.xx.xx

声明:
由于Nmap测试脚本众多,本文尚未对所有脚本进行测试讲解,只是对渗透测试中常用的某些脚本进行简单介绍,大家可以根据上面介绍的脚本调用的方法举一反三,在平时的渗透测试中活学活用。当然,我也会在后续的工作学习中,继续补充可能用到的nse脚本。文章中如有错误,还请各位大佬们斧正,谢谢!

附:Nmap使用脑图

参考链接:
https://nmap.org/book/idlescan.html
http://www.nmap.com.cn/doc/manual.shtm
https://nmap.org/nsedoc/
https://nmap.org/nsedoc/categories
https://seclists.org/nmap-dev/
https://svn.nmap.org/nmap/

posted @ 2020-01-26 20:34  zha0gongz1  阅读(5023)  评论(0编辑  收藏  举报