目录遍历漏洞-6个实验(全)

举报
黑色地带(崛起) 发表于 2023/01/15 20:39:42 2023/01/15
【摘要】 (1)通过目录遍历阅读任意文件 (2)利用文件路径遍历漏洞的常见障碍 (3)如何防止目录遍历攻击

前言:

介绍: 

博主:网络安全领域狂热爱好者。

殊荣:华为云博主、CSDN网络安全领域优质创作者(CSDN:黑色地带(崛起)),2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edusrc高白帽,vulfocus、攻防世界等平台排名100+、高校漏洞证书、cnvd原创漏洞证书等。

擅长:对于技术、工具、漏洞原理、黑产打击的研究。


导读:

面向读者:对于网络安全方面的学者。 

本文知识点: 

(1)通过目录遍历阅读任意文件(√)

(2)利用文件路径遍历漏洞的常见障碍(√)

(3)如何防止目录遍历攻击(√)

 


 目录

一、目录遍历

1、意义

二、通过目录遍历阅读任意文件

1、示例

        实验1:文件路径遍历(简单)

三、利用文件路径遍历漏洞的常见障碍

1、对于../等的限制

        实验2:文件路径遍历(用绝对路径旁路阻止遍历序列)

2、嵌套遍历序列

        实验3:文件路径遍历(非递归地剥离遍历序列)

3、编码绕过

        实验4:文件路径遍历(用多余的URL解码剥离遍历序列)

4、基文件夹开头

        实验5:文件路径遍历(验证路径起始)

5、文件扩展名固定

        实验6:文件路径遍历(空字节旁路验证文件扩展名)

四、如何防止目录遍历攻击



 助你一臂之力

📋问题1:如何快速发现漏洞点的?

🎯编写自动化脚本跑,BP跑

🎯如发现特定框架等,使用特定的目录字典进行跑

🎯特殊字符字典搜集


📋问题2:使用的工具有哪些?

🎯BP必备(爆破跑的时候,HTTP历史记录收集收集)

🎯dirsearch.py、御剑等



一、目录遍历

1、意义

1、目录遍历(也称为文件路径遍历)是一个Web安全漏洞,使得攻击者能够读取运行应用程序的服务器上的任意文件(包括应用程序代码和数据、后端系统的凭据以及敏感的操作系统文件)


2、在某些情况下,攻击者可能能够写入服务器上的任意文件,从而允许他们修改应用程序数据或行为,并最终完全控制服务器




二、通过目录遍历阅读任意文件

1、示例

1、销售商品图像的购物应用程序:
图像通过HTML加载,如
<img src="/loadImage?filename=218.png">


该loadImage图像URL采用filename参数并返回指定文件的内容

映像文件本身存储在磁盘上的位置/var/www/images/。为返回映像,应用程序将请求的文件名附加到此基目录,并使用文件系统API读取文件的内容。

文件路径:/var/www/images/218.png


 

2、攻击者:

如果应用程序未对目录遍历进行防御,请求以下URL,从服务器的文件系统中检索任意文件: 
https://insecure-website.com/loadImage?filename=../../../etc/passwd

这将导致应用程序从以下文件路径读取:
/var/www/images/../../../etc/passwd
(../表示向上一级目录)

Unix的操作系统上:  ../
Windows:         ../ and ..\ 都是有效的目录遍历序列

系统文件:
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini

涉及实验:

实验1:文件路径遍历(简单)



实验1:文件路径遍历(简单)

信息:

需要我们检索/etc/passwd的内容


part1:

随便点开一个博客

(同时抓包)

第三个数据包就带有filename参数进行检索内容,修改filename参数

编辑



part2:

发送到repeater进行分析

../../../etc/passwd

检索出了密码

编辑

在拦截的数据包中修改后取消拦截

编辑

编辑








三、利用文件路径遍历漏洞的常见障碍


1、对于../等的限制

1、将用户输入放置到文件路径中的应用程序实现了某种类型的防御路径遍历攻击,而这些攻击通常可以被绕过

————

2、如果应用程序从用户提供的文件名中剥离或阻止目录遍历序列,那么就有可能使用各种技术绕过防御

如,使用文件系统根目录的绝对路径(filename=/etc/passwd)直接引用文件,而不使用任何遍历序列。

————

涉及实验:

实验2:文件路径遍历(用绝对路径旁路阻止遍历序列)


