地址扫描
地址扫描探测是指利用ARP、ICMP请求目标网段,如果目标网段没有过滤规则,则可以通过回应消息获取目标网段中存活机器的IP地址和MAC地址,进而掌握拓扑结构。
端口扫描
全连接扫描
TCP扫描
全连接扫描调用操作系统提供的connect()函数,通过完整的三次TCP连接来尝试目标端口是否开启。全连接扫描是一次完整的TCP连接。
- 端口开放
攻击机发送 SYN
靶机回复 SYN ACK
攻击机回复 ACK
攻击机发送 RST ACK - 端口不开放
攻击机发送 SYN
靶机回复 RST ACK
判断某个机器扫描了那些端口
基础条件:
- 攻击机IP
准确判断条件: - 攻击机IP
- 被扫描IP
利用过滤器过滤ip和包类型从而判断攻击机扫描了那些端口,且端口开放
tcp扫描主要过滤 RST 包
ip.src_host==攻击机IP and ip.dst_host==靶机IP and tcp.flags.reset==1
半连接扫描
SYN 扫描
半连接使用不完整的TCP连接
端口开放
攻击机发送 SYN
靶机回复 SYN ACK
攻击机发送 RST ACK
端口不开放
攻击机发送 SYN
靶机回复 RST ACK
攻击机扫描了22端口,靶机回复syn ack,按理论攻击机收到靶机回复的 syn ack 就代表靶机此端口大概率开放,应发送RST断开连接,但是我的nmap并没有,可能需要多等一会儿。
攻击机扫描了3306端口,靶机直接回复了RST,说明靶机明确不开放此端口
过滤 syn包说明攻击机扫描了 22,3306端口
半开放扫描主要过滤 syn 包
ip.dst_host == 192.168.1.80 and ip.src_host ==192.168.1.199 and tcp.flags.syn==1
秘密扫描 TCP FIN
FIN扫描
攻击者发送 TCPFIN ,靶机没有响应就是开放,如果端口没有开放返回 RST ACK
端口开放
攻击机发送 TCP FIN
靶机不回复
端口不开放
攻击机发送 TCP FIN
靶机回复 RST ACK
FIN 扫描 过滤 FIN 包
ip.addr == 攻击机ip and ip.addr ==靶机ip and !ssh and tcp.flags.fin==1
通过过滤发现攻击机扫描了 22端口与3306端口
但是靶机只开放了22端口,3306并没有开放,所有只返回了3306端口的RST包
秘密扫描 TCP ACK
ACK扫描
tcp ack通常用于防火墙配置规则扫描
tcpack利用标志位 ack,ack在tcp协议中表示确认序号有效,确认连接,但因为tcpack并没有完整的tcp连接,所以靶机都会返回 RST,所以无法用于端口扫描。
UDP 扫描
采用 UDP ICMP 进行端口扫描
并不准确
端口开放
攻击机发送 UDP 包
靶机回复 UDP 包
端口不开放
攻击机发送 UDP 包
靶机回复 ICMP 包
操作系统识别
nmap 使用tcp/ip 协议栈识别操作系统,nmap保存了众多操作系统指纹特征,根据返回的特征与之匹配,如果无法匹配,则会以概率形式列举可能的系统。
首先通过ping arp 扫描,然后进行端口扫描
通过正则识别
tcp.matches "(.*linux)"
过滤重要字符串
常见关键字
eq,== 等于
ne,!= 不等于
gt,> 比…大
lt,< 比…小 ge,>= 大于等于
le,<= 小于等于 and,|| 且 or,&& 或 not,! 取反
tcp.port == 80
tcp.dstport == 80 // 只显tcp协议的目标端口80
过滤端口范围
tcp.port >= 1 and tcp.port <= 80
常见服务协议
tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
oicq
bootp
contains 过滤包含指定字符串的数据包
matches 匹配过滤条件中给定的正则表达式
HTTP过滤方法
http.host contains magentonotes.com //过滤经过指定域名的http数据包,这里的host值不一定是请求中的域名
http.response.code==302 //过滤http响应状态码为302的数据包
http.response==1 //过滤所有的http响应包
http.request==1 //过滤所有的http请求
http.request.method==POST //过滤所有请求方式为POST的http请求包,其它 方法也可以 比如 put,get等
http.cookie contains guid //过滤含有指定cookie的http数据包
http.server contains “nginx” //过滤http头中server字段含有nginx字符的数据包
http.content_type == "text/html" //过滤content_type是text/html的http响应、post包,即根据文件类型过滤http数据包
http.content_encoding == “gzip”//过滤content_encoding是gzip的http包
http.transfer_encoding == “chunked”//根据transfer_encoding过滤
http.content_length == 279 //根据content_length的数值过滤
http.content_length_header == “279″ //根据content_length的数值过滤头大小
http.server //过滤所有含有http头中含有server字段的数据包
http.request.version == “HTTP/1.1″ //过滤HTTP/1.1版本的http包,包括请求和响应
例题
找到目标 CMS 信息
利用 matches 正则快速过滤包括 powered by 的字符
http matches "(.*?)powered by"
找到黑客通过SQL注入攻击时的软件名称
通过 正则匹配 sql,and 只有 request 的包
http matches "sql.*" and http.request==1
找到黑客登陆网站后台所用的账号密码
http.request.method==POST and http.request==1 and http matches "username"
转载:https://blog.csdn.net/qq_38626043/article/details/127906609