流量分析篇

基础前言

流量分析(Traffic Analysis)又可以称作是网络取证(Network Forensics),正如其名,就是对计算机或计算机网络通信所产生的流量进行分析的一门技术。应急响应中这是一门我们必须要掌握的技能。无论是 Web 攻击、内网渗透,还是协议滥用,流量数据都是最直接、最可靠的证据。

记住:只要有通信就会产生流量。

安全事件调查中,我们通常依赖 电子四大证据:
日志:记录主机、网络设备、安全设备的操作历史,如 WAF、IDS/IPS 记录的攻击日志
流量:抓取网络数据包,分析攻击者行为及 C2(命令控制)通信。
内存:分析进程运行时的内容,可能包含密钥、后门、Shellcode。
磁盘:存储攻击者植入的 WebShell、恶意程序、凭据等关键数据。

核心工具:WiresharkTshark(wireshark命令版)、Tcpdump(轻量级抓包工具,适用于服务器)、Python中的Scapy

网络体系结构

TCP/IP 是因特网上的标准通信协议集,它不是针对某一个协议;TCP/IP 的体系结构分为 4 层,分别是

TCP/IP功能
应用层FTP,SMTP,HTTP 等上层协议
传输层TCP/UDP
网络互连层把数据分组发往目标网络或主机
网络接口层负责与物理网络的连接

一些WEB流量分析思路

简单点说就是看特征:看指纹、看加密、看ip、看协议。。。。。

网络协议分析详解:网络流量分析详解网络流量格式

常用指纹:

Awvs:
acunetix_wvs_security_test acunetix
acunetix_wvs acunetix_test
Acunetix-Aspect-Password:Cookie:
acunetix_wvs_security_test X-Forwarded-Host:
acunetix_wvs_security_test X-Forwarder-For:
acunetix_wvs-security_test Host:
acunetix_wvs_security_test

Netsparker:
X-Scanner:NetsparkerLocation:
NetsparkerAccept:netsparker/chechCookie:
netsparkerCookie:NETSPARKER

Appscan:
Headers Content-Type:Appscan
Content-Type:AppScanHeader
Accept:Appscan User-Agent:Appscan

Nessus:
x_forwarded_for:nessus
referer:nessus
host:nessus

sqlmap:
User-Agent:sqlmap1.2.8#stable

nmap扫描特征

-sT扫描特征
TCP端口扫描开放:
    SYN -->
    <-- SYN, ACK
    ACK -->

TCP端口扫描关闭:
    SYN -->
    <-- RST, ACK

TCP全连接扫描通常具有大于 1024 字节的窗口大小,因为由于协议的性质,请求需要一些数据:tcp.flags.syn==1 and tcp.flags.ack==0 and tcp.window_size > 1024
存在syn,但是不存在ack,而且大于1024字节,可以被认为是全连接扫描的端口关闭特征。即-sT扫描。

-sS扫描特征
TCP端口扫描开放:
	SYN -->
    <-- SYN,ACK
    RST-->

TCP端口扫描关闭:
    SYN -->
    <-- RST,ACK
TCP半连接扫描通常大小小于或等于 1024 字节,因为请求未完成,并且它不希望接收数据:
tcp.flags.syn==1 and tcp.flags.ack==0 and tcp.window_size <= 1024 
存在syn,但是不存在ack,而且小于等于1024字节,可以被认为是半连接扫描的端口关闭特征。即-sS扫描。

UDP扫描:
UDP段偶扫描开放:
	UDP packet -->

UCP端口扫描关闭:
    UDP packet -->
    ICMP 类型 3,代码 3 消息。 (无法访问目的地,无法访问端口)
UDP端口关闭特征:
icmp.type==3 and icmp.code==3

其他常见特征:流量分析及流量特征识别总结 – FreeBuf网络安全行业门户

WEBshell流量特征