实验2:文件路径遍历(用绝对路径旁路阻止遍历序列)

信息:

绝对路径/etc/passwd


part1:

点击一个博客

编辑

 第三个数据包的filename参数

编辑


part2:

发到repeater

题目提示的绝对路径/etc/passwd

账号密码回显

编辑

 修改数据包,并关闭拦截

编辑

 编辑





2、嵌套遍历序列

如....// or ....\/ ,当内部序列被剥离时(过滤一遍),它将恢复为简单的遍历序列

————

涉及实验:

实验3:文件路径遍历(非递归地剥离遍历序列)



实验3:文件路径遍历(非递归地剥离遍历序列)

信息:

还是告诉了/etc/passwd


part1:

拦截到第三个数据包

编辑



part2:

发送到repeater

使用嵌套遍历....//....//....//etc/passwd

编辑


数据包修改,并关闭拦截

编辑

 编辑







3、编码绕过

1、除去遍历序列:在某些上下文中,如在URL路径或filename的参数multipart/form-data请求时,Web服务器可能会在将输入传递到应用程序之前去除任何目录遍历序列。

2、编码绕过:有时可以通过URL编码或甚至双URL编码来绕过这种清理,../ 字符,一次编码%2e%2e%2f、二次编码%252e%252e%252f。各种非标准编码,如..%c0%af或..%ef%bc%8f,也可能起到作用

3、工具:BP Intruder提供了一个预定义的负载列表(将GitHub或自己收集的特殊编码导入,观察哪些可以使用),其中包含各种可供尝试的编码路径遍历序列。 


涉及实验:

实验4:文件路径遍历(用多余的URL解码剥离遍历序列)



实验4:文件路径遍历(用多余的URL解码剥离遍历序列)

信息:

还是告诉了/etc/passwd


part1:

拦截到第三个数据包


编辑



part2:

发送到repeater


URL编码一次

编辑

URL编码二次

编辑 使用编码绕过..%252f..%252f..%252fetc/passwd


编辑


数据包修改,并关闭拦截

编辑

 编辑





4、基文件夹开头

要求用户提供的文件名必须以预期的基文件夹开头

如,/var/www/images

需要包括基本文件夹,加上遍历序列:

filename=/var/www/images/../../../etc/passwd


涉及实验:

实验5:文件路径遍历(验证路径起始)



实验5:文件路径遍历(验证路径起始)

信息:

还是告诉了/etc/passwd


part1:

拦截到第四个数据包

编辑




part2:

发送到repeater

带基路径的遍历/var/www/images/../../../etc/passwd

编辑



数据包修改,并关闭拦截

编辑

编辑






5、文件扩展名固定

应用程序要求用户提供的文件名必须以预期的文件扩展名(如.png)结尾,则可以使用空字节在所需扩展名之前有效地终止文件路径,如

filename=../../../etc/passwd%00.png(实战中可能得考虑更多办法,如在hex中改为%0a换行截断等方法)


涉及实验:

实验6:文件路径遍历(空字节旁路验证文件扩展名)


实验6:文件路径遍历(空字节旁路验证文件扩展名)

信息:

还是告诉了/etc/passwd


part1:

拦截到第三个数据包


编辑




part2:

发送到repeater

直接上路径,可能没什么有用报错信息

就得结合场景自己尝试了(原文件为图片,就可能会检测后缀,如果是上传,就可能还会检测文件类型了)

编辑


带上图片的后缀,并空字节截断后缀

../../../etc/passwd%00.png


编辑



数据包修改,并关闭拦截

编辑

编辑





四、如何防止目录遍历攻击

1、防止文件路径遍历漏洞的最有效方法是完全避免将用户提供的输入传递给文件系统API。许多执行此操作的应用程序函数可以重写,以便以更安全的方式提供相同的行为。


2、如果认为将用户提供的输入传递给文件系统API是不可避免的,那么应该同时使用两层防御来防止攻击:

————

(2)白名单(输入前):应用程序应该在处理用户输入之前对其进行验证。理想情况下,验证应该与允许值的白名单进行比较。如果对于所需的功能来说这是不可能的,那么验证应该验证输入是否只包含允许的内容,比如纯字母数字字符。

————

(2)符合路径规范(输入后):验证提供的输入后,应用程序应将输入附加到基目录,并使用平台文件系统API规范化路径。应用程序应验证规范化路径是否从预期的基目录开始。






【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。