前言
承接第一篇CTF流量分析,中间涉及部分知识内容,顺便自己再熟悉一遍,常规CTF或者说工控流量分析用到的工具wireshark之外似乎不怎涉及,,,
协议
TCP协议
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。
OSI七层模型
TCP协议的报文格式
TCP三次握手以及四次挥手,三次握手以及四次挥手首先需要了解这几个概念
- 第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
- 第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。
- 第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方。
四次挥手顺序:
- 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
- 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态。
- 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
- 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
到这里为止,就直接对接上连载文一的问题一,方便直接确定,简单理解就是
端口开放:
攻击方发送SYN包,受害主机返回SYN ACK 攻击主机发送 ACK,受害主机 返回RST ACK
端口CLOSE
攻击方发送SYN包,受害主机返回RST ACK
可结合文一的数据包来分析。
ARP协议
ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。简单来说就是可以确定主机mac地址的协议。
ARP协议报文格式
图片来源于网上老师傅的,其实也无需对报文格式了解,概念本身就比较好理解。
ICMP协议
ICMP 是 TCP/IP 模型中网络层的重要成员,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成 TCP/IP 模型中的网络层。ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。
简单理解来说就理解为ping的时候利用的就是ICMP协议。
HTTP协议
HTTP是一个属于应用层的面向对象的协议, HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文,可以根据请求包的内容去理解
HTTP协议的报文格式
涉及工控的部分协议
Modbus协议
直接看该协议的pdf,看的头懵,直接切入重点
具体的交互线圈寄存等也时不大了解,一般牵涉到的这类协议的话,直接用脚本提取应该就行,文末附的有参考链接,内有脚本和原理。
S7comm协议
S7协议基于OSI模型,S7协议包含三部分
Header->Parameter->Data
一般题目中的似乎好像再数据部分吧,,,,,
还有其它协议 MMS协议等等。但是工控类的题目总的来说也有技巧吧。
过滤语法
ip.addr==x.x.x.x 含有地地址x.x.xx
ip.src==x.x.x.x 源地址为x.x.x.x
ip.dst==x.x.x.x 目的地址为x.x.x.x
arp|http|tcp 过滤各类协议
tcp.port == 22 tcp端口为22的流量
http.request.method== "POST" 请求方式为POST的http协议流量
tcp contains "flag" tcp协议中含有字符“flag”,内容过滤
http.request.uri contains "flag" htttp请求中含有字符串
eth.dst == A0:00:00:04:C5:84 // 过滤目标mac
eth.src eq A0:00:00:04:C5:84 // 过滤来源mac
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
eth.addr eq A0:00:00:04:C5:84 / / 过滤来源MAC和目标MAC都等于A0:00:00:04:C5:84的
http.request.method == "GET"
http.request.method == "POST"
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1."
// GET包
http.request.method == "GET" && http contains "Host: "
http.request.method == "GET" && http contains "User-Agent: "
// POST包
http.request.method == "POST" && http contains "Host: "
http.request.method == "POST" && http contains "User-Agent: "
// 响应包
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
http contains "HTTP/1.0 200 OK" && http contains "Content-Type: "
//联合语句
http contains "HTTP/1.0 200 OK" && http contains "Content-Type: "
参考链接