介绍
Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。
使用
1、目标说明
扫描整个网段 192.168.1.0/24
扫描域名所在网段 www.baidu.com/24
扫描特定限制地址段 0-255.0-255.77.88
以上方式可以混合使用,之间用空格分隔
-iL <inputfilename> 从列表输入目标: nmap -sP -iL i:\ip.txt #当需要扫描的地址过多,可以直接通过文件名导入。
-iR <hostnum> 随机选择目标: nmap -sP -iR 10 #后接参数表示随机的个数,0为不限制个数,不合规的IP会自动忽略。
--exclude <host1,host2,host3,...> 排除不需要扫描的主机或段: nmap -sP 192.168.1.0/24 --exclude 192.168.1.1-100,192.168.1.200-254
--exclude <excludefile> #排除的IP地址或段通过文件导入。
2、参数说明
nmap –iflist : 查看本地主机的接口信息和路由信息
-A :选项用于使用进攻性方式扫描
-T4: 指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4
-oX test.xml: 将扫描结果生成 test.xml 文件,如果中断,则结果打不开
-oA test.xml: 将扫描结果生成 test.xml 文件,中断后,结果也可保存
-oG test.txt: 将扫描结果生成 test.txt 文件
-sn : 只进行主机发现,不进行端口扫描
-O : 指定Nmap进行系统版本扫描
-sV: 指定让Nmap进行服务版本扫描
-p <port ranges>: 扫描指定的端口
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况
-script <script name> : 指定扫描脚本
-Pn : 不进行ping扫描
-sP : 用ping扫描判断主机是否存活,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping
-PI : 设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。
-iL 1.txt : 批量扫描1.txt中的目标地址
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况
-sO: 使用IP protocol 扫描确定目标机支持的协议类型
-PO : 使用IP协议包探测对方主机是否开启
-PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机
-PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态
-e eth0:指定使用eth0网卡进行探测
-f : --mtu <val>: 指定使用分片、指定数据包的 MTU.
-b <FTP relay host>: 使用FTP bounce scan扫描方式
-g: 指定发送的端口号
-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)
-v 表示显示冗余信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态
-n : 表示不进行DNS解析;
-D <decoy1,decoy2[,ME],...>: 用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址
-R :表示总是进行DNS解析。
-F : 快速模式,仅扫描TOP 100的端口
-S <IP_Address>: 伪装成其他 IP 地址
--ttl <val>: 设置 time-to-live 时间
--badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或 IDS/IPS)
--dns-servers : 指定DNS服务器
--system-dns : 指定使用系统的DNS服务器
--traceroute : 追踪每个路由节点
--scanflags <flags>: 定制TCP包的flags
--top-ports <number> :扫描开放概率最高的number个端口
--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数
--version-trace: 显示出详细的版本侦测过程信息
--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)
--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统
--data-length <num>: 填充随机数据让数据包长度达到 Num
--ip-options <options>: 使用指定的 IP 选项来发送数据包
--spoof-mac <mac address/prefix/vendor name> : 伪装 MAC 地址
--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。
--version-light: 指定使用轻量侦测方式 (intensity 2)
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)
--version-trace: 显示出详细的版本侦测过程信息
nmap 192.168.1.0/24 -exclude 192.168.1.10 #扫描除192.168.1.0外的该网段的其他地址
nmap 192.168.1.0/24 -excludefile f:/1.txt #扫描除给定文件中的地址以外的其他地址
nmap -sF -T4 192.168.1.0 #探测防火墙状态
3、端口扫描基础
默认扫描主句超过1660个TCP端口
6种端口状态:
open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽,Nmap不能识别。
closed|filtered :端口是关闭的或被屏蔽,Nmap不能识别
4、主机发现
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
-sP: ping扫描,也叫地毯式ping,发送一个ICMP请求和一个TCP请求到80端口,检测活动主机。同时如果扫描同一局域网的话还会发ARP包进行探测。
-sn: Ping Scan 只进行主机发现,不进行端口扫描。
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
-PS/PA/PU/PY[portlist]: 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现。
-PE/PP/PM: 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机。
-PO[protocol list]: 使用IP协议包探测对方主机是否开启。
-PR: ARP ping,因为不需要arp 解析,所以会更快更可靠,即使指定了iP的请求方式,也会默认发送ARP探测,局域网内推荐。
-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。
--dns-servers <serv1[,serv2],...>: 指定DNS服务器。
--system-dns: 指定使用系统的DNS服务器
--traceroute: 追踪每个路由节点
5、端口扫描技术
Nmap的端口扫描参数都是"s"开头,第二个字母为技术所选字母大写。
-sS (TCY SYN 扫描)
半开放扫描, SYN/ACK表示端口在监听(开放),而RST (复位)表示没有监听者。如果数次重发后仍没响应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误(类型3,代码1, 2, 3, 9, 10,或者13),该端口也被标记为被过滤。
-sT (TCP connect 扫描)
TCP connect方式使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标主机上留下记录信息,不够隐蔽。所以,TCP connect是TCP SYN无法使用才考虑使用的方式
-sU (UDP 扫描)
UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的。
-sN (Null 扫描)
如果扫描系统遵循该RFC, 当端口关闭时,任何不包含SYN, RST,或者ACK位的报文会导致一个RST返回,而当端口开放时,应该没有任何响应,只要不包|含SYN, RST,或者ACK,任何其它三种(FIN, PSH, and URG)的组合都行。不设置任何标志位(tcp标志头是0)
-sF (FIN 扫描)
只设置TCP FIN标志位
-sX (Xmas 扫描)
只设置FIN,PSH,和URG标志位
-sA (TCP ACK 扫描)
向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况
-sW (TCP 窗口扫描)
通过检查返回的RST报文的TCP窗口城确定窗口是否关闭,开放端口为正,关团端口为0,但是,这种情况很多系统并不适用,可以作为参考
-sM (TCP Maimon 扫描)
发送的TCP探测报文是FIN/ACK,无论端口开放或者关闭,都应该相应RST
-sO (IP协议扫描)
扫描目标主机开放了哪些协议,而不是端口,扫描会遍历所有IP协议号,并且可以通过-p参数指定要扫描的协议号
-sI <zombie host[:probeport]>(Idlesan)
高级扫描,拖藏自身IP地址,可以指定你以为可能被信任的主机IP进行扫描,参考https://nmap.org/book/idlescan.html
-b <ftp relay host>(FTP弹跳扫描)
FTP允许用户连接到一台FTP服务器,然后要求文件送到一台第三方服务器,这个特性大多被封禁,但是现在仍可以利用,用来绕过防火墙,因为一般FTP服|务器会有比web服务器更高的内网连通权限
--scanflags(定制的TCP扫描)
可以任意定制TCP标志位,包括: URG, ACK,PSH, RST, SYN,FIN等任意组合,组合顺序不重要,除了设置标志位,还可以指定TCP扫描类型,不指定到默认SYN描
6、端口说明和扫描顺序
默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services文件中列出的更高的端口进行扫描。
-p <port ranges> (只扫描指定的端口)
可以单个端口,也可以1-99的范围端口,开始和结束省略代表1和65535,两端都省略表示扫描所有端口号,在-sO的协议号扫描中-p参数可以指定扫描的协号:当同时扫描TCP和UDP时, nmap-sU -sS -p U:53,137,T:23,3389,80 10.10.172.87,不加端口限制,默认最大
-F(快速扫描)
Fast mode – 快速模式,仅扫描TOP 100的端口
-r (不要按随机顺序扫描端口)
Nmap默认是随机扫描,常用端口会前移,用-r 选项可以强制按顺序扫描端口。
--top-ports <number>
扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表,具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口)
--port-ratio <ratio>
扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件
7、服务与版本探测
-sV (版本探测)
打开版本探测
-A (操作系统探测)
打开操作系统探测
-sR (RPC 扫描)
和端口扫描结合使用,对发现开放的端口执行命令,确定是否是RPC端口,如里是,打印详细信息。这作为-sV的一部分自动打开。由于版本探测包含它并且全面的多,所以-sR很少被需要。
--allports (不为版本探测排除任何端口)
默认情况下,nmap会跳过9100TCP端口,以为打印机会打印一堆这种扫描请求。用--allports 可以不排除任何端口。
--version-intensity <intensity> (设置版本扫描强度)
共有0-9个级别的探测强度,默认为7,强度值越高,扫描的越准确,也越慢,当探测报文通过nmap-service-probes port指示符注册到目标端口时,不论什么强度都会默认扫描
--version-light (打开轻量级模式)
扫描强度为2 的别名
--version-all (尝试每个探测)
扫描强度为9的别名
--version-trace (跟踪版本扫描活动)
会同步打印正在扫描的调试信息,是--packet-trace 的所得信息的子集。
8、操作系统探测
nmap 发送大量的查询信息,根据反馈对比自己对于系统描述的数据库,最后确定操作系统类型。
-O (启用操作系统检测)
也可以使用-A来同时启用操作系统检测和版本检测。
--osscan-limit (针对指定的目标进行操作系统检测)
这个选项是只对发现一个打开或者关闭的TCP端口的主机进行操作系统检测,以提高效率,并且只在-O 或者-A 时起作用。
--osscan-guess; --fuzzy (推测操作系统检测结果)
默认开启,是指如果nmap不能确定操作系统,那么会提供一个相近的匹配。
9、时间和性能
nmap 开发的最高优先级是性能,本地网络一个主机的默认扫描是1/5秒。
-T (设置时间模板)
模板化选项,编号0-5, 0-1躲避IDS; 2 降低扫描速度, 节约带宽和目标主机资源;3默认选项;4 假设用户网络健康加速扫描; 5极快模式,消耗更多的网络资源,追求速度降低准确性; 2比3要慢10倍; -T4禁止扫描延迟超过10ms的主机, -T5延迟不能超过5ms; 0、1、2都不是并行扫描,不适用于大数据量1的扫描
T4选项与--max-rtt-timeout 1250 --initial-rtt-timeout 500等价,最大TCP扫描延迟为10ms。
T5等价于--max-rtt-timeout 300--min-rtt-timeout 50 --initial-rtt-timeout 250--host-timeout 900000,最大TCP扫描廷迟为5ms
--scan-delay <milliseconds>
--max-scan-delay <milliseconds> (调整探测报文的时间间隔)
对于对扫描有速率或阈值限制的时候,这个选项可以调整扫描的发包间隔,避免被IPS
--host-timeout <milliseconds> (放弃低速目标主机)
默认对于扫描超过1800000ms(半个小时)的主机进行忽略,并且在这半个小时中nmap是在同时扫描别的主机,并没有停止,忽略了就不会有结果输出。
--min-hostgroup <milliseconds>
--max-hostgroup <milliseconds> (调整并行扫描组的大小)
nmap并发扫描是先分组再扫描,所分的组大小大于设定的最小组,小于最天1组,必须是扫描完整个组才会出扫描报告,一般最小组为5,最大为1024,nmap一般采用先小组出结果,然后增加组的大小增快扫描速度。
--min-parallelism <milliseconds>
--max-parallelism <milliseconds> (调整探测报文的并行度)
指定一个范围,nmap 会根据网络状况和主机性能,自动调整并行报文探测的数量,并行度数量一般是1到几百。
--min-rtt-timeout <milliseconds>
--max-rtt-timeout <milliseconds>
--initial-rtt-timeout <milliseconds> (调整探测报文超时)
nmap会根据上一个探测报文自动计算时值,本地网络max 100ms比较合适,有路由的话可以先ping测试看延迟,然后init是往返时间的2倍, max是3-4倍,通常, max不能小于100ms,不能超过1000ms, min很少使用。
10、防火墙/IDS 躲避和哄骗
-f (报文分段);--mtu (使用指定的MTU)
将TCP头分段在几个包中,使的包过滤, IDS等安全手段检测更加困难。偏移量必须是8的倍数,但是,在一些系统中,这种将TCP头部分片的方式会影响到目标系统和网络的解读。
-D <decoy1,decoy2,[ME]...> (使用诱饵隐藏扫描)
使用诱饵隐藏扫描的源主机,让远程主机以为是诱饵在扫描目标网络,也是一中隐藏自身IP地址的技术,如果在第6或者更后位置使用ME选项,一些检测器就不会报告这个真实IP,如果不使用ME选项,那么真实IP将放在一个随机位置,同时需要保证诱饵主机是活的,在线的。
-e <interface> (使用指定的接口)
强制Nmap 使用特定接口发送和接受报文。
--source-port <portnumber>;
-g <portnumber> (源端口哄骗):
这两个命令是等价的,强制nmap 从目标主机可能信任的我方端口发送扫描,比如UPD 53 或者 TCP20
--data-length <number> (发送报文时 附加随机数据)
Nmap 默认发送最少的报文,只包含一个头部,TCP通常40字节,ICMP ECHO 通常28字节,这个命令实在报文上增加指定数量的随机字节,会使处理变慢。
--ttl <value> (设置IP time-to-live域)
设置IPV4 报文的time-to-live 域为指定的值。
--randomize-host (对目标主机的顺序随机排列)
扫描前对每个组中的主机随机排序,最多可达8096个,这会使得扫描针对不同的网络监控系统来说变得不是很明显。
--spoof-mac <mac address, prefix, or vendor name> (MAC 地址哄骗)
Nmap例造源mac地址进行发送以太网顿,如果0,那么是随机mac.如果16进制,那么使用这个mac地址,如果是小于12的16进制,填充剩下的6个字节,如果参数不是0或16制字符串, Nmap将通过nmap-mac-prefixes查找厂商的名称(大小写区分),如果找到匹配, Nmap将使用厂商的QU1(3字节前缀),然后随机填充剩余的3个节字,正确的-spoof-mac参数有. Apple. 0. 01:02-03:04:05:06.deadbeefcafe. 0020E 和 Cisco
11、运行时交互
Nmap 可以在扫描过程中调整输入输出,不必终止扫描或者重启
v/V 增加/减少细节
d/D 提高/降低调试级别
p/P 打开/关闭报文跟踪
12、输出
输出格式
-oN <filespec> (标准输出) 格式与交互性输出略有不同
-oX <filespec> (XML输出) 输出为XML格式,可以进行编程语言的调用分析
-oS <filespec> (脚本小子输出) 脚本小子输出,类似于交互工具输出
-oG <filespec> (Grep 输出) 输出比较简单,每行一个主机,方便查找,适用环境较少
-oA <basename> (输出至所有格式) 将扫描结果以标准格式、XML 格式和Grep格式一次性输出。
细节和调试选项
-v (提高输出信息的详细度)
大部分的变化仅影响交互式输出;这个选项如果使用两次,会提供更详细的信息。
–d [level] (提高或设置调试级别)
当觉得详细模式不再详细时,可以使用-d设置调试级别,-d9为最高级别,能够产生上千行输出,这个一般是属于开发人员的选项,可以剖析Nmap的工作原理。
–packet-trace (跟踪发送和接收的报文)
要求Nmap打印发送和接收的每个报文的摘要,通过用于调试,如果只需进行版本检测,使用-version-trace
–iflist (列表接口和系统路由)
输出Nmap 检测到的接口列表和系统路由,用于调试路由问题或设备描述失误
其他输出选项
–append-output (表示在输出文件中添加,而不是覆盖原文件)
在现有文件的基础上在内容后面追加新的扫描结果: -oX和-ON都是重名覆盖:但是对于XML扫描输出是无效的,因为无法正常解析
–resume <filename>(继续中断的扫描)
对于标准扫描(-oN)或者Grep扫描(-oG) ,当扫描中断知道,可以使用nmap--resume <logfilename>命令导入之前的扫描输出, Nmap会解析之前的扫描输出并使用原来的格式输出, Nmap会把新的扫描结果添加到源文件中,但是这种格式不支持XML输出格式,因为合并太困难。
–stylesheet <path or URL>:设置XSL样式表,转换XML输出;
Web浏览器中打开Nmap的XML输出时,将会在文件系统中寻找nmap.xsl文件,并使用它输出结果
–no-stylesheet(忽略XML生命的XSL样式表 )
使用该选项禁止Nmap 的XML输出关联任何XSL样式表。
技巧总结
一、主机发现
1. 全面扫描/综合扫描
nmap -A 192.168.1.103
2. Ping扫描
nmap -sP 192.168.1.1/24
3. 免Ping扫描,穿透防火墙,避免被防火墙发现
nmap -P0 192.168.1.103
4. TCP SYN Ping 扫描
nmap -PS -v 192.168.1.103
nmap -PS80,10-100 -v 192.168.1.103 (针对防火墙丢弃RST包)
5. TCP ACK Ping 扫描
nmap -PA -v 192.168.1.103
6. UDP Ping 扫描
nmap -PU -v 192.168.1.103
7. ICMP Ping Types 扫描
nmap -PU -v 192.168.1.103 (ICMP ECHO)
nmap -PP -v 192.168.1.103 (ICMP 时间戳)
nmap -PM -v 192.168.1.103 (ICMP 地址掩码)
8. ARP Ping 扫描
nmap -PR -v 192.168.1.103
9. 列表 扫描
nmap -sL -v 192.168.1.103
10. 禁止方向域名解析
nmap -n -sL -v 192.168.1.103
11. 方向域名解析
nmap -R -sL -v 192.168.1.103
12. 使用系统域名解析系统
nmap --system-dns 192.168.1.2 192.168.1.103
13. 扫描IPV6地址
nmap -6 IPv6
14. 路由跟踪
nmap --traceroute -v www.sunbridgegroup.com
15. SCTP INIT Ping 扫描
nmap -PY -v 192.168.1.103
二、端口扫描
1. 时序扫描
nmap -T(0-5) 192.168.1.103
2. 常用扫描方式
nmap -p 80 192.168.1.103
nmap -p 80-100 192.168.1.103
nmap -p T:80,U:445 192.168.1.103
nmap -F 192.168.1.1.103 (快速扫描)
nmap --top-ports 100 192.168.1.103 (扫描最有用的前100个端口)
3. TCP SYN 扫描 (高效的扫描方式)
nmap -sS -v 192.168.1.103
4. TCP 连接扫描
nmap -sT -v 192.168.1.103
5. UDP 连接扫描
nmap -sU -p 80-100 192.168.1.103
6. 隐蔽扫描
nmap -sN 61.241.194.153(NULL扫描)
nmap -sF 61.241.194.153(FIN扫描)
nmap -sX 61.241.194.153(Xmas扫描)
7. TCP ACK 扫描
nmap -sA 192.168.1.103
8. TCP 窗口扫描
nmap -sW -v -F 192.168.1.103
9. TCP Maimon 扫描
nmap -sM -T4 192.168.1.103
10. 自定义 扫描
nmap -sT --scanflags SYNURG 192.168.1.103
11. 空闲 扫描( 隐藏IP )
nmap -sI www.0day.co:80 192.168.1.103
12. IP协议 扫描
nmap -sO -T4 192.168.1.103
13. FTP Bounce 扫描
(已经不被支持)
三、指纹识别与探测
1. 版本探测
nmap -sV 192.168.1.103
nmap -sV -A 192.168.1.103
2. 全端口版本探测
nmap -sV --allports 192.168.1.103
3. 设置扫描强度
nmap -sV --version-intensity (0-9) 192.168.1.103
4. 轻量级扫描
nmap -sV --version-light 2 192.168.1.103
5. 重量级扫描
nmap -sV --version-all 192.168.1.103
6. 获取详细版本信息
nmap -sV --version-trace 192.168.1.103
7. RPC扫描
nmap -sS -sR 192.168.1.103
8. 对指定的目标进行操作系统监测
nmap -O --osscan-limit 192.168.1.103
9. 推测系统并识别
nmap -O --osscan-guess 192.168.1.103
四、伺机而动
1. 调整并行扫描组的大小
nmap --min-hostgroup 30 192.168.1.110/24
nmap --max-hostgroup 30 902 192.168.1.104
2. 调整探测报文的并行度
nmap --min-parallelism 100 192.168.1.104
nmap --max-parallelism 100 192.168.1.104
3. 调整探测报文超时
nmap --initial-rtt-timeout 100ms 192.168.1.104
nmap --max-rtt-timeout 100ms 192.168.1.104
nmap --min-rtt-timeout 100ms 192.168.1.104
4. 放弃缓慢的目标主机
nmap --host-timeout 1800000ms 192.168.1.104
5. 调整报文适合时间间隔
nmap --scan-delay 1s 192.168.1.104
nmap --max-scan-delay 1s 192.168.1.104
五、防火墙/IDS逃逸
1. 报文分段
nmap -f -v 61.241.194.153
2. 指定偏移大小
nmap --mtu 16 192.168.1.104
3. IP欺骗
nmap -D RND:11 192.168.1.104
nmap -D 192.168.1.104,192.168.1.103,192.168.1.101 192.168.1.104
4. 源地址欺骗
nmap -sI www.0day.cn:80 192.168.1.104
5. 源端口欺骗
nmap --source-port 902 192.168.1.104
6. 指定发包长度
nmap --data-length 30 192.168.1.104
7. 目标主机随机排序
nmap --randomize-hosts 192.168.1.104
8. MAX地址欺骗
nmap -sT -Pn --spoof-mac 0 192.168.1.104
六、信息收集
1. IP信息收集
nmap --script ip-geolocation-* www.pcos.cn
2. WHOIS 查询
nmap --script whois-domain www.pcos.cn
nmap --script whois-domain --script-args whois.whodb=nofollow www.ithome.com
nmap -sn --script whois-domain -v -iL host.txt
3. 搜索邮件信息(新版可能没有这个模块)
nmap --script http-email-harvest www.pcos.cn
4. IP反查
nmap -sn --script hostmap-ip2hosts www.pcos.cn
5. DNS信息收集
nmap --script dns-brute www.pcos.cn
nmap --script dns-brute dns-brute.threads=10 www.pcos.cn
nmap --script dns-brute dns-brute.threads=10,dns-brute.hostlis www.pcos.cn
6. 检索系统信息
nmap -p 445 445 192.168.1.104 --script membase-http-info
7. 后台打印机服务漏洞
nmap --script smb-security-mode.nse -p 445 119.29.155.45
8. 系统漏洞扫描
nmap --script smb-check-vulns.nse -p 445 119.29.155.45
9.扫描Web漏洞
nmap -p80 --script http-stored-xss.nse/http-sql-injection.nse 119.29.155.45
10. 通过 Snmp 列举 Windows 服务/账户
nmap -sU -p 161 --script=snmp-win32-services 192.168.1.104
nmap -sU -f -p 161 --script=snmp-win32-users 192.168.1.110
11. 枚举 DNS 服务器的主机名
nmap --script dns-brute --script-args dns-brute.domain=baidu.com
12. HTTP信息收集
nmap -sV -p 80 www.0day.com (HTTP版本探测)
nmap -p 80 --script=http-headers www.pcos.cn (HTTP信息头探测)
nmap -p 80 --script=http-sitemap-generator www.pcos.cn (爬行Web目录结构)
13. 枚举SSL密钥
nmap -p 443 --script=ssl-enum-ciphers www.baidu.com
14. SSH服务密钥信息探测
map -p 22 --script ssh-hostkey --script-args ssh_hostkey=full 127.0.0.1
七、数据库渗透测试
1. Mysql列举数据库
nmap -p3306 --script=mysql-databases --script-args mysqluser=root,mysqlpass 192.168.1.101
2. 列举 MySQL 变量
nmap -p3306 --script=mysql-variables 192.168.1.3
nmap -sV --script=mysql-variables 192.168.1.3 (无法确定端口的情况下)
3. 检查 MySQL 密码
nmap -p3306 --script=mysql-empty-password 192.168.1.3
nmap -sV -F -T4 --script=mysql-empty-password 192.168.1.3
4. 审计 MySQL 密码
nmap --script=mysql-brute 192.168.1.101
nmap -p3306 --script=mysql-brute userdb=/root/passdb.txt passdb=/root/pass.txt 192.168.1.101 (指定字典)
5. 审计 MySQL 安全配置
nmap -p3306 --script mysql-audit --script-args "mysql-audit.username='root',mysql-audit.password='123',mysql-audit.filename='nselib/data/mysql-cis.audit'" 192.168.1.104
6. 审计 Oracle 密码
nmap --script=oracle-brute -p 1521 --script-args oracle-brute.sid=test 192.168.1.121
nmap --script=oracle-brute -p 1521 --script-args oracle-brute.sid=test --script-args userdb=/tmp/usernames.txt,passdb=/tmp/password.txt 192.168.1.105
7. 审计 msSQL密码
nmap -p 1433 --script ms-sql-brute --script-args userdb=name.txt,passdb=pass.txt 192.168.1.104
8. 检查 msSQL空密码
nmap -p 1433 --script ms-sql-empty-password 192.168.1.104
9. 读取 msSQL 数据
nmap -p 1433 --script ms-sql-tables --script-args mssql.username=sa,mssql.Password=sa 192.168.1.101
10. 读取 msSQL 执行系统命令
nmap -p 1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd="ipconfig" 192.168.1.101
11. 审计 PgSQL 密码
nmap -p 5432 --script pgsql-brute 192.168.1.101
八、渗透测试
1. 审计 HTTP 身份验证
nmap --script=http-brute -p 80 www.pcos.cn
2. 审计 FTP 服务器
nmap --script ftp-brute -p 21 192.168.1.101
nmap --script ftp-brute --script-args userdb=user.txt,passdb=pass.txt -p 21 192.168.1.101
nmap --script=ftp-anon 192.168.1.101
3. 审计 WordPress 程序
nmap -p80 --script http-wordpress-brute 192.168.1.110
nmap -p80 --script http-wordpress-brute --script-args userdb=user.txt,passdb=passwd.txt 192.168.1.110
nmap -p80 --script http-wordpress-brute --script-args http-wordpress-brute.threads=10 192.168.1.110
4. 审计 Joomla 程序
nmap -p80 --script http-joomla-brute 192.168.1.110
nmap -p80 --script http-joomla-brute --script-args uesrdb=user.txt,passdb=passwd.txt 192.168.1.110
nmap -p80 --script http-joomla-brute --script-args uesrdb=user.txt,passdb=passwd.txt,http-joomla-brute.threads=5 192.168.1.110
5. 审计 邮件服务器
nmap -p110 --script=pop3-brute 192.168.1.110
6. 审计 SMB 口令
nmap --script smb-brute.nse -p 445 192.168.1.110
nmap --script smb-brute.nse --script-args passdb=pass.txt -p 445 192.168.1.110
7. 审计 VNC 服务
nmap --script vnc-brute -p 5900 192.168.1.110
8. 审计 SMTP 服务器
nmap -p 25 --script smtp-brute 192.168.1.110
nmap -p 25 --script=smtp-enum-users.nse smith.jack.com (枚举远程系统所有用户)
9. 检测 Stuxnet 蠕虫
nmap --script stuxnet-detect -p 445 192.168.1.110
10. SNMP 服务安全审计
nmap -sU -p 161 --script=snmp-netstat 192.168.1.101 (获取目标主机网络连接状态)
nmap -sU -p 161 --script=snmp-processes 192.168.1.110 (枚举目标主机的系统进程)
nmap -sU -p 161 --script=snmp-win32-services 192.168.1.110 (获得windows服务器的服务)
nmap -sU -p 161 --script snmp-brute 192.168.1.110
九、Zenmap
1. Intense scan (详细扫描)
nmap -T4 -A -v 192.168.1.101
2. Intense scan plus UDP (UDP扫描经典使用)
nmap -sS -sU -T4 -A -v 192.168.1.101
3. Intense scan, all TCP ports (TCP扫描)
nmap -p 1-65535 -T4 -A -v 192.168.1.101
4. Intense scan, no ping (无Ping扫描)
nmap -T4 -A -v -Pn 192.168.1.101
5. Ping scan (Ping扫描)
nmap -sn 192.168.1.101/24
6. Quick scan
nmap -T4 -F 192.168.1.101/24
7. Quick scan plus
nmap -sV -T4 -O -F --version-light 192.168.1.101/24
8. Quick traceroute
nmap -sn --traceroute 192.168.1.101
9. Regular scan
nmap 192.168.1.101
10. Slow comprehensive scan
nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 --script "default or (discovery and safe)" 192.168.1.101
十. Nmap 技巧
1. 发送以太网数据包
nmap --send-eth 192.168.1.111
2. 网络层发送
nmap --send-ip 192.168.1.111
3. 假定拥有所有权
nmap --privileged 192.168.1.111
4. 在交互模式中启动
nmap --interactive
5. 查看 Nmap 版本号
nmap -V
6. 设置调试级别
nmap -d (1-9) 192.168.1.111
7. 跟踪发送接收的报文
nmap --packet-trace -p 20-30 192.168.1.111
8. 列举接口和路由
nmap --iflist www.iteye.com
9. 指定网络接口
nmap -e eth0 192.168.1.111
10. 继续中断扫描
nmap -oG 1.txt -v 192.168.126.1/24
nmap --resume 1.txt (继续扫描)
11. Dnmap
dnmap_server -f test (指定命令脚本)
dnmap_client -s 192.168.1.107 -a test
12. 编写 Nse 脚本
(1) -- The scanning module --
author = "Wing"
categories = {"version"}
portrule = function(host,port)
return port.protocol == "tcp" and port.number == 80 and port.state == "open"
end
action = function(host,port)
return "Found!!!"
end
(2) -- The scanning module --
author = "Wing"
categories = {"version"}
local comm=require "comm"
require "shortport"
local http=require "http"
portrule = function(host,port)
return (port.number == 80) and (port.start=="open")
end
action = function(host,port)
local uri = "/admin.php"
local response = http.get(host,port,uri)
return "Found!!!"
end
13. 探测防火墙
nmap --script=firewalk --traceroute 192.168.1.111
14. VMware认证破解
nmap -p 902 --script vmauthd-brute 192.168.1.107
十一. Nmap的保存和输出
1. 标准保存
nmap -F -oN d:/test1.txt 192.168.1.111
2. XML保存
nmap -F -oX d:/test1.xml 192.168.1.111
3. 133t 保存
nmap -F -oS d:/test2.txt 192.168.1.111
4. Grep 保存
nmap -F -oG d:/test2.txt 192.168.1.111
5. 保存到所有格式
nmap -F -oA d:/test2 192.168.1.111
6. 补充保存文件
nmap -F -append-output -oN d:/test2.txt 192.168.1.111
7. 转换 XML 保存
nmap -F -oX testB.xml --stylesheet http://www.insecure.org/nmap/data/nmap.xsl 192.168.1.111
8. 忽略 XML 声明的 XSL 样式表
nmap -oX d:/testC.xml --no-stylesheet 192.168.1.111
Nmap报告结果美化
1、使用nmap 扫描主机并导出结果
nmap -sC -A -T4 -p1-65535 192.168.0.114 -oA attack-ports
2、使用 xsltproc 美化 nmap 报告结果,(xsltproc工具kali自带) 命令如下:
xsltproc -o attack.html mode.xsl attack-ports.xml
mode.xsl 是报告的模板
attack.html 是美化后的报告结果
attack-ports.xml 这是 nmap 保存的结果
3、使用 xsltproc 工具进行美化
mode.xsl 模板
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes" doctype-system="about:legacy-compat"/>
<xsl:template match="/">
<html lang="en">
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap.min.css"/>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script>
<style>
.target:before {
content: "";
display: block;
height: 50px;
margin: -20px 0 0;
}
@media only screen and (min-width:1900px) {
.container {
width: 1800px;
}
}
.footer {
margin-top:60px;
padding-top:60px;
width: 100%;
height: 180px;
background-color: #f5f5f5;
}
.navbar-right {
float: right!important;
margin-right: -15px;
}
</style>
<title>Nmap Scanner 扫描报告</title>
</head>
<body>
<!--导航栏-->
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#"><span class="glyphicon glyphicon-home"></span></a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#summary">概要信息</a></li>
<li><a href="#scannedhosts">主机信息</a></li>
<li><a href="#onlinehosts">在线主机</a></li>
<li><a href="#openservices">服务信息</a></li>
</ul>
</div>
</div>
</nav>
<!--内容区-->
<div class="container">
<h2 id="summary" class="target">扫描概要</h2>
<div class="target">
<p >Nmap 版本:<xsl:value-of select="/nmaprun/@version"/></p>
<p >Nmap命令:<xsl:value-of select="/nmaprun/@args"/></p>
<p >开始时间:<xsl:value-of select="/nmaprun/@startstr"/> </p>
<p >结束时间:<xsl:value-of select="/nmaprun/runstats/finished/@timestr"/></p>
</div>
<h2 id="scannedhosts" class="target">主机信息<xsl:if test="/nmaprun/runstats/hosts/@down > 1024"><small> (offline hosts are hidden)</small></xsl:if></h2>
<div class="table-responsive">
<table id="table-overview" class="table table-striped dataTable" role="grid">
<thead>
<tr>
<th>状态</th>
<th>IP</th>
<th>主机名</th>
<th>开放TCP端口数</th>
<th>开放UDP端口数</th>
</tr>
</thead>
<tbody>
<xsl:choose>
<xsl:when test="/nmaprun/runstats/hosts/@down > 1024">
<xsl:for-each select="/nmaprun/host[status/@state='up']">
<tr>
<td><span class="label label-danger"><xsl:if test="status/@state='up'"><xsl:attribute name="class">label label-success</xsl:attribute></xsl:if><xsl:value-of select="status/@state"/></span></td>
<td><xsl:value-of select="address/@addr"/></td>
<td><xsl:value-of select="hostnames/hostname/@name"/></td>
<td><xsl:value-of select="count(ports/port[state/@state='open' and @protocol='tcp'])"/></td>
<td><xsl:value-of select="count(ports/port[state/@state='open' and @protocol='udp'])"/></td>
</tr>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="/nmaprun/host">
<tr>
<td><span class="label label-danger"><xsl:if test="status/@state='up'"><xsl:attribute name="class">label label-success</xsl:attribute></xsl:if><xsl:value-of select="status/@state"/></span></td>
<td><xsl:value-of select="address/@addr"/></td>
<td><xsl:value-of select="hostnames/hostname/@name"/></td>
<td><xsl:value-of select="count(ports/port[state/@state='open' and @protocol='tcp'])"/></td>
<td><xsl:value-of select="count(ports/port[state/@state='open' and @protocol='udp'])"/></td>
</tr>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</tbody>
</table>
</div>
<script>
$(document).ready(function() {
$('#table-overview').DataTable({
language: {
"sProcessing": "处理中...",
"sLengthMenu": "显示 _MENU_ 项结果",
"sZeroRecords": "没有匹配结果",
"sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
}
});
});
</script>
<h2 id="onlinehosts" class="target">在线主机</h2>
<xsl:for-each select="/nmaprun/host[status/@state='up']">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><xsl:value-of select="address/@addr"/><xsl:if test="count(hostnames/hostname) > 0"> - <xsl:value-of select="hostnames/hostname/@name"/></xsl:if></h3>
</div>
<div class="panel-body">
<xsl:if test="count(hostnames/hostname) > 0">
<h4>Hostnames</h4>
<ul>
<xsl:for-each select="hostnames/hostname">
<li><xsl:value-of select="@name"/> (<xsl:value-of select="@type"/>)</li>
</xsl:for-each>
</ul>
</xsl:if>
<h4>端口信息</h4>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th>端口</th>
<th>协议</th>
<th>状态</th>
<th>探测手段</th>
<th>服务</th>
<th>组件</th>
<th>版本</th>
<th>附件信息</th>
<th>CPE 信息</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="ports/port">
<xsl:choose>
<xsl:when test="state/@state = 'open'">
<tr class="success">
<td title="Port"><xsl:value-of select="@portid"/></td>
<td title="Protocol"><xsl:value-of select="@protocol"/></td>
<td title="State"><xsl:value-of select="state/@state"/></td>
<td title="Reason"><xsl:value-of select="state/@reason"/></td>
<td title="Service"><xsl:value-of select="service/@name"/></td>
<td title="Product"><xsl:value-of select="service/@product"/></td>
<td title="Version"><xsl:value-of select="service/@version"/></td>
<td title="Extra Info"><xsl:value-of select="service/@extrainfo"/></td>
<td title="CPE Info"><xsl:value-of select="service/cpe"/></td>
</tr>
<xsl:for-each select="script">
<tr class="script">
<td></td>
<td><xsl:value-of select="@id"/> <xsl:text> </xsl:text></td>
<td colspan="7">
<pre><xsl:value-of select="@output"/> <xsl:text> </xsl:text></pre>
</td>
</tr>
</xsl:for-each>
</xsl:when>
<xsl:when test="state/@state = 'filtered'">
<tr class="warning">
<td><xsl:value-of select="@portid"/></td>
<td><xsl:value-of select="@protocol"/></td>
<td><xsl:value-of select="state/@state"/><br/><xsl:value-of select="state/@reason"/></td>
<td><xsl:value-of select="service/@name"/></td>
<td><xsl:value-of select="service/@product"/></td>
<td><xsl:value-of select="service/@version"/></td>
<td><xsl:value-of select="service/@extrainfo"/></td>
<td><xsl:value-of select="service/cpe"/></td>
</tr>
</xsl:when>
<xsl:when test="state/@state = 'closed'">
<tr class="active">
<td><xsl:value-of select="@portid"/></td>
<td><xsl:value-of select="@protocol"/></td>
<td><xsl:value-of select="state/@state"/><br/><xsl:value-of select="state/@reason"/></td>
<td><xsl:value-of select="service/@name"/></td>
<td><xsl:value-of select="service/@product"/></td>
<td><xsl:value-of select="service/@version"/></td>
<td><xsl:value-of select="service/@extrainfo"/></td>
<td><xsl:value-of select="service/cpe"/></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr class="info">
<td><xsl:value-of select="@portid"/></td>
<td><xsl:value-of select="@protocol"/></td>
<td><xsl:value-of select="state/@state"/><br/><xsl:value-of select="state/@reason"/></td>
<td><xsl:value-of select="service/@name"/></td>
<td><xsl:value-of select="service/@product"/></td>
<td><xsl:value-of select="service/@version"/></td>
<td><xsl:value-of select="service/@extrainfo"/></td>
<td><xsl:value-of select="service/cpe"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</tbody>
</table>
</div>
<xsl:if test="count(hostscript/script) > 0">
<h4>主机 脚本</h4>
</xsl:if>
<xsl:for-each select="hostscript/script">
<h5><xsl:value-of select="@id"/></h5>
<pre style="white-space:pre-wrap; word-wrap:break-word;"><xsl:value-of select="@output"/></pre>
</xsl:for-each>
</div>
</div>
</xsl:for-each>
<h2 id="openservices" class="target">服务信息</h2>
<div class="table-responsive">
<table id="table-services" class="table table-striped dataTable" role="grid">
<thead>
<tr>
<th>IP</th>
<th>端口</th>
<th>协议</th>
<th>服务</th>
<th>组件</th>
<th>版本</th>
<th>CPE</th>
<th>附加信息</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="/nmaprun/host">
<xsl:for-each select="ports/port[state/@state='open']">
<tr>
<td><xsl:value-of select="../../address/@addr"/><xsl:if test="count(../../hostnames/hostname) > 0"> - <xsl:value-of select="../../hostnames/hostname/@name"/></xsl:if></td>
<td><xsl:value-of select="@portid"/></td>
<td><xsl:value-of select="@protocol"/></td>
<td><xsl:value-of select="service/@name"/></td>
<td><xsl:value-of select="service/@product"/></td>
<td><xsl:value-of select="service/@version"/></td>
<td><xsl:value-of select="service/cpe"/></td>
<td><xsl:value-of select="service/@extrainfo"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</tbody>
</table>
</div>
<script>
$(document).ready(function() {
$('#table-services').DataTable({
language: {
"sProcessing": "处理中...",
"sLengthMenu": "显示 _MENU_ 项结果",
"sZeroRecords": "没有匹配结果",
"sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
}
});
});
</script>
</div>
<!-- 页脚 -->
<footer class="footer" style="height: 50px; margin-top: 20px; padding-top: 20px;">
<div class="container">
<p class="text-muted">
This Report Was Generated By <a href='https://www.cnblogs.com/lyshark'>LyShark</a>.<br/>
</p>
</div>
</footer>
</body>
</html>
</xsl:template>
</xsl:stylesheet>