任意文件读取与下载漏洞

文件读取漏洞(列目录漏洞)

概念及成因

任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。其中的目录遍历是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件(可以是web根目录以外的文件),甚至执行系统命令。更严重的,导致SSRF漏洞,进而漫游至内网。

探测与危害

可以利用web漏洞扫描器(御剑等)扫描web应用进行检测,也可通过搜索,网站标题包含 “index of” 关键词的网站进行访问,手工探测等。

攻击者通过访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者; 攻击者可能通过浏览目录结构,访问到某些隐秘文件(如PHPINFO文件、服务器探针文件、网站管理员后台访问地址、数据库连接文件等)。简要来说就是老家被偷了。

文件下载漏洞

概念

一些网站由于业务需求,往往需要提供文件查看或文件下载功能,如果对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载服务器的任意敏感文件,可以是源代码文件、系统敏感文件等,这就是文件下载漏洞。通过任意文件下载漏洞,攻击者可以对操作系统或程序代码进行深入的研究,然后配合敏感文件中的敏感信息对服务器进行更深层次的入侵。

文件下载的两种方式

先来了解一下常规的网页文件下载的两种形式:
1、直接下载:

<a href=”http://www.a.com/xxx.rar”>下载</a>

2、增加header头

<?php

$filename = $_GET['filename'];

echo '<h1>开始下载文件!</h1><br /><br />';

echo file_get_contents($filename);

header('Content-Type: imgage/jpeg');

header('Content-Disposition: attachment; filename='.$filename);

header('Content-Lengh: '.filesize($filename));

?>

如何挖掘

1、通过页面信息进行挖掘

我们可以通过查看网页源代码来查找是否有readfile()、file_get_contents()、fopen()等函数(这就与文件读取函数联动了),如果$filename没有经过校验或者校验不合格,用户就可控制变量读取任意文件,如/etc/passwd、/index.php、/config.ini等

2、通过url链接进行挖掘

常见的包含在url链接中的有

一般链接形式:
download.php?path=
download.php?file=
down.php?file=
data.php?file=
readlife.php?file=
read.php?filename=

或者包含参数:

&url=

&file_name=

&Filepath=

&Path=

&Data=

3、在脚本代码种进行挖掘

涉及到代码审计知识

一些敏感文件

知道有文件下载漏洞就可以干坏事儿了,下面列出了一些敏感文件

Windows:
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root密码
C:\Windows\php.ini //php配置信息

Linux:
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.conf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/usr/local/app/apache2/conf/httpd.conf //Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置
/usr/local/app/php5/lib/php.ini //PHP相关配置

实例

云演任意文件下载

关卡1
点进去有个下载链接,但是是 fake_flag.txt
在这里插入图片描述
不过它直接提醒了 flag 真正的藏身之处是 flag.txt,那我们直接在 url 中输入 filename=flag.txt 即可获取
在这里插入图片描述
这题有点过于简单了…

关卡2
进去发现给了我们两首歌的链接,点击也确实下载了
在这里插入图片描述
查看它的网页源码发现是这么写的:

<div id="templatemo_content_wrapper">
    
        <div id="templatemo_content">
        	
            <div class="content_title_01">壮士,来听首歌吧</div>
			<div class="horizontal_divider_01">&nbsp;</div>
			<div class="cleaner">&nbsp;</div>

			<p>为了让大家更轻松的比赛,为大家准备了两首歌让大家下载</p>
			
			<p><a href="download.php?url=Y2hvdWJhZ3VhaS5tcDM=" target="_blank">丑八怪</a></p>
            <p><a href="download.php?url=T25lIExvdmUubXAz" target="_blank">One Love</a></p>
            
            
             <div class="cleaner">&nbsp;</div>
        </div>
        <div class="cleaner">&nbsp;</div>
    </div>
    
    <div id="templatemo_footer">
		
	</div>

其中<p><a href="download.php?url=Y2hvdWJhZ3VhaS5tcDM=" target="_blank">丑八怪</a></p><p><a href="download.php?url=T25lIExvdmUubXAz" target="_blank">One Love</a></p>中参数 url 后面的那一串是啥呢?联系之前的知识,不难猜测出这串字符应该是经过 base64 编码之后的结果,尝试解码看看到底是啥。

使用 hackbar 解码后,发现分别是choubaguai.mp3One Love.mp3,看来与我们的猜测吻合。看到这大抵是猜测存在文件下载漏洞了,并且还含有文件包含漏洞,多半是这个 download.php 文件的锅。我们先直接让它包含自己试试,当然跟前面一样,需要编码。发现是可以直接下载的,打开发现:

