php 获取文件列表-文件包含漏洞

2023-09-18 0 7,354 百度已收录

目录

文件包含漏洞原理

当通过某些 PHP 函数通过 URL 动态引入文件时,传入的文件名没有得到正确的验证,并且操作了非预期的文件,这可能会导致意外的文件泄漏甚至恶意代码注入。 文件包含漏洞分为本地文件包含漏洞和远程文件包含漏洞。 包含的文件可以是各种文件格式。 当文件中包含恶意代码时,就会出现远程命令执行或文件上传漏洞。

公共文件包含函数

(1)include():包含并运行指定文件。仅生成警告,脚本继续执行

(2) require():包含并运行指定的文件。如果出错,则生成错误并终止脚本。

(3) include_once():在脚本执行过程中包含并运行配方文件。 与include的区别:检查是否已包含,如果已包含则不再包含。

(4) require_once():在脚本执行期间包含并运行配方文件。 与require的区别:检查是否已包含,如果已包含则不再包含。

PHP伪合约文件://

使用前提:该协议在双断条件下也能正常使用;

allow_url_fopen:off/on(指定是否允许从远程服务器或网站检索数据)

allowed_url_include: off/on (指定是否允许包含/需要远程文件)

1、准备一个文件包含漏洞的php文件和一句话木马的txt文件

2. 访问存在文件包含漏洞的文件

文件包含成功。

PHP://过滤器

阅读源码并进行base64编码输出。 使用前提:双断情况下也能正常使用;

allowed_url_fopen :关闭/打开

allowed_url_include:关闭/打开

1.查看php文件源代码

php://输入

您可以访问请求原始数据的只读流,并将 post 请求中的数据作为 PHP 代码执行。

allowed_url_fopen :关闭/打开

允许 url_include: 开启

1.使用burpsuite抓包并重放

为什么图中抓的是GET包,而我们传的是post参数呢?

解压合约 zip://protocol

用法:zip://[压缩文件的绝对路径]#[压缩文件内的子文件名]

1.准备压缩包

2. 测试

没有执行成功的原因是什么? # 数字未编码

zlib://协议

用法:compress.zlib://[压缩文件的绝对路径]

数据://协议

允许 url_fopen:打开

允许 url_include: 开启

1.直接在网址栏前面添加木马语句

2.可以使用base64编码绕过

总结

协议

允许 url_fopen

允许 url_include

用法

文件://

关/开

关/开

?file=文件://路径/文件名.txt

PHP://过滤器

关/开

关/开

?file=php://filter/read=convert.base64-encode/resource=file

php://输入

关/开

?file=php://input 一句话木马

压缩://

关/开

关/开

?file=zip://压缩包路径%23压缩煎饼文件

压缩.bzip2://

关/开

关/开

?file=compress.bzip2://压缩包路径

压缩.zlib://

关/开

关/开

?file=compress.zlib://压缩包路径

数据://

?file=data://text/plain,一句话木马

?file=data://text/plain,base64,base64编码的句子木马

案例1:php://输入


<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://filter") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){
	exit('hacker!');
}
if($file){
	if ($file!="http://www.baidu.com") echo "tips:flag在当前目录的某个文件中";
	include($file);
}else{
	echo 'click go baidu';
}
?>

1、使用php://input传递post流,burpsuite抓包写入一句木马

2、使用命令查看文件目录:dir并找到flag.txt

3、查看flag.txt文件内容:输入

4.检查flag.txt的内容php 获取文件列表,确保查询正确

PS:dos下的基本命令

命令

命令解释

目录

显示目录中的文件和子目录的列表以及有关文件的其他详细信息,包括文件大小、创建日期和时间等。

dir [驱动器:驱动器名称][path 目录路径] [/p] [/w] [/o] [/s]

[/p] 表示分页显示目录内容。 要查看下一个屏幕,请按任意键。

[/w] 表示以宽列表格式显示当前目录下的文件名

[/o] 表示按排序顺序显示文件

[/s]表示显示当前目录及其子目录下的所有文件列表。

复制

将一个或多个文件复制到另一位置。

copy [要复制的文件名] [要复制到的路径或文件夹]

移动

用于将文件或目录从一个位置移动到另一位置。 复制和连接之间的区别在于移动命令会从源位置删除文件。

move [要连接的文件的名称] [文件移动到的路径或文件夹]

md/mkdir

创建新目录

md [path代表要创建的目录的路径] [directoryname代表所有创建的目录的名称,该参数为必填项]

光盘

更改当前目录

php 获取文件列表-文件包含漏洞

cd [某盘d:c:等]

cd [] 进入根目录

cd [..] 进入上一级目录

重命名文件或文件夹

ren [oldfilename 旧名称] [newfilename 新名称]

德尔

用于删除目录中的文件。 要删除其他驱动器或目录中的文件,必须指定路径。

del [filename代表要删除的文件名]

rd/rmdir

用于删除文件夹

rd [directoryname代表要删除的文件夹名称]

CLS

清晰的屏幕

类型

显示文件内容

输入文件名.扩展名

回声

创建文件并填写内容

echo 内容>文件名.格式后缀

情况2:php://输入

<?php
show_source(__FILE__);
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){
	echo "successn";
	echo $flag;
}

1.上传a的值进行测试

2.使用抓包传递值

案例3:php://过滤器


<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){
 exit('hacker!');
}
if($file){
 include($file);
}else{
 echo 'tips';
}
?>

PHP伪合约有过滤功能。 我们使用 php://filter 来获取base64编码的内容。

情况 4:zip://


<?php
error_reporting(0);
$file = $_GET["file"];
if (!$file) echo 'upload?';
if(stristr($file,"input")||stristr($file, "filter")||stristr($file,"data")/*||stristr($file,"phar")*/){
	echo "hack?";
	exit();
}else{
	include($file);
}
?>

1.输入上传文件

2、使用zip上传压缩包文件,获取当前路径。

3、取出绝对路径并执行一句话木马,找到flag.txt文件。

4、重新上传文件php 获取文件列表,修改txt文件内容,获取flag.txt文件内容。

案例5:文件包含apache日志---Windows

文件包含漏洞可以包含apache日志文件=文件路径必须已知+文件包含漏洞

日志按天数划分,查询速度快,且易于分类保存。

1.找到日志文件路径(如果日志文件太大,可能包含故障)

2.如果随意上传一句话木马,就会被写入日志。

3、查看日志文件,看看木马是否写了一句话

4、可以看出日志中写的一句话木马是经过编码的。 我们可以使用burp suite进行抓包,改掉一句木马。

5、访问日志的绝对路径,查看是否成功包含。

聚苯乙烯

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 获取文件列表-文件包含漏洞 https://www.wkzy.net/game/196979.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务