渗透测试利器--nmap

介绍

Nmap Free Security Scanner, Port Scanner, & Network Exploration Tool. Download open source software for Linux, Windows, UNIX, FreeBSD, etc.

本文主要用以总结nmap使用技巧与探测方法

主要参数以及扫描方式:

1 Tcp SYN Scan (sS) 这是一个基本的扫描方式,它被称为半开放扫描。Nmap发送SYN包到远程主机,它不会产生任何会话.不需要通过完整的握手,就能获得远程主机的信息。因此不会在目标主机上产生任何日志记录。
Nmap命令中没有指出扫描类型,默认的就是Tcp SYN.需要root/administrator权限.
nmap -sS 192.168.1.0/24
进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段 的255台主机。

1
2
3
4
5
6
7
8
nmap -sS 192.168.1.0/24
You requested a scan type which requires root privileges.
QUITTING!

~ ⍉
▶ sudo nmap -sS 192.168.1.0/24
Password:
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-14 20:49 CST

2 Tcp connect() scan(sT)如果不选择SYN扫描,TCP connect()扫描就是默认的扫描模式.
不同于Tcp SYN扫描,Tcp connect()扫描需要完成三次握手,并且要求底层的操作系统通过发出连接系统调用来建立与目标机和端口的连接。
nmap -sT 192.168.1.0/24

3 Udp scan(sU) UDP扫描发送UDP数据包到目标主机,并等待响应,如果返回ICMP不可达的错误消息,说明端口是关闭的,如果得到正确的适当的回应,说明端口是开放的.
UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口:
nmap -sU 192.168.1.0/24
使用UDP ping探测主机:
nmap -PU 192.168.1.0/24

4 FINscan(sF)有时候TcpSYN扫描不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。
发送一个设置了FIN标志的数据包并不需要完成TCP的握手.FIN扫描也不会在目标主机上创建日志

5 PING扫描不同于其它的扫描方式,因为它只用于找出主机是否是存在在网络中的.它不是用来发现是否开放端口的.PING扫描需要ROOT权限,如果用户没有ROOT权限,PING扫描将会使用connect()调用.
nmap -PN 192.168.1.0/24 (不进行ping,突破防火墙)
-PA TCP Ack Ping 扫描。
-PY 包含一个最小的INIT块的SCTP包 找到使用流控制传输协议(SCTP)主机。
-PE 将对指定主机执行ICMP(互联网控制消息协议)回显Ping
-PP 执行一次ICMP时间戳ping。
-PM 进行ICMP 地址掩码 ping.
-PO 执行IP协议Ping扫描
-PR 选项指示的Nmap对指定目标执行ARP(地址解析协议)ping操作
-PN 不进行ping主机
-PS TCP SYN Ping 扫描

6 Idlescan(sL)Idlescan是一种先进的扫描技术,它不是用你真实的主机Ip发送数据包,而是使用另外一个目标网络的主机发送数据包
仅列出指定网络上的每台主机,不发送任何报文到目标主机:
nmap -sL 192.168.1.0/24

7 版本检测(sV)版本检测是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术,它不是用来扫描目标主机上开放的端口,不过它需要从开放的端口获取信息来判断软件的版本.
使用版本检测扫描之前需要先用TCPSYN扫描开放了哪些端口.

8 Nmap的OS检测(O)(“-osscan-guess”)Nmap最重要的特点之一是能够远程检测操作系统和软件,Nmap的OS检测技术在渗透测试中用来了解远程主机的操作系统和软件是非常有用的,通过获取的信息你可以知道已知的漏洞。Nmap有一个名为的nmap-OS-DB数据库,该数据库包含超过2600操作系统的信息。Nmap把TCP和UDP数据包发送到目标机器上,然后检查结果和数据库对照。Nmap的操作系统指纹识别技术:设备类型(路由器,工作组等)运行(运行的操作系统)操作系统的详细信息(操作系统的名称和版本)网络距离(目标和攻击者之间的距离跳)如果远程主机有防火墙,IDS和IPS系统,你可以使用-PN命令来确保不ping远程主机,因为有时候防火墙会组织掉ping请求.-PN命令告诉Nmap不用ping远程主机。
nmap -O -PN X.X.X.X

9 SCTP INIT扫描
SCTP(Stream Control Transmission Protocol,流控制传输协议)是IETF(Internet Engineering Task Force,因特网工程任务组)在2000年定义的一个传输层(Transport Layer)协议。SCTP可以看作是TCP协议的改进,它改进了TCP的一些不足,SCTP INIT Ping扫描通过向目标发送INIT包,根据目标主机的相应判断目标主机是否存活。
nmap -PY -v 192.168.1.1

