首页 > 其他分享 >代码审计——目录遍历详解

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

时间:2023-06-25 18:03:45浏览次数:53  
标签:审计 文件 遍历 .. 详解 path os 目录


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

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

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 漏洞案例

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

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

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

05 修复方案


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

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

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

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

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

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

标签:审计,文件,遍历,..,详解,path,os,目录
From: https://blog.51cto.com/u_16170213/6547540

相关文章

  • 代码审计——未授权访问详解
    01漏洞描述未授权访问漏洞,是在入侵者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。简单来说,就是用户不经过身份认证即可访问敏感资源,可能造成敏感信息泄露,或者其他恶意操作。02审计......
  • 代码审计——SSRF详解
    01漏洞描述服务端请求伪造(SSRF)也成为跨站点端口入侵,是由于一些应用在向第三方主机请求资源时提供了URL并通过传递的URL来获取资源引起的,当这种功能没有对协议、网络可信便捷做好限制时,入侵者可利用这种缺陷来获取内网敏感数据、DOS内网服务器、读文件甚至于可获取内网服务器控制......
  • 代码审计——命令执行详解
    01漏洞描述命令注入是指因为系统使用了可以执行命令的危险函数,但是调用这些函数的参数可控,并没有做过滤或过滤不严格,使入侵者可以通过构造特殊命令字符串的方式将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施入侵,来非法获取数据或者网络资源。简单来说,就是......
  • 代码审计——XXE详解
    01漏洞描述XXE(XMLExternalEntityInjection)是一种针对XML终端实施的入侵,漏洞产生的根本原因就是在XML1.0标准中引入了“entity”这个概念,且“entity”可以在预定义的文档中进行调用,XXE漏洞的利用就是通过实体的标识符访问本地或者远程内容。黑客想要实施这种入侵,需要在XML的payl......
  • 代码审计——XSS详解
    01漏洞描述跨站脚本入侵(CrossSiteScript)是一种将恶意JavaScript代码插入到其他Web用户页面里执行以达到入侵目的的漏洞。入侵者利用应用程序的动态展示数据功能,在html页面里嵌入恶意代码。当用户浏览该页之时,这些嵌入在html中的恶意代码会被执行,用户浏览器被入侵者控制,从而达到......
  • 代码审计——硬编码口令/弱口令详解
    01漏洞描述根据网站所使用的第三方组件,寻找特定的弱口令或默认口令进行登录。或在代码层面寻找写死的账号口令,尝试进行登录。02审计要点对前端源代码以及系统后台代码进行全文关键字检索,如key、pass、pwd、password,查看是否存在明文显示的账号密码。03漏洞案例源码中某前端js......
  • 关于Java中ArrayList类的toArray方法详解
    先上源码:publicObject[]toArray(){returnArrays.copyOf(elementData,size);}可以看到ArrayList类的toArray()方法调用了Arrays.copyOf(elementData,size)(其中的elementData是ArrayList类中用来存储对象的数组,size是数组大小),接下来进入其内部:publicsta......
  • Crontab 命令详解
    一. Crontab介绍      crontab命令的功能是在一定的时间间隔调度一些命令的执行。1.1/etc/crontab文件      在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。      如:[root@dave~]#cat/etc/cro......
  • IPv4地址详解
    ip地址格式:<网络号,主机号>IPv4地址分类:A类:网络号8位,高位0B类:网络号16位,高位10C类:网络号24位,高位110D类:多播地址,高位1110E类:保留使用,高位1111特殊地址:主机号全0:表示网络本身0.0.0.0:表示本网络上的本主机主机号全1:表示本网络的广播地址255.255.255.255:表示整个网络的......
  • Linux usb 4. Device 详解【转】
    转自:https://blog.csdn.net/pwl999/article/details/120997525文章目录1.简介2.PlatformLayer2.1PlatformDevice2.2PlatformDriver3.UDC/GadgetLayer3.1GadgetBus3.2GadgetDevice3.2.1EndpointAlloc3.2.2EndPointAccess3.2.3UDCControl3.3GadgetDriver(Con......