Nmap高级用法
Nmap 脚本引擎
Nmap Scripting Engine(NSE) 是 Nmap 非常重要的特性,它允许用户使用 Lua 语言编写简单的脚本程序来实现各种网络管理任务的自动化运行。目前 Nmap 已提供超过 150 个脚本,可以在 https://nmap.org/nsedoc/ 查看和下载这些脚本,或者在本地 Nmap 安装目录下的 scripts 目录中查看这些脚本,或者编写 Lua 程序定制脚本。
nmap脚本主要分为以下几类,在扫描时可根据需要设置–script=类别这种方式进行比较笼统的扫描:
类别 | 解释 |
---|---|
auth | 负责处理鉴权证书(绕开鉴权)的脚本 |
broadcast | 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务 |
brute | 提供暴力破解方式,针对常见的应用如http/snmp等 |
default | 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力 |
discovery | 对网络进行更多的信息,如SMB枚举、SNMP查询等 |
dos | 用于进行拒绝服务攻击 |
exploit | 利用已知的漏洞入侵系统 |
external | 利用第三方的数据库或资源,例如进行whois解析 |
fuzzer | 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽 |
malware | 探测目标机是否感染了病毒、开启了后门等信息 |
safe | 此类与intrusive相反,属于安全性脚本 |
version | 负责增强服务与版本扫描(Version Detection)功能的脚本 |
vuln | 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067 |
nmap的脚本默认目录为:/usr/share/nmap/scripts/
扫描优化
选项 | 解释 |
---|---|
–min-hostgroup | 调整并行扫描组的大小 |
–min-parallelism | 调整探测报文的并行度 |
–max-parallenlism | 调整探测报文的并行度 |
–min-rtt-timeout | 调整探测报文超时 |
–max-rtt-timeout | 调整探测报文超时 |
–initial-rtt-timeout | 调整探测报文超时 |
–host-timeout | 放弃低速目标主机 |
–scan-delay | 调整探测报文的时间间隔 |
–max-scan-delay | 调整探测报文的时间间隔 |
调整并行扫描组的大小
Nmap默认情况下在进行扫描的时候,首先开始扫描较小的组,最小为5,随后慢慢增长组的大小,最大为1024,为了保证效率,Nmap会针对UDP或少量端口的TCP扫描。
–max-hostgroup选项用于说明使用最大的组,Nmap不会超过这个大小。–min-hostgroup选项说明最小的组,Nmap会保持组大于这个值。
nmap --min-hostgroup 30 192.168.0.12/24
nmap --max-hostgroup 10 192.168.0.12/24
调整探测报文的并行度
–min-parallelism大于1可以在网络或主机不好的情况下更好地扫描,但会影响准确度。–max-parallelism应该设置为1,防止Nmap对同一主机同一时间发送多次报文。
nmap --min-parallelism 100 192.168.0.12/24
nmap --max-parallelism 100 192.168.0.12
调整探测报文超时
使用–max-rtt-timeout选项时,规定100毫秒比较合适。一般情况下,rtt值不得小于100毫秒,也最好不要超过1000毫秒。
namp --initial-rtt-timeout 1000ms 192.168.0.12
nmap --max-rtt-timeout 500ms 192.168.0.12
nmap --min-rtt-timeout 500ms 192.168.0.12
放弃缓慢的目标主机
nmap --host-timeout 100ms 192.168.0.12/24
调整报文适合时间间隔
改选项可以控制Nmap对一个或多个主机发送探测报文的等待时间,等待时间以毫秒为单位,很多时候Nmap会发送很多不必要的报文,会时Nmap运行速度降低。当我们的带宽不是很乐观的情况下可以使用该选项,但此选项并不能将Nmap应有的性能发挥出来,对于这个选项还是需要谨慎使用。
nmap --scan-delay ls 192.168.0.12
nmap--max-scan-delay 30s 192.168.0.12
防火墙/IDS逃逸
选项 | 解释 |
---|---|
-f | 报文分段 |
–mtu | 指定偏移大小 |
-D | IP欺骗 |
-sI | 源地址欺骗 |
–source-port | 源端口欺骗 |
–data-length | 指定发包长度 |
–randomize-hosts | 目标主机随机排序 |
–spoof-mac | MAC地址欺骗 |
报文分段
在Nmap使用-f选项时会将TCP头分段在几个包中,使得包过滤器、IDS以及其他工具的检测更加困难。Nmap在IP头后会将包分为8个字节或更小。
一些主机会禁止相应ICMP请求,对于这种情况就可以使用报文分段的方法来逃避目标防火墙的规则。
nmap -f -v 192.168.121.1
指定偏移大小
此值设定TCP/IP协议传输数据报时的最大传输单元。使用指定MTU可以达到逃逸防火墙/IDS的目的,需要注意的是偏移量必须是8的倍数。
nmap --mtu 16 192.168.126.131
IP欺骗
在使用该选项对目标进行扫描的时候,会让目标主机误认为是在利用诱饵进行扫描,而不是一个真实的扫描,这样可以躲避防火墙和某些规则的限制,也可以达到隐藏自身的目的,这在实际的扫描中是非常有用的一个选项。
可以使用英文的逗号对每个诱饵主机进行分割,当然也要领会目标主机管理员的想法,他可能会认为该扫描使用的是诱饵主机进行的扫描,而不是真实的扫描地址,因此会忽略这次扫描,反而可以使用自己的真实IP去进行扫描,会达到欺骗目标主机管理员的目的,这样做时最好与诱饵主机交叉使用。
IP欺骗语法如下:
Nmap -D【decoy1,decoy2…|RND:number】【目标】
使用-D选项可以指定多个IP地址,或使用RND随机生成几个地址,在指定的诱饵之间使用逗号进行分割,需注意的是在进行版本检测或者TCP扫描的时候诱饵是无效的。
nmap -D RND:11 192.168.126.131
nmap -D 192.168.0.1,192.168.0.2,192.168.0.254 192.168.121.1
nmap -D 192.168.0.1,192.168.0.2,192.168.0.254,ME 192.168.121.1
注意:诱饵主机必须处于工作状态,否则会导致目标主机的syn洪水攻击。
源地址欺骗
使用-sI可以进行源地址欺骗,如果Nmap无法确定你的源地址,Nmap会给出相应的提示,我们使用该选项指定所需要发包的接口IP地址。
nmap -sI www.oday.co:80 192.168.126.131
源端口欺骗
使用–source-port选项就可以进行源端口欺骗,也可以使用-g,我们只需提供一个端口号,Nmap就可以从这些端口中发送数据,因为防火墙对服务器的设置会根据端口选择是否信任数据流,管理员可能会认为这些端口不会有攻击发生,可以利用这些端口进行扫描。
nmap --source-port 53 192.168.126.131
指定发包长度
通常情况下,TCP包时40个字节,ICMP Echo 有28个字节,所以在原来的报文基础上附加随机数据达到规避防火墙的效果。
nmap --data-length 30 192.168.126.131
目标主机随机排序
使用–randomize-hosts选项就可以对目标主机的顺序进行随机排序,最多可达8096个主机。单方面使用这个选项对防火墙/IDS逃逸效果不大,如果配合时间选项则会有很好的效果。
nmap -randomize-hosts 192.168.126.1-200
MAC地址欺骗
使用–spoof-mac选项就可以进行MAC欺骗。冒失的指定一个MAC定制反而会引起管理员的怀疑,这时我们可以使用字符串“0”随机分配一个MAC地址。指定的MAC地址最好真实存在,这样才能起到欺骗效果。
–spoof-mac选项可以使用 的参数包括0、MAC Address、Vendor Name。0表示随机生成一个MAC地址,MAC Address表示用户手动指定一个MAC地址,Vendor Name表示从指定的厂商生成一个MAC地址。
nmap -sT -PN --spoof-mac 0 192.126.131
Nmap技巧
nmap中不常用但是却非常有用的选项。
选项 | 解释 |
---|---|
–send-eth | 发送以太网数据包 |
–send-ip | 网络层发送 |
–privileged | 假定拥有所有权 |
–interactive | 在交互模式中启动 |
-d | 设置调试级别 |
–packet-trace | 跟踪发送接受的报文 |
-iflist | 列举接口和路由 |
-e | 指定网络接口 |
-oG | 继续中断扫描 |
firewalk | 探测防火墙 |
vmauthd-brute | VM认证破解 |
发送以太网数据包
该选项会要求Nmap在数据链路层发送报文,而不是在网络层发送报文。注意:在UNIX中无论是否使用该选项,Nmap都会使用原IP包。
nmap --send-eth 192.168.126.131
网络层发送
该选项要去Nmap通过网络层发送报文,而不是在数据链路层发送报文,这个选项与–send-eth选项在实际运用中相互补充。
nmap --send-ip 192.168.126.131
假定拥有所有权
–privileged选项要求Nmap假定其具有足够的权限进行源套接字包发送、报文捕获和类似UNIX系统中根用户操作的权限。默认状态下,如果由getuid()请求的类似操作不为0,Nmap将退出。
–pricileged在具有Linux内核性能的类似系统中使用非常有效,这些系统配置允许非特权用户可以进行原报文扫描。需要明确的是,其他选项之前使用这些西药权限的选项(SYN扫描、操作系统检测等)。Nmap-PRIVILEGED变量设置等价于–privileged选项。
在交互模式中启动
Nmap提供交互模式,便于进行多个扫描。如果使用这个选项,需要对shell终端的命令足够熟悉。
nmap --interactive
n -T4 192.168.126.163
设置调试级别
当详细模式也不能为问提供充足的数据时,可以启用-d选项,在-d选项后面填入输入表示调试级别可选1~9,-d 9 是最高阶别,这时候产生的数据会非常多。
nmap -d 1 192.168.126.131
跟踪发送接受的报文
该选项经常用于调试,而不是实际运用到扫描网络。该选项会要求Nmap将接收到的每个报文打印出来。未来便于分析,可以使用-p选项控制端口而产生少量的报文,便于我们分析。
nmap --packet-trace -p 20-30 192.168.126.131
列举接口和路由
该选项会告诉Nmap打印出检测到的接口列表和路由,多用于调试路由。
nmap --iflist www.0day.co
指定网络接口
-e选项可以指定从哪个网络接口发送数据。
nmap -e eth0 192.168.126.131
继续中断扫描
在使用Nmap扫描网络的时候可能会需要很长的时间,但是我们可能需要在多个时间的进行扫描,或者由于其他的原因导致网络中断时,我们可以使用–resume选项继续扫描,但是必须配合-oN选项或者-oG选项使用。
我们使用-oG将扫描结果保存为TXT,然后在扫描过程中按下Ctrl+C中断扫描。
nmap -oG 1.txt -v 192.168.126.1/24
nmap --resume 1.txt
Nmap的分布式实现-Dnmap
Dnmap是一款基于Nmap的分布式框架,使用客户端/服务器架构,服务器接受命令并发送至客户端进行Nmap安全扫描,扫描完毕后,客户端返回扫描结果。
首先再http://sourceforge.net/projects/dnmap/下载Dnmap。
下载安装好之后
新建一个文件,写入需要扫描的命令,每行一条,如下所示:
启动Dnmap服务。-f选项指定我们的命令文件。
./dnmap_server.py -f /home/test
重新打开一个终端,让Dnmap链接服务器。
./dnmap_client.py -s 192.168.126.130 -a test
此时两个Dnmap的窗口数据会不断滚动直到扫描完成。
在nmap_output文件夹下面有Dnmap保存的扫描结果。
探测防火墙
在Nmap的firewalk脚本通过发送一个请求并分析TTL值,可以探测防火墙的规则。
nmap --script=firewalk --traceroute 192.168.131.1
VMWare认证破解
Nmap中的vmauthd-brute脚本可以破解安装虚拟机系统的用户名与密码。
nmap -p 902 --script vmauthd-brute 192.168.121.1