这里把TCP三次握手四次挥手+HTTP抓包分析放在一起分析。
说是HTTP,其实并不打算真的就协议层面去分析HTTP。因为那又是一个可以另外水一篇博客的例子了。
Tcp状态图+HTTP抓包分析
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
RST表示连接重置。
首先做一个分享:两个链接,说的挺全的,一个是socket部分的tcp,还有一个是TCP Client / Server示例,我就不再堆砌内容了。
OCKETS - SERVER & CLIENT - 2017
http://www.bogotobogo.com/cplusplus/sockets_server_client.php
TCP Client / Server示例
https://notes.shichao.io/unp/ch5/
以下是tcp 11种状态转换图:RFC793
很乱对吧,我反正这么觉得。。。
TCP连接过程更能“简洁”地说明问题:
可以看到:
- 客户端client独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。
- 服务器server独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。
- 共有的:(1)CLOSED (2)ESTABLISHED 。
配合上我们的抓包分析:
注意:
MSS这个可选项告知对方本端能够接收的最大报文(当然,这个大小是TCP净荷的大小)
TCP segment of a reassembled PDU,即根据MSS重组的包。
可以看到重组的包的大小。
对比两次get请求,可以发现第二次请求的是图片剩余的部分。
提取木马SNORT规则
在掌握了抓包以后,我们可以开始更深入地分析流量包了。
比如通过pcap包分析木马。
从pcap找规则提取方法:
1) 搜索引擎了解木马介绍和使用方法及是否有现成的snort或固定特征;
2) pcap包中搜索木马英文名、中文名、版本信息;
3) pcap包搜索域名方法,正则表达式([a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+)匹配pcap中域名信息;
这里我说的比较简单。因为设计业务内容的就不再赘述了。
通过运行客户端 和 服务器端的可执行文件,进行抓包,并对流量进行统计:
可以看到木马对应的流量信息(包括端口等等):
之后可以通过DPI更细致地发现特征:(之后按照规则写成snort规则吧)