代码审计——目录遍历详解

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
云原生网关 MSE Higress,422元/月
简介: 代码审计——目录遍历详解

01 漏洞描述



目录遍历,即利用路径回溯符“../”跳出程序本身的限制目录实现下载任意文件。

例如Web应用源码目录、Web应用配置文件、敏感的系统文(/etc/passwd、/etc/paswd)等。

一个正常的Web功能请求

如果Web应用存在路径遍历漏洞,则攻击者可以构造以下请求服务器敏感文件


image.png


02 审计要点


目录遍历漏洞发生的根本原因是系统自带查询功能,如果接收用户提交文件的目录地址数据,且服务端未有任何过滤就把目录下的文件列表发给用户,会造成目录遍历安全威胁。

当判断代码中是否存在目录遍历漏洞时,可从以下4点进行判断:

1、参数是否用户可控?是否直接拼接http请求数据?或者调用存储在数据库中的数据?

2、是否配置了全局过滤器,检查过滤器的配置,是否所有的目录查询请求都经过过滤器处理,过滤器的过滤规则是否符合安全要求?

3、是否判断了文件下载的权限?系统是否会对输入文件路径进行访问权限判断?

4、是否判断了文件下载路径,是否预先设置好文件白名单?对输入的特殊字符是否存在敏感字符过滤?

03 漏洞特征



当系统处理用户请求下载文件时,若允许让用户提交文件目录地址,把目录下的文件列表发给用户,会造成目录遍历安全威胁。

Java

String path = request.getParameter("path");
java.io.OutputStream os = response.getOutputStream();
java.io.FileInputStream fis = new java.io.FileInputStream(path);
byte[] b = new byte[1024];
int i = 0;
while ((i = fis.read(b)) > 0 ){
   
    os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();

上述代码根据用户提交的path,未经过安全校验,可直接从服务器上获取指定文件,展示给用户,导致了目录遍历漏洞。

PHP

<php
//Thepagewewishtodisplay
$file=$_GET['page'];
//Inputvalidation
$file=str_replace(array("http://","https://"),"",$file);
$file=str_replace(array("../","..\""),"",$file);
>

上述代码使用了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..\”替换为空字符,即删除。但这里可以利…/./…/./xampp/htdocs/dvwa/php.ini来绕过检测。


04 漏洞案例

image.png

String path = request.getParameter("path");
java.io.OutputStream os = response.getOutputStream();
java.io.FileInputStream fis = new java.io.FileInputStream(path);
byte[] b = new byte[1024];
int i = 0;
while ((i = fis.read(b)) > 0 ){
   
    os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();

如上述代码所示,用户提交的path,未经过安全校验,可直接从服务器上获取指定文件,展示给用户,导致了目录遍历漏洞。

漏洞验证示例如下:

http://127.0.0.1/resin-doc/viewfile/?file=index.jsp
image.png

05 修复方案


1、要下载的文件地址保存至数据库中。

2、文件路径保存至数据库,让用户提交文件对应ID下载文件。

3、用户下载文件之前需要进行权限判断。

4、文件放在web无法直接访问的目录下。

5、非必要情况下不提供目录遍历服务。

6、公开文件可放置在web应用程序下载目录中通过链接进行下载。

目录
相关文章
|
安全 Java 测试技术
【代码审计篇】 代码审计工具Fortify基本用法详解
本篇文章讲解代码审计工具Fortify的基本用法,感兴趣的小伙伴可以研究学习一下,文中部分地方可能会有遗漏,麻烦各位大佬指正,深表感谢!!!
1739 1
|
4月前
|
安全 搜索推荐 应用服务中间件
Web安全-目录遍历漏洞
Web安全-目录遍历漏洞
125 2
|
7月前
|
存储 安全
☻ 我见我思之hvv偷师学艺——目录遍历/路径遍历/文件遍历 漏洞
介绍了网络告警信息的价值,特别是与目录遍历漏洞相关。目录遍历漏洞允许攻击者访问非预期的文件和目录。关键点包括: - 源IP可能是代理,可查威胁情报以了解历史攻击。 - 目的IP和端口用于识别受影响的资产。 - 响应码(如200或4XX/5XX)指示攻击是否成功。 - HTTP信息中的&quot;../&quot;是攻击特征,用于尝试遍历目录。 - 攻击者利用&quot;../&quot;构造请求,试图访问系统敏感文件。 - 防守方应警惕含有&quot;../&quot;的请求,可能是目录遍历尝试。 - 攻击方则利用路径参数尝试遍历,若未过滤&quot;../&quot;,则可能成功利用漏洞。
|
8月前
|
安全 网络安全 PHP
Pikachu 目录遍历通关解析
Pikachu 目录遍历通关解析
|
XML 开发框架 .NET
代码审计之PHP基础铺垫
代码审计之PHP基础铺垫
96 0
|
存储 安全 前端开发
代码审计——任意文件下载详解
代码审计——任意文件下载详解
276 0
|
安全 Java PHP
代码审计——命令执行详解
代码审计——命令执行详解
199 0
|
安全 关系型数据库 MySQL
代码审计--文件包含
代码审计--文件包含
|
监控 安全 数据库
代码审计--变量覆盖
代码审计--变量覆盖
|
存储 算法 安全
​恶意代码之静态分析
​恶意代码之静态分析