信息收集之端口扫描
导语
最近在看软考信息安全工程师的教材,看到信息收集这块儿,结合之前的靶机渗透经验,觉得自己掌握的不是很牢靠,有必要再总结一下。
端口扫描的几种类型
完全连接扫描
利用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端口扫描的介绍
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