Nmap读书笔记
《Nmap渗透测试指南》作者商广明
总体来说,这本书质量一般。
Nmap发现网络上有哪些主机,这些主机提供什么服务(应用程序名和版本),服务运行在什么操作系统,它们使用什么类型的报文过滤器/防火墙,等等。Nmap通常用于安全审核,许多管理员也用它来做一些日常的工作
,比如查看整个网络的信息、管理服务升级计划,以及监视主机和服务的运行。
Nmap的输出。
Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。
Filtered(被过滤的)意味着防火墙,过滤器或者其他网络障碍阻止了该端口被访问,Nmap无法得知它是Open还是Closed。
Closed(关闭的)端口上面没有应用程序监听,但是它们随时可能开放。
在share/nmap/scripts中,己经有多种写好的脚本提供,使用这些脚本可以轻易地发起渗透测试。
全面扫描选项:-A
加上 --packet-trace 可以看到nmap发出的包;再就是 -v 会有一些过程信息打印。
可以看看-A扫描时,nmap如何判定一个IP是不存活的:
默认情况下,Nmap只对在线的主机进行后续的探测,如端口扫描、版本探测或者操作系统探测。
Ping扫描方式,-sP 只进行Ping,然后显示出在线的主机。如同ping命令一样。但很容易被防火墙拦截。
-sn: Ping Scan - disable port scan
用-P0禁止主机发现会使Nmap对目标IP进行扫描,而事先假定它在线,这样可以穿透防火墙。
这个扫描,默认是TCP SYN到1000个端口?有没有UDP协议的扫描呢,需要自己指定端口吗?
In previous versions of Nmap, -Pn was -P0 and -PN.
-Pn: Treat all hosts as online – skip host discovery
-PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
-n/-R: Never do DNS resolution/Always resolve [default: sometimes]
-PS Nmap默认Ping扫描是使用TCP ACK和ICMP Echo请求,当目标主机的防火墙阻止这些请求时,我们可以使用TCP SYN Ping扫描
上面有-PU,下面又有-sU,都是扫UDP,这2者有什么区别呢?在windows下的版本,-PU80并没有给我扫80的UDP端口,很疑惑。
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sU: UDP Scan
SCTP(Stream Control Transmission Protocol,流控制传输协议)是IETF在2000年定义的一个传输层协议。可以看作是TCP协议的改进,SCTP INIT Ping扫描通过向目标发送INIT包,判断目标主机是否存活。
一般扫描顺序,先是主机发现,然后是端口扫描。但是当然是可以用端口扫描的方式来做主机发现。
在Nmap中的端口扫描方式中,所有的扫描选项都是以-s<?>形式出现的。比如,ACK扫描是-sA,UDP扫描是-sU。
Nmap提供的6种端口状态:
Open
Closed
Filtered Nmap的报文被过滤,不能达到目标端口,出现被过滤现象并不代表一定是被过滤了,也许是因为网络堵塞造成的,建议分不同的时间段再次进行扫描。
Unfiltered
端口可以访问,但是不能判断目标端口处于开放状态还是关闭状态。
目标端口是否可以访问与是否开放并无太大的联系,例如,关闭的端口也可以接受Nmap发出去的探测报文。当我们使用ACK扫描时才会呈现出这种状态,这时可以换一种扫描方式去进行扫描。//应该说,报文是协议栈接收的,所以不存在关闭的端口不能接受报文的说法。
以上解释有点乱,应该是,对探测有返回,而返回的报文不符合open和close的特征,所以是unfiltered
Open|Filtered
探测报文并没有得到目标端口的响应,那可能会是受到了某些专业设备的阻挡,但这也不是完全一个被过滤的状态。
//这个简直是简单问题复杂化了,用filtered表示不行吗?
以上解释也是很模糊,越解释越可疑。应该是,有返回,可能是被filtered的open状态。
Closed|Filtered
Nmap不能确定端口是关闭的还是被过滤的。它只可能出现在IPID Idle扫描中。
//不明白。我的理解同上。
扫描速度从慢到快:-T0到-T5
一般用-T4 并配合-F
-F: Fast mode - Scan fewer ports than the default scan (100个 默认是1000个)
nmap-services文件里包括了端口列表
-sS
平均一秒可以扫描上千个端口。SYN的扫描方式是相对来说比较隐蔽的扫描方式。
如果发现目标端口出现开放或过滤的情况,可以考虑使用SYN扫描的方式进行扫描,SYN扫描可以很明确地区分出端口的开放状态。
//这样说好像是有问题,防火墙DROP了目标端口的连接呢?
它常常被称为半开放扫描,向目标主机发送一个SYN包请求连接,如果收到RST包则表明无法连接目标主机,即目标主机端口关闭。
如果目标主机端口是开放的,会响应一个SYN/ACK包,Nmap则向目标发送一个RST替代ACK包,连接结束,3次握手并没有完成。
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
Nmap对高层的connect()调用比对原始报文控制更少,所以前者(-sT TCP连接扫描)效率较低,不仅花更长时间,需要更多报文得到同样信息,目标机也更可能记录下连接。IDS可以捕获两者。许多普通UNIX系统上的服务会在syslog留下记录,有时候是一条加密的错误消息。如果管理员在日志里看到来自同一系统的一堆连接尝试,他应该意识到他的系统被扫描了。
-sU UDP扫描发送空的UDP报文到目标端口,UDP头是没有任何数据的,这就使Nmap可以轻松辨别目标端口的开放状态,如果返回ICMP端口不可到达错误就可以认定该端口是关闭的,其他的就可以被认定是被过滤的,如果被响应了则判断目标端口是开放状态。
//UDP头没有任何数据是什么意思?端口信息不是数据吗
-sN是Null扫描,发送的是非常规的TCP通信数据包,很多情况下与Xmas扫描恰好相反,因为Nu11扫描不会标记任何数据包,若目标主机的相应端口是关闭的,会响应一个RST数据包,若目标端口是开放的则不会响应任何信息。
-sF是FIN扫描,向目标端口发送一个FIN包,如果收到目标响应的RST包,则说明目标端口是开放的,如果没有收到RST包则说明目标端口是关闭的。?//和SYN一样,很容易被防火墙过滤。没收到不代表是关闭的。
-sX是Xmas扫描,数据包的FIN、PSH和URG标记位置打开,即标志为1,根据RFC793规定如果目标主机端口是开放的则会响应一个RST标志包。这些扫描方式会躲过一些无状态防火墙的过滤。//同样容易被防火墙过滤
这些探测,配合wireshark抓包,可以看的很清楚发出的探测报文
ACK扫描探测报文只设置ACK标志位(除非使用–scanflags)。当扫描未被过滤的系统时,open和closed端口都会返回RST报文。不响应的端口或者发送特定的ICMP错误消息的端口都会被标记为filtered。所以-sA的意义在哪里?
窗口扫描方式通过检查返回的RST报文的TCP窗口域判断目标端口是否是开放的。有时,开放端口用正数表示窗口大小,关闭端口的窗口大小为0。
–scanflags <flags>: Customize TCP scan flags
-sI <zombie host[:probeport]>: Idle scan
-sO: IP protocol scan
使用–scanflags选项可以指定任意的TCP标志位来进行扫描,选项可以是一个数字标记值,如9(PSH和FIN),但使用字符名更容易些。只要是URG、ACK、PSH、RST、SYN、FIN的任何组合就可以。
使用-sI选项可以使攻击者能够不使用自己的IP向目标主机发送数据包,它可以利用不活跃的僵尸主机反弹给攻击者一个旁通信道,从而进行端口扫描。IDS会把不活跃的僵尸主机当作攻击者。
使用-sO 启用IP协议扫描。它并不是扫描端口号,而是IP协议号,但仍可以使用-p选项选择需要扫描的协议号。它不是在UDP报文的端口域上循环,而是在IP协议域的8位上循环,发送空的IP报文头。
- 点赞
- 收藏
- 关注作者
评论(0)