Nmap
进阶扫描
T 设置时间模板
nmap -sS -T<0-5> 192.168.1.180
优化时间控制选项的功能很强大也很有效,Nmap提供了一些简单的 方法,使用6个时间模板,使用时采用-T选项及数字(0 - 5) 或名称。模板名称有paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)
paranoid、sneaky模式用于IDS躲避
Polite模式降低了扫描 速度以使用更少的带宽和目标主机资源。
Normal为默认模式,因此-T3 实际上是未做任何优化。
Aggressive模式假设用户具有合适及可靠的网络从而加速 扫描.
nsane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。
网段扫描格式
nmap -sP <network address > </CIDR >
CIDR 为你设置的子网掩码(/24 , /16 ,/8
等)
10.1.1.0/24 = 10.1.1.1-10.1.1.255 #c段扫描
10.1.1.0/16 = 10.1.1.1-10.1.255.255 #b段扫描
10.1.1.0/8 = 10.1.1.1-10.255.255.255 #a段扫描
从文件中读取需要扫描的IP列表
nmap -iL ip.txt
路由跟踪扫描
路由器追踪功能,能够帮网络管理员了解网络通行情况,同时也是网络管理人员很好的辅助工具!通过路由器追踪可以轻松的查处从我们电脑所在地到目标地之间所经常的网络节点,并可以看到通过各个节点所花费的时间
nmap -traceroute www.baidu.com
A OS识别,版本探测,脚本扫描和traceroute综合扫描
此选项设置包含了1-10000的端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测。
nmap -A 192.168.1.180
命令混合式扫描
命令混合扫描,可以做到类似参数-A所完成的功能,但又能细化到我们所需特殊要求。所以一般高手选择这个混合扫描
nmap -vv -p 1-100,3306,3389 -O -traceroute 192.168.1.180
这些参数都是可以灵活调用的,具体根据具体的扫描来使用各个参数。
输出格式
nmap -sV -p 139,445 -oG output.txt 192.168.1.1/24
扫描的结果输出到屏幕,同时会存储一份到output.txt
nmap -sS -sV -T5 192.168.1.180 --webxml -oX - | xsltproc --output file.html
扫描结果输出为html
高级语法(脚本使用)
按照脚本分类进行扫描
nmap官方脚本文档: https://nmap.org/nsedoc/
左侧列出了脚本的分类,点击分类 可以看到每一个分类下有很多具体的脚本供我们使用。
nmap --script=类别这里的类别,可以填写下面14大分类中的其中之一,也可以填写分类里面的具体漏洞扫描脚本。
nmap脚本分类:
代码语言 :ruby
- 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 --script 具体的脚本 www.baidu.com
常见使用案例
扫描服务器的常见漏洞
nmap --script vuln <target>
检查FTP是否开启匿名登陆
nmap --script ftp-anon <target>
对MySQL进行暴破解
nmap --scriptmysql-brute <target>
对MsSQL进行暴破解
nmap -p 1433 --script ms-sql-brute --script-args userdb=customuser.txt,passdb=custompass.txt <host>
对SSH进行暴力破解
nmap -p 22 --script ssh-brute --script-args userdb=users.lst,passdb=pass.lst --script-args ssh-brute.timeout=4s <target>
防火墙/IDS逃逸
nmap -f --mtu=16 192.168.0.8
#报文分段,mtu必须是8的倍数
nmap -sI www.0day.com:80 192.168.0.8
#源IP欺骗
nmap --source-port 53 192.168.0.8
#源端口欺骗
#防火墙对服务器的设置会根据端口选择是否信任数据流
#管理员可能会认为这些端口不会有攻击发生,所以可以利用这些端口扫描
nmap --data-length 30 192.168.0.8
#在原来报文基础上,附加随机数据,达到规避防火墙的效果
nmap --spoof-mac 0 192.168.0.8
#指定一个随机的MAC地址
参数详解
主机发现
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
-sn: Ping Scan 只进行主机发现,不进行端口扫描。
-sP: Ping Scan 只进行主机发现,不进行端口扫描。
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
-PS[portlist]: 使用TCP SYN Ping扫描方式进行发现。
-PA[portlist]: 使用TCP ACK Ping扫描方式进行发现。
-PU[portlist]: 使用TCP UDP Ping扫描方式进行发现。
-PY[portlist]: 使用SCTP INIT Ping扫描方式进行发现。
-PR: ARP Ping Scan
-PE: 使用ICMP echo Ping扫描方式发现主机。
-PP: 使用ICMP timestamp Ping扫描方式发现主机。
-PM: 使用ICMP netmask Ping扫描方式发现主机。
-PO[protocollist]: 使用IP协议包探测对方主机是否开启(非ping扫)。
-n:表示不进行DNS反向解析(使用该选项的时候Nmap永远不对目标ip地址作反向域名解析)
-R:表示总是进行DNS解析(使用该选项的时候Nmap永远对目标ip地址作反向域名解析)。
-6: 扫描IPv6地址
—dns-servers : 指定DNS服务器。
—system-dns: 指定使用系统的DNS服务器
其中,比较常用的使用的是-sn
,表示只单独进行主机发现过程;-Pn
表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项),如果不想使用DNS或reverse DNS解析,那么可以使用-n
选项。
扫描技巧
-sS/sT/sA/sW/sM TCP SYN/TCP connect()/ACK/TCP窗口扫描/TCP Maimon扫描
-sU UDP扫描
-sN/sF/sX TCP Null,FIN,and Xmas扫描
--scanflags 自定义TCP包中的flags
-sI zombie host[:probeport] Idlescan
-sY/sZ SCTP INIT/COOKIE-ECHO 扫描
-sO 使用IP protocol 扫描确定目标机支持的协议类型
-b “FTP relay host” 使用FTP bounce scan
指定端口和扫描顺序
-p 特定的端口 -p80,443 或者 -p1-65535
-p U:PORT 扫描udp的某个端口, -p U:53
-F 快速扫描模式,比默认的扫描端口还少
-r 不随机扫描端口,默认是随机扫描的
--top-ports "number" 扫描开放概率最高的number个端口,出现的概率需要参考nmap-services文件,ubuntu中该文件位于/usr/share/nmap.nmap默认扫前1000个
--port-ratio "ratio" 扫描指定频率以上的端口
服务版本识别
-sV 开放版本探测,可以直接使用-A同时打开操作系统探测和版本探测
--version-intensity "level" 设置版本扫描强度,强度水平说明了应该使用哪些探测报文。数值越高,服务越有可能被正确识别。默认是7
--version-light 打开轻量级模式,为--version-intensity 2的别名
--version-all 尝试所有探测,为--version-intensity 9的别名
--version-trace 显示出详细的版本侦测过程信息
脚本扫描
-sC 根据端口识别的服务,调用默认脚本
--script=”Lua scripts” 调用的脚本名
--script-args=n1=v1,[n2=v2] 调用的脚本传递的参数
--script-args-file=filename 使用文本传递参数
--script-trace 显示所有发送和接收到的数据
--script-updatedb 更新脚本的数据库
--script-help=”Lua script” 显示指定脚本的帮助
OS识别
-O 启用操作系统检测,-A来同时启用操作系统检测和版本检测
--osscan-limit 针对指定的目标进行操作系统检测(至少需确知该主机分别有一个open和closed的端口)
--osscan-guess 推测操作系统检测结果,当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配
防火墙/IDS躲避和哄骗
-f; --mtu value 指定使用分片、指定数据包的MTU.
-D decoy1,decoy2,ME 使用诱饵隐蔽扫描
-S IP-ADDRESS 源地址欺骗
-e interface 使用指定的接口
-g/ --source-port PROTNUM 使用指定源端口
--proxies url1,[url2],... 使用HTTP或者SOCKS4的代理
--data-length NUM 填充随机数据让数据包长度达到NUM
--ip-options OPTIONS 使用指定的IP选项来发送数据包
--ttl VALUE 设置IP time-to-live域
--spoof-mac ADDR/PREFIX/VEBDOR MAC地址伪装
--badsum 使用错误的checksum来发送数据包
Nmap 输出
-oN 将标准输出直接写入指定的文件
-oX 输出xml文件
-oS 将所有的输出都改为大写
-oG 输出便于通过bash或者perl处理的格式,非xml
-oA BASENAME 可将扫描结果以标准格式、XML格式和Grep格式一次性输出
-v 提高输出信息的详细度
-d level 设置debug级别,最高是9
--reason 显示端口处于带确认状态的原因
--open 只输出端口状态为open的端口
--packet-trace 显示所有发送或者接收到的数据包
--iflist 显示路由信息和接口,便于调试
--log-errors 把日志等级为errors/warings的日志输出
--append-output 追加到指定的文件
--resume FILENAME 恢复已停止的扫描
--stylesheet PATH/URL 设置XSL样式表,转换XML输出
--webxml 从namp.org得到XML的样式
--no-sytlesheet 忽略XML声明的XSL样式表
其他nmap选项
-6 开启IPv6
-A OS识别,版本探测,脚本扫描和traceroute
--datedir DIRNAME 说明用户Nmap数据文件位置
--send-eth / --send-ip 使用原以太网帧发送/在原IP层发送
--privileged 假定用户具有全部权限
--unprovoleged 假定用户不具有全部权限,创建原始套接字需要root权限
-V 打印版本信息
-h 输出帮助