其他参数:
-sX: XmasTree scan 设置FIN,PSH,URG和标志。
-sN: Null 扫描模式,不设置任何位(TCP标志标头是0)。
用于逃脱一些防火墙和包过滤软件能够对发送到被限制端口的SYN数据包进行的监视
-sF: FIN扫描 设置只是TCP FIN位。
–sA: TCP ACK 扫描 没有判断端口的开放情况。它是用来绘制出防火墙规则,对哪些端口进行了保护。
-S ip: 伪装源ip进行扫描,需要使用使用–e指定网卡并且使用-Pn参数
-scanflag 自定义扫描类型 通过指定任意TCP标志来设计自己的扫描
nmap -e 目标网卡 目标ip -S 伪装ip -Pn
nmap -iflist:查看本地路由与接口
-b 使用FTP bounce scan扫描方式

nmap常用扫描方式:
ping扫描(-sP)
nmap -sP target ping 扫描,检测存活性。

1
2
3
4
5
6
7
8
9
10
11
12
13
▶ nmap -sP 192.168.1.0/24
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-14 20:44 CST
Nmap scan report for 192.168.1.1
Host is up (0.024s latency).
Nmap scan report for 192.168.1.100
Host is up (0.029s latency).
Nmap scan report for 192.168.1.103
Host is up (0.010s latency).
Nmap scan report for 192.168.1.112
Host is up (0.0018s latency).
Nmap scan report for 192.168.1.119
Host is up (0.041s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 9.53 seconds

同时可以使用CIDR表示整个子网,可以使用-exclude 排除单个ip
扫描txt文件内的主机:
nmap -iL txt 需要txt与nmap在同一个目录下

  • traceroute 可被用于跟踪的网络路径指定的主机
    -r 指示的Nmap始终执行对目标IP地址的反向DNS解析。-r在对一个IP段进行侦查时非常有用,Nmap将尝试查询每个ip地址的反向DNS信息
    -n 用于禁用反向DNS解析
    -system-dns 指示NMAP使用主机系统自带的DNS解析器,而不是其自身内部的方法
    -dns-servers 用于扫描时手动指定DNS服务器进行查询。
    使用znmap可方便记住命令。
    nmap -A 192.168.1.19 (执行路由跟踪等)
    另外,nmap官方文档中的例子:
    nmap -v ip/domain
    这个选项扫描主机scanme中所有的保留TCP端口。选项-v启用细节模式。
    nmap -sS -O ip/24
    确定目标机支持哪些IP协议 (TCP,ICMP,IGMP等):
    nmap -sO 192.168.1.19

nmap脚本使用:

1、增加脚本:
首先可以将写好或者收集好的脚本置于$ Nmap_DATA/nselib/data/文件夹中然后执行Nmap -script-updatedb命令更新数据库即可使用脚本
2、本地脚本分类与说明:
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
3、脚本编写:

经验与bypass技巧:

一般ids不会记录sS扫描方式,但是默认的sT一般会被察觉。
使用nmap -f host

其他:

1、NMAP时间设置:
Nmap -T [0-5]目标
0:最缓慢的<bypass waf or ids> ------> 4/5:加速扫描、最快速度扫描
2、扫描的并发设置以及主机分组设置:

1
2
3
4
Nmap  -min-parallelism [数量] [目标]    并发端口扫描的最小数量
Nmap -max-parallelism [数量] [目标] 最大数量
Nmap -max-hostgroup [数目] [目标] 并发扫描主机数的最大值
Nmap -min-hostgroup [数目] [目标] 并发扫描主机数的最小值

3、RTT超时设置
Nmap -initial-rtt-timeout [时间] [目标] 控制网络响应初始超时
Nmap -max-rtt-timeout [时间] [目标] 指定最大RTT数据包响应超时,对于扫描大块地址可适当提高以防止nmap断开
4、TTL设置
Nmap -ttl [时间] [目标]: TTL用于指定扫描中的TTL值
5、其他:

1
2
3
4
5
6
7
Nmap -max-retries [数目] [目标]: 每个探针的最大重传次数
Nmap -scan-delay [时间] [目标]: 指定扫描延迟指示的Nmap在发送探针之间的指定的最小时间间隔是多久
Nmap -host-timeout [时间] [目标]:指定Nmap在超时多少时间后放弃对主机的扫描
Nmap -max-scan-delay [时间] [目标]:Nmap在发送探针之间的指定的最大时间间隔是多久。
Nmap -min-rate [数量] [目标]:Nmap每秒钟发送的数据包数量最小是多少。
Nmap -max-rate [数量] [目标]:Nmap每秒钟发送的数据包数量最大是多少
Nmap -defeat-rst-ratelimit [目标]:在目标通过发送RST包来限制扫描速率的情况下非常有用,它可以加快扫描速度,然而会影响结果的准确度。

未完待续

参考

官方书籍: https://nmap.org/book/intro.html
Nmap备忘单:https://www.freebuf.com/sectool/101335.html
脚本开发:http://www.freebuf.com/sectool/177300.html

-------------本文结束感谢您的阅读-------------