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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 代码审计——目录遍历详解

01 漏洞描述



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

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

一个正常的Web功能请求为http://www.test.com/lownload.php?file=test.php。

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

http://www.test.com/lownload.php?file1=../../../../../../../../../../../../etc/passwd


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
{
   
   mathJaxContainer[0]}_GET['page'];
//Inputvalidation
{
   
   mathJaxContainer[1]}file);
{
   
   mathJaxContainer[2]}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应用程序下载目录中通过链接进行下载。

目录
相关文章
|
7月前
|
移动开发 安全
泛微e-office OfficeServer2.php 存在任意文件读取漏洞复现
泛微e-office OfficeServer2.php 存在任意文件读取漏洞,攻击者可通过构造特定Payload获取敏感数据信息。
290 0
|
7月前
|
安全 关系型数据库 MySQL
黑吃黑Getshell到提权实战案例
黑吃黑Getshell到提权实战案例
218 0
|
10月前
|
存储 安全 前端开发
代码审计——任意文件下载详解
代码审计——任意文件下载详解
176 0
|
10月前
|
安全 Java PHP
代码审计——命令执行详解
代码审计——命令执行详解
134 0
|
11月前
|
安全 关系型数据库 MySQL
代码审计--文件包含
代码审计--文件包含
|
11月前
pikachu靶场通关秘籍之目录遍历攻击
pikachu靶场通关秘籍之目录遍历攻击
142 0
|
11月前
|
监控 安全 数据库
代码审计--变量覆盖
代码审计--变量覆盖
|
安全 中间件 Shell
文件包含漏洞利用方式-日志注入getshell
中间件的日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息 如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候,日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell 比如使用代理工具抓包,在HTTP请求中插入一句话木马,访问日志文件时会执行一句话木马,然后使用蚁剑等工具链接,从而getshell
584 0
文件包含漏洞利用方式-日志注入getshell
|
安全 数据库
目录遍历漏洞和文件读取漏洞的区别
通过操作URL强行访问web目录以外的文件,目录和命令。网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件、配置文件等,攻击者利用该信息可以为进一步入侵网站做准备。
306 0

热门文章

最新文章