真Nmap用法大全
四大基本功能
- 主机发现
- 端口扫描
- 版本侦测
- 操作系统侦测
语法
Usage: nmap [Scan Type(s)] [Options] {target specification}
常用选项(options)
扫描选项 | 名称 | 功能 |
---|---|---|
-g | 指定源端口 | 使用特定源端口发送数据包 |
-spoofmac | Mac地址欺骗 | 创建虚拟mac,随机化mac地址 |
-S | 源IP地址 | 伪造IP,或指定源IP |
-e | 选择网口 | 选择发送和接收数据的网口 |
-F | 快速扫描 | Nmap-service文件中默认扫描减到100个端口 |
-p | 确定端口范围 | 选择扫描端口 |
-N | DNS解析 | 执行反响lookup |
-R | 反向lookup | 强制反向lookup |
-A | 激进型 | 启用许多扫描选项,版本扫描,脚本扫描等(慎用) |
-v | 冗余信息 | 表示显示冗余信息,在扫描过程中显示扫描细节,从而让用户了解当前的扫描状态 |
-T<0~5> | 定时 | 可以加快或者减慢扫描速度,有六个级别,级别越高速度越快,也越容易被WAF或者IDS发现。 |
优化时间控制选项
优化时间控制选项的功能很强大也很有效但是有些用户会被迷惑。此外往往选择合适参数的时间超过了所需优化的扫描时间。因此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模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性
1.主机发现
扫描局域网10.10.10.125~10.10.10.133范围内那些IP的主机是活动的
root@czx:~# nmap -sn 10.10.10.125-133
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-01 20:16 CST
Nmap scan report for 10.10.10.129
Host is up (0.00017s latency).
MAC Address: 00:0C:29:31:C1:C9 (VMware)
Nmap scan report for 10.10.10.130
Host is up (0.00026s latency).
MAC Address: 00:0C:29:1E:47:BC (VMware)
Nmap scan report for 10.10.10.128
Host is up.
Nmap done: 9 IP addresses (3 hosts up) scanned in 4.33 seconds
原理:发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。
选项 | 功能 |
---|---|
-sL | List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现 |
-sn | Ping Scan 只进行主机发现,不进行端口扫描 |
-Pn | 将所有指定的主机视作开启的,跳过主机发现过程 |
-PS/PA/PU/PY[portlist] | TCP SYN/ACK, UDP或SCTP发送到给定的端口 |
-PE/PP/PM | ICMP echo、timestamp和netmask请求发现探测 |
-PO[protocol list] | 使用IP协议包探测对方主机是否开启 |
-n/-R | -n表示不进行DNS解析;-R表示总是进行DNS解析 |
–dns-servers<serv1[,serv2],…> | 指定DNS服务器 |
--system-dns | 指定使用系统的DNS服务器 |
--traceroute | 追踪每个路由节点 |
2.端口扫描
服务 | 端口号 |
---|---|
FTP | 21 |
SSH(安全登陆)、SCP(文件传输)、端口重定向 | 22 |
Telnet | 23 |
SMTP | 25 |
HTTP | 80 |
POP3 | 110 |
HTTPS | 443 |
MS SQL*SEVER数据库sever | 1433 |
Oracle数据库 | 1521 |
MySQL数据库sever | 3306 |
win2003远程登陆 | 3389 |
WebLogic | 7001 |
TOMCAT | 8080 |
默认情况下,Nmap会扫描1000个最有可能开放的TCP端口
扫描出端口的六个状态:
- open:端口是开放的
- closed:端口是关闭的
- filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态
- unfiltered:端口没有被屏蔽,但是是否开放需要进一步确定
- open|filtered:端口是开放的或被屏蔽
- closed|filtered:端口是关闭的或被屏蔽
端口扫描技术主要包括以下三大类:
- 开放扫描:会产生大量的审计数据,容易被对方发现,但其可靠性高;例如:TCP Connect类。
- 隐蔽扫描:能有效的避免入侵检测系统和防火墙的检测,但扫描使数据包容易被丢弃从而产生错误的探测信息;例如:TCP FIN类。
- 半开放扫描:隐蔽性和可靠性介于前两者之间。例如:TCP SYN类。
其他扫描选项 | 功能 |
---|---|
-p <port ranges> | 只扫描指定端口eg:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9 |
-F | 扫描比默认扫描更少的端口 |
-r | don’t randomize |
--top-posts <number> | 扫描<number>最常见的端口 |
--post-ratio <ratio> | 扫描比<ratio>更常见的端口 |
eg:
nmap -sS -sU -T4 -top-posts 200 10.10.10.129
- -sS 表示使用TCP SYN方式扫描TCP端口;
- -sU 表示扫描UDP端口;
- T4 表示时间级别配置4级;
- --top-posts 200表示扫描最有可能开放的200个端口(TCP和UDP分别有200个端口)
3.版本侦测
nmap -sV 10.10.10.129
不是进行一个端口扫描,而是通过相应的端口对应相应的服务,根据服务指纹识别出相应的版本
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.2.2
22/tcp open ssh OpenSSH 5.3p1 Debian 3ubuntu4 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.2.14 ((Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.5 with Suhosin-Patch mod_python/3.3.1 Python/2.6.5 mod_perl/2.0.4 Perl/v5.10.1)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp open imap Courier Imapd (released 2008)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
5001/tcp open java-rmi Java RMI
8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
4.操作系统侦测
原理:Nmap有一个名为nmap-OS-DB数据库,该数据库包含超过2600操作系统的信息。Nmap把TCP和UDP数据包发送到目标机器上然后检查结果和数据库对照
常见的操作系统侦测
- 利用TTL(数据包的存活时间)来进行探测
- TCP数据包探测:根据不同OS对特定TCP的不同反应来进行识别区分(不同OS处理ACK序号时是不一样的)
- ICMP报文响应进行识别
选项 | 含义 |
---|---|
-O | 设置nmap进行操作系统侦测 |
--osscan-guess | 猜测目标主机的操作系统类型,nmap会给出可能性的比率,用户可以根据提供的比率综合判断操作系统类型 |
nmap -O --osscan-guess 10.10.10.128-135
漏洞扫描
nmap-vulners的安装
root@czx:/usr/share/nmap/scripts# git clone http://github.com/vulnersCom/nmap-vulners.git
nmap --script nmap-vulners -sV 10.10.10.130
防火墙关闭情况下:
nmap --script smb-vuln-ms17-010 10.10.10.130
实用的脚本
- smb-enum-domains.nse
对域控制器进行扫描,获得主机信息、用户信息、密码、资料 - smb-enum-users.nse
在进行域渗透的时候,有了域内某台主机的权限,但是权限有限,不能获取更多的域用户信息的时候,可以借助这个脚本对域控制器进行扫描 - smb-enum-processes.nse
通过smb对主机的系统进程进行遍历,通过这些信息,可以知道目标主机上运行软件信息,选择合适的漏洞或规避防火墙及杀毒软件 - smb-os-discovery.nse
通过smb协议来收集目标主机的操作系统,计算机名,域名,全程域名,域名系统,NetBIOS机器名,NetBIOS域名,工作组,系统时间。
逃逸FW/IDS
选项 | 功能 |
---|---|
-f | 要求在扫描时(包括ping扫描)使用小的IP包分段,将TCP头分段在几个包中,使得包过滤器、IDS及其它工具的检测更加困难 |
–data-length | 指定发包长度(通常情况下TCP包是40字节,ICMP Echo为28字节) |
-mtu(使用指定的MTU) | 偏移量必须是8的倍数 |
-S<IP_Address> | 源地址欺骗,时的目标认为是另一个地址在进行扫描 |
-sI<IP_Address> | 源地址欺骗 |
–souce-port<port> | 源端口欺骗 |
–spoof-mac | MAC地址欺骗,可使用字符串”0“随机分配一个MAC地址进行欺骗 |
探测防火墙
nmap -sA 10.10.10.129
一个简单的ACK扫描意味着攻击者只有较低几率检测到受害机,但是有较高几率发现防火墙
防火墙的四种响应:
- open port(防火墙允许少数端口打开)
- closed port(由于防火墙的缘故,大部分的端口都被关闭)
- filtered(nmap不能确定端口是否打开或者关闭)
- unfiletered(nmap能够访问这个端口,但是不清楚这个端口打开的状态)
root@czx:/usr/share/nmap/scripts# nmap -sA 10.10.10.129
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-02 16:23 CST
Nmap scan report for 10.10.10.129
Host is up (0.00037s latency).
All 1000 scanned ports on 10.10.10.129 are unfiltered
MAC Address: 00:0C:29:31:C1:C9 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 14.32 seconds
nmap --traceroute -v www.baidu.com
使用路由跟踪功能,查出本地计算机到目标计算机之间经过的网络节点
空闲扫描
? Nmap利用空闲主机欺骗目标主机ip并且隐藏本机真实IP
- Nmap存在一个致命的缺点就是在进行探测过程中会发送大量的数据包,产生大量的流量,这样极其容易引起目标警觉,甚至追踪到渗透测试者的真实IP
- 空闲主机是一台可用作欺骗目标IP地址且具有可预设的IP ID序列号的机器
- nmap -Pn -sI <zombie host><target>(-sI选项调用空闲扫描,-Pn关闭主机发现操作)
空闲扫描工作流程:
- 确定僵尸主机的IP ID序列号
- Nmap将伪造的SYN数据包发送到目标,就好像它是由空闲主机发送的一样
- 如果端口是打开的,则目标发送SYN/ACK数据包并增加其IP ID序列号给空闲主机
- Nmap分析空闲主机的IP ID序列号的增量以及查看是否收到来自目标的SYN/ACK数据包并确定端口状态
Lua语言和NSE脚本
Nmap脚本主要分为以下几类:
选项 | 宫嗯那个 |
---|---|
-sC | 等价于 --script=default,使用默认类别的脚本进行扫描 |
–script=<Lua scripts> | <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述 |
–script-args=<n1=v1[,n2=v2,…]> | 为脚本提供默认参数 |
–script-args-file=filename | 使用文件来为脚本提供参数 |
—script-trace | 显示脚本执行过程中发送与接收的数据 |
–script-updatedb | 更新脚本数据库 |
–script-help=<Lua script> | 显示脚本的帮助信息,其中<Lua 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 --script=auth 10.10.10.129
负责处理鉴权证书(绕开鉴权)的脚本,也可以作为检测部分应用弱口令
nmap --script=brute 10.10.10.129
提供暴力破解的方式,可对数据库,smb,snmp等进行简单密码的暴力破解
nmap --script=vuln 10.10.10.129
检查是否存在常见漏洞
转自 https://blog.csdn.net/qq_43001579/article/details/83591539