0x00前言
nmap是一款开源的网络探测和安全审核工具,它的功能非常强大,可以扫描单个主机或者一个网络,从而发现存活的主机、主机上的端口开放情况、端口运行的服务以及操作系统版本等信息。但相对来说,要记忆使用的参数也是较多的~
0x01常用参数详解(注意区分大小写)
一、目标指定
-iL 指定一个文本文件,这个文件每一行应写一个IP地址或者一个网络
//ip.txt
192.168.1.1
192.168.2.0/24
nmap -iL ip.txt
-iR 指定主机数量,随机扫描相应数量的主机
nmap -iR 5 192.168.1.0/24
–exclude 指定一个或多个IP,不扫描这些IP
nmap 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.2,192.168.1.3
–excludefile 指定一个文本文件,不扫描文件里的IP
//exclude-ip.txt
192.168.1.1
192.168.1.2
nmap 192.168.1.0/24 --excludefile exclude-ip.txt
二、主机发现
-sL 简单列出扫描的目标
nmap -sL 192.168.1.0/24 //会把扫描的IP一个一个列出来
-sP/-sn 做ping扫描,网上说-sn参数在目标禁止回显ICMP的情况下也能扫描到,我用nmap 7.80版本实测,两个参数在目标禁ping情况下都能扫到,可能升级了吧吼吼~
nmap -sP/-sn 192.168.1.0/24
-Pn/-P0 对于在线的主机,不要再次进行主机发现扫描,直接扫描其他信息
nmap -Pn/-P0 192.168.1.1
-PS/-PA/-PU/-PY 分别是SYN扫描、ACK扫描、UDP扫描、SCTP扫描(这是传输层的一种协议,有意思的是,建立连接4次握手,断开需要3次握手,有兴趣可以了解一下~),也可指定端口
nmap -PS/-PA/-PU/-PY 192.168.1.1
-PE/-PP/-PM 分别是ICMP回显、时间戳、网络掩码发现扫描
nmap -PE/-PP/-PM 192.168.1.1
-n/-R 永不对IP地址进行反向域名解析/永远对IP地址进行反向域名解析
nmap -n/-R 192.168.1.1
–dns-servers 指定dns服务器
nmap -R 192.168.1.1 --dns-servers 114.114.114.114,8.8.8.8
–system-dns 使用系统的dns
nmap -R 192.168.1.1 --system-dns
三、端口扫描技术
在端口扫描之前,我们先看一个关于端口状态的信息~
端口状态 | 描述 |
---|---|
open | 目标机器上的应用程序已监听此端口 |
closed | 端口未开放 |
filtered | 端口被防火墙等设备过滤,报文无法到达目标端口 |
unfiltered | 端口能被访问,但无法判断是open还是closed |
open/filtered | 无法判断端口是open或是filtered |
closed/filtered | 无法判断端口是closed或是filtered |
-sS/-sT/-sA/-sW/-sM 分别是SYN扫描,只发送SYN包;TCP全连接扫描,建立三次握手;ACK扫描,只发送ACK包;TCP窗口扫描,发送ACK包,判断窗口值;FIN/ACK扫描
nmap -sS/-sT/-sA/-sW/-sM 192.168.1.1
-sU UDP扫描
nmap -sU 192.168.1.1
-sN/-sF/-sX 分别是NULL扫描,不设置任何标志位,即tcp头为0;FIN扫描,只设置tcp FIN标志位;Xmas扫描,设置FIN、PSH、URG标志位
nmap -sN/-sF/-sX 192.168.1.1
–scanflags 自定应tcp头的标志位
nmap 192.168.1.1 --scanflags SYN
–sI 僵尸扫描,最为隐蔽,攻击机和目标机不进行交互
nmap 1.1.1.1 -sI 2.2.2.2:4444 //不指定端口默认为80
-b FTP弹跳扫描,可以通过连接发布的FTP服务当作跳板扫描内网,经常用来躲避防火墙
nmap 192.168.1.0/24 -b <username>:<password>@<server>:<port>
ps: 如果在没有nmap的Windows主机上怎么做一些端口扫描的简单的测试呢?可以使用telnet工具,example:telnet 192.168.1.1 80,如果对方端口没开放则提示连接失败,如果开放将跳到一个空的黑窗口~~
四、端口指定
-p 指定要扫描的端口,一般形式有以下几种:
-p 21,53,80,443,1433,1521,3306
-p 1-1024
-p U:53,111,137 T:21-25,80,8080 //当即扫描udp端口又扫描tcp端口可以这么指定
nmap -sU 192.168.1.1 -p U:53,111,137 T:21-25,80,8080 //既扫描 UDP又扫描TCP,必须指定 -sU ,以及至少一个TCP扫描类型
ps:不指定-p选项,默认扫描1-65535端口,但nmap默认跳过9100TCP端口,因为此端口为默认打印机服务端口,为避免有一些打印机直接将nmap请求打印出来~
-F 快速扫描
-r 不要按随即顺序扫描端口,nmap出于效率的考虑,会把常用的端口先扫描
五、服务版本探测
-sV 探测开放端口运行的服务以及版本
nmap -sV 192.168.1.1
ps:-A参数可以同时识别服务版本和操作系统版本
六、操作系统识别
-O 进行操作系统的识别
nmap -O 192.168.1.1
ps:-A参数可以同时识别服务版本和操作系统版本
七、绕过防火墙/IDS
-f 报文分段发送,通过修改IP包头的分段标志位实现
–mtu 指定mtu的大小,mtu:最大传输单元,在网络层封装完毕后,整个数据包的大小,默认为1500,超过1500对端可能不会接收~
-S 指定IP地址,源地址欺骗
-e 指定接口,如eth0
–source-port 指定源端口,源端口欺骗
–spoof-mac 指定MAC地址,MAC地址欺骗
–ttl 指定ttl值,自定义ttl值
八、常用脚本使用
nmap扫描指定脚本一般用 --script 参数~
http-enum 脚本可以扫描端口信息的同时对web站点进行针对性收集,例如cms和目录文件的爆破等
nmap test.com --script http-enum
http-auth-finder 指定该脚本可以在web站点上尝试寻找登录认证页面
nmap test.com -p 80 --script http-auth-finder
nmap的强大之处还在于能对一些服务进行爆破~
mysql爆破
nmap --script=mysql-brute 192.168.1.1 //使用默认字典
SMTP爆破
nmap -p25 --script smtp-brute 192.168.1.1
SMB爆破
nmap -p445 --script smb-brute.nse –script-args userdb=./user.txt,passdb=./pass.txt 192.168.1.1 //指定用户名和密码字典
FTP爆破
nmap -p21 --script ftp-brute.nse --script-args userdb=./user.txt,passdb=./pass.txt 192.168.1.1
还可以对一些常规漏洞进行扫描
nmap --script=smb-vuln-ms06-025 192.168.1.1 //扫描是否存在ms06-025这个漏洞
nmap --script=vuln 192.168.1.1 //扫描所有开放的端口上的服务有没有漏洞,也可指定端口
ls /usr/share/nmap/scripts/ //可以查看脚本,更多脚本自己发发掘~
九、扫描结果输出
-oN 标准输出,写入指定文件,格式和终端显示一致
nmap -A 192.168.1.1 -oN scan.txt
-oX XML格式输出,便于处理文档
nmap -A 192.168.1.1 -oX scan.xml
-oA 指定一个目录,输出所有格式
nmap -A 192.168.1.1 -oA /root/scan/
0x02结语
以上就是nmap的一些常用命令的使用,以及对命令原理的简单概括,我这里收藏了nmap的中文手册:http://www.nmap.com.cn/doc/manual.shtm#11 ,里面写了非常完整的选项和工作原理,感兴趣可以翻看一下~
谨此记之,以便日后查阅~~
The end~