Nmap
-sS (SYN
nmap默认端口扫描方式,执行半开扫描,不完成TCP握手流程。只向目标端口发送一个SYN报文,然后等待响应。
SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。
如果多次重发后仍没响应, 该端口就被标记为被过滤。
使用抓包工具可以完整的看到探测过程。
-sT (TCP
一般不推荐使用,因为会留下连接日志。
另外在调用一些高级扫描时(如HTTP),会调用这种连接方式。
使用抓包工具看其探测过程
-sU
DNS,SNMP,和DHCP是常常开放UDP的几个服务,有些情况下会使用到。
由于UDP是无连接的,所以会面临响应探测问题,探测时的端口是否开放还是被过滤的判断,会让Nmap超时然后再探测,以防探测帧或者响应丢失,导致探测时间增长。
关闭的端口常常是更大的问题。它们一般发回一个ICMP端口无法到达错误。
但是不像TCP发送的RST报文,许多主机在默认情况下限制ICMP端口不可到达消息。
如:Linux 2.4.20内核限制一秒钟只发送一条目标不可到达消息。
抓包看一下,当只看到两个UDP无内容包时,懵了一下。
查了一下发现除了某些特定端口会有响应返回,如137 用的NBNS,其他的全部都是没有返回,原因是因为这台机器禁PING了,就是ICMP的返回包过不来。
所以没法判断端口是否关闭。
修改防火墙设置。
允许文件和打印机共享后确实可以ping主机了,但是ICMP回包还是有问题。
后来索性把防火墙关掉。
就可以明显看到其是通过返回包来进行判断的。
-sN
这个还是挺有意思的,首先这个不适用扫描windows、Cisco、bsdi、IBM的一些服务器,因为并不是完全遵守RFC 793这个协议。
这个协议会存在这种情况,当端口关闭时,任何不包含SYN,RST,或者ACK位的报文会导致 一个RST返回,而当端口开放时,应该没有任何响应。
所以只要不包含SYN,RST,或者ACK, 任何其它三种(FIN,PSH,and URG)的组合都行。
而刚刚上面说的那些他们并不遵守这个,他们不管端口开放或关闭,都返回一个RST,导致Nmap判断错误。
-sN 不设置任何标志位
-sF 只设置FIN标志位
-sX 设置FIN,PSH,和URG标志位
看一下探测过程,如果没加参数,默认会先发送ICMP请求。
-sA
用于探测防火墙状态。ACK扫描探测报文只设置ACK标志位。
当扫描未被过滤的系统时, open(开放的)和 closed(关闭的) 端口 都会返回RST报文。
Nmap把它们标记为 unfiltered(未被过滤的),无返回或者返回ICMP错误响应时标记为filtered。
防火墙关闭状态下。返回unfiltered
防火墙开启状态下。返回filtered
-scanflags
可以使用 URG, ACK, PSH, RST, SYN,and FIN的任何组合,进行发包。详细可以自己组合定制
-sI
高级隐藏扫描。利用僵尸网络执行扫描。
-sV
可以看到在探测的时候会有标志和固定长度字符串问题。
IDS识别nmap扫描一般都是根据UDP data区域填充的'C'字符串,ICMP填充的是0(正常windows下是a-z,Linux下是0-9。
莫慌,下一章我们学习一下怎么去改这些个文件。