<?php
error_reporting(0);
include("hereiskey.php");
$url=base64_decode($_GET[url]);
if( $url=="hereiskey.php" || $url=="choubaguai.mp3" || $url=="One Love.mp3" || $url=="download.php"){
	$file_size = filesize($url);
	header ( "Pragma: public" );
	header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
	header ( "Cache-Control: private", false );
	header ( "Content-Transfer-Encoding: binary" );
	header ( "Content-Type:audio/mpeg MP3");
	header ( "Content-Length: " . $file_size);
	header ( "Content-Disposition: attachment; filename=".$url);
	echo(file_get_contents($url));
	exit;
}
else {
	echo "Access Forbidden!";
}
?>

没有对包含的文件进行任何的过滤检查,确实是存在文件包含漏洞。此外,我们还发现了一个 hereiskey.php 文件,那我们故技重施,把这个文件下下来康康(别忘了编码)

<?php
// key is d0wnload_0k
?>

成功得到key

pikachu靶场 UnSafe FileDownload

跟前面一样,点击链接发现是成功下载的
在这里插入图片描述
查看源码:

<div id="usd_main" style="width: 600px;">
       <h2 class="title" >NBA 1996年   黄金一代</h2>
       <p class="mes" style="color: #1d6fa6;">Notice:点击球员名字即可下载头像图片!</p>
       <div class="png" style="float: left">
       		<img src="download/kb.png" /><br />
       		<a href="execdownload.php?filename=kb.png" >科比.布莱恩特</a>
       </div>
</div>

没什么大问题,跟上面一样,先尝试直接包含自己试试
在这里插入图片描述
发现找不到该文件,最大的可能性就是此文件并不存在根目录下,返回上一级试试
在这里插入图片描述
发现成功下载到了该文件,我们再去后端看看它的代码逻辑,其中

include_once $PIKA_ROOT_DIR."inc/function.php";

说明其存在文件包含漏洞,而

$file_path="download/{$_GET['filename']}";

说明球星图片文件是与 execdownload.php 一同存在 download 目录下的,所以使用 …/ 跳过上级

如何预防

● 净化数据:对用户传过来的文件名参数进行统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
● web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,使其即使越权也在访问目录之内。www目录就是一个chroot应用。由chroot创造出的那个根目录,叫做“chroot监狱”(所谓"监狱"就是指通过chroot机制来更改。某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全,详细具体chroot的用法,可参考chroot用法详解
● 任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
● 要下载的文件地址保存至数据库中。
● 文件路径保存至数据库,让用户提交文件对应ID下载文件。
● 用户下载文件之前需要进行权限判断。
● 文件放在web无法直接访问的目录下。
● 不允许提供目录遍历服务。
● 公开文件可放置在web应用程序下载目录中通过链接进行下载。

  • 3
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
shopxo是一种流行的开源电商系统,以其简单易用和灵活性而备受欢迎。然而,它也存在一些安全漏洞,包括任意文件读取漏洞。这个漏洞可能会使攻击者能够读取服务器上的任意文件,包括敏感的配置文件和用户数据。 要利用shopxo download任意文件读取漏洞,攻击者通常会构造特定的URL请求,注入恶意代码来访问目标文件。攻击者可能可以通过执行一系列步骤来实现此目标,例如: 1. 识别目标系统上潜在的敏感文件,如数据库配置文件、用户身份验证文件等。 2. 构造特定的URL来请求这些文件,使用目标系统的下载功能。 3. 在URL中注入特殊字符或路径遍历符号,以绕过访问限制和读取目标文件。 一旦攻击者成功读取到目标文件,他们可能会进一步利用这些信息来实施其他攻击,例如窃取用户信息、篡改网站内容或者进行其他恶意活动。 为了防范shopxo download任意文件读取漏洞,网站管理员可以采取以下措施: 1. 及时更新shopxo系统以修复任何已知漏洞,并安装最新的补丁程序。 2. 限制对敏感文件的访问权限,确保只有授权的用户能够访问它们。 3. 验证和过滤用户输入,以防止任意文件读取漏洞的利用。 4. 实施Web应用程序防火墙(WAF),以监视和阻止恶意请求。 5. 定期进行安全审计和漏洞扫描,以及对服务器和应用程序配置进行安全性评估。 通过采取这些预防措施,可以最大限度地减少shopxo download任意文件读取漏洞的风险,并确保网站和用户数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值