导语

最近在看软考信息安全工程师的教材,看到信息收集这块儿,结合之前的靶机渗透经验,觉得自己掌握的不是很牢靠,有必要再总结一下。

端口扫描的几种类型

完全连接扫描

利用tcp/ip的三次握手机制,如果完成了三次握手建立了一个连接,就说明确此端口开放,否则视为关闭。

半连接扫描

简化一点的完全连接扫描,只要前两次握手成了就行。

SYN扫描

发送连接请求,看主机的回应,如果反悔了ACK信息则认为是开放,如果是RESET则认为关闭

ID头信息扫描

要求借助一台基本没有网络活动的主机B。先由A主机向B发ping,关注返回的报文的ID(书上是这么写的,我实在不知道tcp的id是搁哪儿的,暂时理解成SEQ吧)。如果均匀+1,说明B主机确实没什么网络活动,在目前阶段只与A有交流。然后A伪造一个由B发出的请求连接数据包给C,如果C开放了,就会回SYN,而B会再和C交流,因此再给ping返回的ID就不是加一而是加几,而如果C不开放,就会回RESET给B,B一看RESET直接丢了,依旧和ping返回,所以ID只加一。

隐蔽扫描

是绕IDS防火墙和监视系统的方法

SYN|ACK扫描

直接发SYN|ACK,也就是第二次握手的包,如果目标主机开放,则会认为这是有误的包,直接丢弃不回复,如果不开放,则会返回RESET。

FIN扫描

直接发FIN包,如果回RESET说明关闭,如果不回说明开放,和上面的原理基本一致。

ACK扫描

发送FIN包之后,查看返回包的TTL和WIN,开放端口TTL一般小于64,WIN一般大于0,关闭端口TTL一般大于64,WIN必为0(搞不懂都,不是FIN扫描就完了吗?)

NULL扫描

标志位全部空,也就是说发一个错误的数据包,如果返回了RST,说明是关闭的。

XMAS扫描

同NULL,知识将标志位全部为1

拓展

以上的基本上都是tcp协议下面向连接的服务的端口扫描,那么对于使用udp无连接的服务怎么扫描呢?

由于UDP协议是非面向连接的,对UDP端口的探测也就不可能像TCP端口的探测那样依赖于连接建立过程(不能使用telnet这种tcp协议类型命令),这也使得UDP端口扫描的可靠性不高。所以虽然UDP协议较之TCP协议显得简单,但是对UDP端口的扫描却是相当困难的。

用man命令查看nmap的手册可以找到udp端口扫描的介绍

img

nmap

nmap作为流传最广的端口扫描工具,其用法显然有必要说说。

官方给了一些常见的命令选项

下面是我的常见的命令选项

-p 指定端口单端口扫描

-p- 全端口扫描

-sT tcp连接扫描(应该是完全连接扫描,毕竟很慢)

-sS SYN扫描

-sU udp扫描

-sV 扫描服务版本

-sC 脚本扫描

-A 强力扫描

-Tx 以x线程扫描,可取1-6

-6 对ipv6地址主机扫描

-f 小数据包发送

-D <假ip> 发送掺杂假ip的数据包

-v 显示扫描细节

-sP arp扫描主机存活性

参考:

https://blog.csdn.net/sj349781478/article/details/122403617

https://blog.csdn.net/fageweiketang/article/details/84001054

https://blog.csdn.net/qq_37964989/article/details/84330693