同样BUU的一分题,总结一下知识点
fuzz了一下,过滤大概为这些
··· 无法上传php一句话(我在说废话)
··· 存在文件头过滤,需要添加图片文件的文件头 GIF89a
··· 文件的内容不能包含<?
,但可以上传<script language='php'><scirpt>
类型的图片马来绕过
本题用到了.htaccess之后的.user.ini
在PHP手册中查到了有关信息
也就是说我们可以在.user.ini
中设置php.ini
中PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置,而且只要是在使用 CGI/FastCGI 模式的服务器上都可以使用.user.ini
有两个参数:auto_prepend_file和auto_append_file
查询了一下官方手册
我们指定一个文件(如aa.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:require(./a.jpg);
这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()
时该设置无效)
所以我们上传一个
GIF89a auto_prepend_file=a.jpg
的.user.ini
然后上传图片马即可获得flag
system('cat /flag');