菜刀特征:
1. 会有base64编码:QGluaV9
因为不论新版还是旧版都会有@ini_set("display_errors",而且菜刀和C刀都没有进行加密,因此开头部分必定一样都是QGluaV9

2. 明文部分可以看到先将z0进行base64解密,然后给eval执行。即:@eval(base64_decode($_POST[z0]));
冰蝎特征
因为是加密,所以没有明显的明文特征。
1. 请求正文不是key=calue&key2=value的形式,而是纯base64编码,而且很长很长。因为使用AES加密之后进行编码。
2. 响应正文也是纯base64。
蚁剑特征:支持四种加密特征
1、default特征
请求包里的强特征:
%40ini_set(%22display_errors

2、base64特征:
请求包里的强特征:
%40eval(%40base64_decode

3、chr、chr16特征:
4、rot13特征:
请求包里的强特征:
%40eval(%40str_rot13
5、哥斯拉特征
相应包的开头16位md5,结尾16位md5,中间全部是base64。

其他常见webshell特征:应急响应–流量分析_cobaltstrike、webshell、MSF流量特征

常见php危险代码执行函数:

eval()
assert()
preg_replace()
create_function()
array_mp()
call_user_func()
call_user_lfunc_array()

工具使用

Wireshark:wireshark常用命令 – soloate – 博客园Wireshark使用

ip.addr ==ip :对特定目的IP地址进行过滤
ip.src ==ip   :对指定的源IP地址进行过滤
直接输入HTTP、HTTPS、SMTP、ARP等协议进行筛选
使用【top.port==端口号】或【udp.port==端口号】命令,可对端口进行过滤
使用【tcp contains strings】命令,可对数据包中的strings关键字进行检索,对流量中包含某一关键字的数据包进行筛选

WEB流量实战例题

说不多说,直接上实战例题

题目背景

某公司内网网络被黑客渗透,简单了解,黑客首先攻击了一台web服务器,破解了后台的账户密码,随之利用破解的账号密码登陆了mail系统,然后获取了vpn的申请方式,然后登陆了vpn,在内网pwn掉了一台打印机,请根据提供的流量包回答下面有关问题(题目附件:web.pcap)

1、某公司内网网络被黑客渗透,请分析流量,给出黑客使用的扫描器

尝试搜索一下以下特征

过滤HTTP数据包并查找字符串WVS,成功发现一堆结果,故可以判断扫描器为AWVS

2、某公司内网网络被黑客渗透,请分析流量,得到黑客扫描到的登陆后台是(相对路径即可)

做这个先要分析常见的后台登录页面路径,不然在几十万的流量包里面找几个登录页面效率太慢了。分析题目黑客登录了后台登录提交的表单一般是POST提交,过滤一下POST流量

http.request.method==POST

追踪HTTP流还能看到黑客的输入的账号密码,因此确认该登陆地址就是/admin/login.php?rec=login

3、某公司内网网络被黑客渗透,请分析流量,得到黑客使用了什么账号密码登录了web后台

知道登录地址和攻击者IP现在进行过滤,找到攻击者登录成功的包

http.request.method==POST and http contains "rec=login" and ip.addr == 192.168.94.59

看到有很多包,这里都是在尝试登录直接看最后一个,直接追踪HTTP流

追踪HTTP流后可以看到完整的数据包交流过程,能清楚看到当前登陆数据包成功触发302跳转地址,于是可以认为就是账号密码,账号:admin;密码:admin@#pass123

4、某公司内网网络被黑客渗透,请分析流量,得到黑客上传的webshell文件名是,内容是什么,提交webshell内容的base编码

既然登陆成功是在当前数据包,就可以记录当前数据包,从之后的数据包编号开始分析文件上传。并且Webshell,肯定是属于POST方式

可以发现上面还是admin下面变成images的包,于是连接上木马的流量了,追踪流第一个images的包

看到文件上传成功,那就是这个了,在线解密一下即可获得传输信息,这里末尾有%3D,记得先URL解码再解Base64,最后得到内容

1234=@eval(base64_decode($_POST[action]));&action=@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");;$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}\t";if(substr($D,0,1)!="/"){foreach(range("A","Z") as $L)if(is_dir("{$L}:"))$R.="{$L}:";}$R.="\t";$u=(function_exists('posix_getegid'))?@posix_getpwuid(@posix_geteuid()):'';$usr=($u)?$u['name']:@get_current_user();$R.=php_uname();$R.="({$usr})";print $R;;echo("|<-");die();

可以看到是明显是蚁剑的流量特征。进行整理一下:

1234=@eval(base64_decode($_POST[action]));&action=

@ini_set("display_errors", "0");  // 隐藏所有PHP错误信息
@set_time_limit(0);     // 解除脚本执行时间限制(允许长时间攻击)
//关闭错误显示:攻击者通过抑制错误提示,避免暴露自身操作。

$D = base64_decode($_POST["z1"]); // 解码POST参数z1(需传入Base64编码的目录路径)
//接收外部参数:攻击者通过POST 传入 z1 参数(如 z1=L3Zhci93d3cvaHRtbA== 解码为 /var/www/html)。

//遍历目录:
$F = @opendir($D);  // 尝试打开指定目录
while ($N = @readdir($F)) {  // 遍历目录中的文件和子目录
    $P = $D . "/" . $N;      // 拼接完整文件路径
    $T = @date("Y-m-d H:i:s", @filemtime($P)); // 获取文件修改时间
    $E = substr(base_convert(@fileperms($P), 10, 8), -4); // 获取文件权限(八进制)
    $R = "\t" . $T . "\t" . @filesize($P) . "\t" . $E . "\n"; // 格式化输出信息代码会递归读取目录下的所有文件/子目录,并收集以下信息:文件名、修改时间、文件大小、权限(如 0755)。


//输出结果:
echo $M . $L;  // 输出所有目录和文件信息
echo("|<-");   // 标记结束符

5、某公司内网网络被黑客渗透,请分析流量,黑客在robots.txt中找到的flag是什么

找文件直接过滤文件:http contains “robots.txt”

追踪流看文件内容为找到 flag:87b7cb79481f317bde90c116cf36084b

6、某公司内网网络被黑客渗透,请分析流量,黑客找到的数据库密码是多少

涉及到数据库,那肯定是登录了的,查找下数据库的关键词,过滤字符串200看服务器回应200状态码的包

http contains "database"

追踪流也能看到,得到账号和密码 web/e667jUPvJjXHvEUv

7、某公司内网网络被黑客渗透,请分析流量,黑客在数据库中找到的hash_code是什么

注意看题在数据库里面找东西,上面的题告诉你已经通过密码登录进去数据库了,找东西还是一样直接过滤mysql的流量加上全局查找

mysql contains "hash_code"

追踪TCP流,成功找到hash_code信息

8、某公司内网网络被黑客渗透,请分析流量,黑客破解了账号ijnu@test.com得到的密码是什么

直接全局搜索字符串ijnu@test.com

追踪流查看到账号和密码

md5解密得到明文密码:edc123!@#

9、某司内网被黑客渗透,请分析流量,被黑客攻击的web服务器,网卡配置是是什么,提交网卡内网ip

网卡配置直接过滤网卡,一般网卡名字就那几个eth0 eth1 ens33 lo

追踪流,这里看到eth1是内网IP:10.3.3.100

USB流量分析思路

鼠标流量:USB协议鼠标数据部分在Leftover Capture Data域中,数据长度为四个字节

文章参考:https://www.freebuf.com/sectool/347971.html

第一个字节,代表按键

当取00时,代表没有按键
当取01时,代表按左键
当取02时,代表当前按键为右键

第二个字节,可看作为signed byte类型,其最高位为符号位

当值为正时,代表鼠标右移像素位;
当值为负时,代表鼠标左移像素位。
计算步骤
(1) 将十六进制转换为二进制,如:0x02 → 00000010,0xFE → 11111110。
(2) 判断符号位,最高位(第7位)为符号位:0 → 正数(直接转换)。1 → 负数(需计算补码)。
(3) 正数直接转换,示例:0x02(二进制 00000010)→ +2。
(4) 负数补码转换,取反:所有二进制位翻转(0→1,1→0)。加1:结果加1。添加负号:最终值为负数。示例:0xFE(二进制 11111110)符号位为 1 → 负数。取反 → 00000001。加1 → 00000010(即十进制为2)。最终值 → -2。

物理移动方向正值:向右移动(如 +2 → 右移2个单位)。负值:向左移动(如 -2 → 左移2个单位)。

常见值示例

十六进制值二进制值十进制值实际方向
0x00000000000无移动
0x7F01111111+127最大右移
0x8010000000-128*无效(协议保留)
0xFE11111110-2左移2个单位
0xFF11111111-1左移1个单位

第三个字节,代表垂直上下移动的偏移。

当值为正时,代表鼠标上移像素位;
值为负时,代表鼠标下移像素位。
和第二个计算的方式一样的,只不过左右变成了上下

键盘流量:USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节。

标准8字节键盘数据格式

字节位置名称描述
字节1修饰键(Modifiers)表示功能键(Ctrl、Shift、Alt等)的按下状态,每个二进制位对应一个按键。
字节2保留字段通常为 0x00,部分设备可能用于扩展功能(如多媒体键)。
字节3-8普通按键码最多6个同时按下的普通按键的键码(每个按键占1字节)。

字节1:Modifier Keys(功能键位掩码)

位(Bit)对应按键HID Usage ID描述
Bit 0左Ctrl0xE0按下时值为 1
Bit 1左Shift0xE1
Bit 2左Alt0xE2
Bit 3左GUI(Win键)0xE3
Bit 4右Ctrl0xE4
Bit 5右Shift0xE5
Bit 6右Alt0xE6
Bit 7右GUI(Win键)0xE7

字节3-8:普通按键码(HID Usage ID)

HID键码(Hex)对应按键字符/功能
0x00无按键
0x04AA/a
0x05BB/b
0x06CC/c
0x07DD/d
0x08EE/e
0x09FF/f
0x0AGG/g
0x0BHH/h
0x0CII/i
0x0DJJ/j
0x0EKK/k
0x0FLL/l
0x10MM/m
0x11NN/n
0x12OO/o
0x13PP/p
0x14QQ/q
0x15RR/r
0x16SS/s
0x17TT/t
0x18UU/u
0x19VV/v
0x1AWW/w
0x1BXX/x
0x1CYY/y
0x1DZZ/z
0x1E11/!
0x1F22/@
0x2033/#
0x2144/$
0x2255/%
0x2366/^
0x2477/&
0x2588/*
0x2699/(
0x2700/)
0x28Enter回车键
0x29EscEsc键
0x2ABackspace退格键
0x2BTabTab键
0x2CSpace空格键
0x2D-/_
0x2E==/+
0x2F[[/{
0x30]]/}
0x31\/|
0x33;;/:
0x34‘/”
0x35``/~
0x36,,/<
0x37../>
0x38//?
0x39Caps Lock大写锁定键
0x3AF1F1功能键
0x3BF2F2功能键
0x52方向键上
0x51方向键下
0x50方向键左
0x4F方向键右

示例分析

这里看到第三位是09,和上面的表对应一下就是F

USB的流量分析基础就是这些,下面是自动化工具:一把梭工具

首先要将wireshark里面的tshark.exe所在的文件夹添加到环境变量path下

CMD中执行tshark -v可以检测是否添加成功

USB流量分析实战

题目背景:请根据流量包信息还原鼠标流量找到flag

打开usb2的流量包先看capture Data是几位的,分析出来是什么流量

这里看到4位的USB流量,直接打开一把梭工具,打开命令行

python run_GUI.py 打开工具

看所有的按键流量

太乱了看不出来,一个一个看(左键)

右键,成功获取到flag内容。

题目背景2:请根据流量包信息还原键盘流量找到flag

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