)
一、文件头分析
先看文件头:
text
0a 0d 0d 0a c0 00 00 00 4d 3c 2b 1a ...
0a 0d 0d 0a是 pcapng 的块类型(Section Header Block);- 后面的
4d 3c 2b 1a(即0x1A2B3C4D)是 pcapng 的字节序魔数。
所以这是一个标准抓包文件,用 Wireshark 。
二、流量分析
查找一下所有post请求的流量:
text
http.request.method == "POST"

匹配到8条记录。
知识点:菜刀 / 蚁键 流量特征
- 请求方法几乎都是 POST;
- URL 固定指向一个上传目录里的小
.php文件; - 参数名是
a、z0、z1、z2之类,值是 base64;最常见的一句话结构是:
php
a=@eval(base64_decode($_POST[action]));
追踪第一条http流,看到几个关键信息:

1、文件名 1569496537 是 Unix 时间戳
从 1970-01-01 00:00:00 UTC 起算的秒数, 等于 2019-09-26 11:15:37 UTC。
时间转换脚本:
python
import datetime as d
t1=d.datetime.fromtimestamp(1569496537, d.timezone.utc)
print(t1) # 2019-09-26 11:15:37+00:00
t2=d.datetime.fromtimestamp(1569496537, d.timezone(d.timedelta(hours=8))) # 2019-09-26 19:15:37+08:00
print(t2)
或者用随波逐流工具箱

2、 逐条解码发现藏有压缩包
每条命令都追踪HTTP流后得出:
| 顺序 | 帧号 | 攻击者命令(z2 解码后) | 回显要点 |
|---|---|---|---|
| 1 | 46 | (菜刀首包,仅取系统信息) | Linux 25c9dc316909 ... x86_64(www-data),站点根目录 /var/www/html/admin/upload |
| 2 | 58 | cd upload/;ls;... |
1569496537.php、flag.rar、password.txt |
| 3 | 69 | cd upload/;ls -l;... |
flag.rar 434 B、password.txt 21 B、php 文件 28 B |
| 4 | 96 | cd upload/;cat flag.rar;... |
返回 434 字节二进制(RAR 文件头 Rar!) |
| 5 | 128 | cd upload/;cat password.txt;... |
SuperHer0␡␡␡␡Masters␡(后面解释) |
| 6 | 190 | cd upload/;cd ..;... |
跳到 /var/www/html/admin |
| 7 | 252 | cd "/var/www/html/admin/";ls;... |
footer.php、header.php、index.php、logout.php、upload、upload.php |
| 8 | 442 | ...;exit;... |
无输出,攻击者退出 |
由表可知道,96帧返回了flag.rar
- 选中第 96 帧(请求)→ 右键 Follow → HTTP Stream;
- 弹窗左下角把显示方式从
ASCII改成Raw; - 点 Save as... 保存成
flag.rar;

压缩包打开要密码,
三、字符解密
解析128帧的响应,即133帧。
知识点: 怎么确认「128 的响应是 131」
HTTP 是同一 TCP 连接上的一问一答,Wireshark 会帮你配对:
-
看响应帧详情 :选中 128 帧,展开
Hypertext Transfer Protocol,里面有一行[Response in frame: 128]------Wireshark 直接告诉你它回答的是谁;
-
看 TCP 流号 :128 和 131 的
tcp.stream都是 8,过滤器tcp.stream == 8能把一问一答放在一起看;

点任意一个包,展开 Transmission Control Protocol(或 TCP 层)看到 Stream index: 8。

- Follow HTTP Stream:一个窗口同时显示请求和响应。
发现惊喜,有一串字符在下面:

1、八进制转字符
对比一下ASCii 码表


\177是八进制(Oct)的数字 (dec是十进制、hx是十六进制) , 代表删除键,先删了4次,又删了1次。
所以密码是:SuperMaster 。
解压压缩包拿到html代码。
2、HTML转字符
bash
flag{306bd05d78ccb90d2a442539d70ce4c2}
python解码:
python
import html
print(html.unescape("flag{306bd05d78ccb90d2a442539d70ce4c2}"))
拿到大结果。
如果怕粘错,读文件解析:
python
import html
print(html.unescape(open("flag.txt").read()))