目录遍历攻击(下)

admin 2022年6月29日12:24:52评论280 views字数 2279阅读7分35秒阅读模式

在本节中,将会解释什么是目录遍历,并通过靶机试验描述如何进行路径遍历攻击和规避常见的障碍。

 


目录遍历中常见的绕过机制

在某些情况下,例如在URL路径或multipart/form-data请求的文件名参数中,应用服务器可能会将传递文件名进行过滤,剥离所有的目录遍历序列。这个时候我们就需要通过URL编码,甚至是双URL编码来绕过这种防御机制。

单编码:../编码为%2e%2e%2f

双编码:再对%2e%2e%2f编码为%252e%252e%252f

或者是各种非标准编码,也可以解决问题,例如:

..%c0%af

..%ef%bc%8f

BurpSuite中,Burp Intruder提供了一个预定义的有效载荷列表(Fuzzing-path traversal),其中包含各种编码的路径遍历序列。

如果应用程序要求提供的文件名必须以预期的基本文件夹开头,则可以包含所需的基本文件夹,然后是合适的遍历序列。

例如,要求以/var/www/images开头:

目录遍历攻击(下)

 

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

例如,要求以.png结尾:

目录遍历攻击(下)

 

场景试验-利用URL编码绕过遍历序列防护:

https://portswigger.net/web-security/file-path-traversal/lab-simple

场景说明:

这个场景在图像显示中包含文件路径遍历漏洞,应用程序阻止包含路径遍历序列的输入,但在执行输入之前会对输入进行URL解码。

试验目的:

要完成这个试验,需要检索/etc/passwd文件的内容。

攻击过程:

由于不知道防御机制到底会过滤哪些组合,因此先用Intruder自动化打一波,看看哪些能进去,发送一个图像请求到Intruder进行配置,在Positions选项卡设置攻击变量

目录遍历攻击(下)

 

Payloads选项卡中,选择字典,随后进行攻击

目录遍历攻击(下)

 

从结果可以看到,服务器对%2e(表示.)和%252f(双编码表示/)没有过滤

目录遍历攻击(下)

 

接下来发送个请求到Repeater,改造下Payload,因为根据前几个试验知道基本都是返回三层目录,因此直接从返回三层开始测试,攻击成功,完成试验。

%2e%2e%252f%2e%2e%252f%2e%2e%252fetc/passwd

目录遍历攻击(下)

 

试验小结:

在有些场景下,因为不知道服务器具体会过滤哪些组合,所以可能要通过反复尝试不同的编码来看哪些编码可以绕过服务器的防护。

 

场景试验-绕过路径开始验证:

https://portswigger.net/web-security/file-path-traversal/lab-validate-start-of-path

场景说明:

这个场景在图像显示中包含文件路径遍历漏洞,应用程序通过请求参数传输完整的文件路径,并验证提供的路径是否以预期的文件夹开头。

试验目的:

要完成这个试验,需要检索/etc/passwd文件的内容。

攻击过程:

这个试验也相当简单,打开页面后抓包就能看到,在请求图片时是完整的路径,把这个请求发送到Repeater

目录遍历攻击(下)

 

改造Payload,保留前面目录的路径,在其后面添加遍历序列返回上一级目录,发送后即可完成试验

/var/www/images/../../../etc/passwd

目录遍历攻击(下)

 

试验小结:

这种场景基本上也只存在于试验中,一般服务器很少会把自己的直接路径暴露出来,风险非常大。

 

场景试验-通过空字节绕过文件扩展名的验证:

https://portswigger.net/web-security/file-path-traversal/lab-validate-file-extension-null-byte-bypass

场景说明:

这个场景在图像显示中包含文件路径遍历漏洞,应用程序会验证提供的文件名是否以预期的文件扩展名结尾。

试验目的:

要完成这个试验,需要检索/etc/passwd文件的内容。

攻击过程:

这个试验也不复杂,抓包能看到文件后缀是jpg,把这个请求发送到Repeater

目录遍历攻击(下)

 

改造Payload,通过将空格URL编码成%00来中断后缀,发送后即可完成试验

../../../etc/passwd%00.jpg

目录遍历攻击(下)

 

试验小结:

这个场景的漏洞利用实现也比较简单,只是通过这种场景来讲解下类似绕过的思路,一般实际环境会比这些更复杂。

 


如何防止目录遍历攻击

防止目录遍历漏洞最有效的方式是完全避免将用户提供的输入传递给文件系统的API,可以重写许多执行此操作的功能,以更安全的方式提供相同的行为。

如果将用户提供的输入传递给文件系统API是不可避免的,则应该结合两层防御来防止攻击:

●应用程序应在处理用户输入之前对其进行验证,最理想的情况下,应该采用白名单比对方式。如果所需功能无法做到这一点,则应验证输入是否仅包含允许的内容,例如纯字母数字字符。

●对输入进行验证后,应用程序应将输入附加到基本目录并使用平台文件系统API来规范路径,应该验证路径是否以预期的基本目录开头。

下面这个是简单JAVA代码示例,用于根据用户输入验证文件的规范路径:

目录遍历攻击(下)


目录遍历攻击(下)

身份验证漏洞-多因素身份验证中的漏洞(上)
身份验证漏洞-基于密码的登录漏洞(上)

身份验证漏洞-概念梳理

SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-HTTP请求隧道(上)
HTTP高级请求走私-CRLF的利用(上
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞-密码重置投毒
HTTP Host头漏洞攻击-概念梳理


原文始发于微信公众号(H君网安白话):目录遍历攻击(下)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月29日12:24:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   目录遍历攻击(下)http://cn-sec.com/archives/1142315.html

发表评论

匿名网友 填写信息