此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
在我们之前的文章中,我们详细解释了本地文件包含攻击,我建议,在深入了解本节中实现的路径遍历漏洞之前,请重新阅读我们之前的文章以更好地理解。
今天,在本文中,我们将探讨最严重的漏洞之一,当开发人员未验证 Web 应用程序中的包含功能时,就会出现这种漏洞,从而允许攻击者从服务器读取和访问任何敏感文件。
介绍
路径遍历有时也称为“目录遍历”,是一种 HTTP 漏洞,允许攻击者欺骗和操纵 Web 应用程序的 URL,以访问位于应用程序根文件夹之外的文件或目录。当开发人员在其 Web 应用程序中包含图像、静态文本、代码等文件时未能建立或管理输入验证时,就会出现此漏洞。
然而,在这种攻击中,攻击者通过输入点-点-斜杠(../ )序列或类似的变体来操纵 Web 应用程序输入字段,以绕过网页并访问所需的系统文件。
因此,此漏洞被报告为“高危漏洞,CVSS 评分为 7.3”:
- CWE-22: “将路径名不正确地限制在受限目录中(‘路径遍历’)”
- CWE-35: “路径遍历:'…/…//'”
- CWE 73: “目录遍历”
- CWE-200: “向未经授权的行为者泄露敏感信息”
让我们检查一下这种情况,并了解攻击者如何通过获取服务器的敏感文件来破坏 Web 应用程序。
在这里,用户通过 Web 应用程序的 URL(即http://abc.com/file=index.php)调用文件 – index.php 。因此,应用程序处理 URL 并调用本地存在于服务器文件夹“RAJ”中的index.php(即“ /var/www/html/RAJ”)。
开发人员使用“include”功能作为“file=”,目的很简单,就是管理用户选择的输入文件,这样应用程序就可以直接从本地服务器调用它。现在攻击者尝试使用点-点-斜杠序列操纵 URL,如http://abc.com/file=../../../../etc/passwd,以检索服务器密码文件的内容。
因此,应用程序将再次处理它并读取/var/www/html/RAJ/../../../../etc/passwd处的文件。每个“../”代表 – 返回父目录,因此如果我们调用“../”四次,它将把我们放在“根”目录中,从那里我们可以简单地以etc/passwd 的形式访问密码文件。
Linux 服务器 Path_Traversal 漏洞利用
现在让我们尝试在一些真实场景中实现这一点,并检查不同的攻击序列,而不仅仅是点-点-斜线。
为此,我将使用两个不同的平台:Portswigger Academy和包含路径遍历漏洞的DVWA 。
基本路径遍历
登录PortSwigger 学院并下拉到目录遍历进入其实验室,选择第一个实验室作为“文件路径遍历,简单情况”,然后点击“访问实验室”按钮。
现在您将被重定向到一个电子商务网站,该网站目录中有几种产品,并且存在路径遍历漏洞。
进一步说,我打开了一个产品并通过简单的右键单击来查看其显示图像。
现在是时候检查我们可以操纵什么了。
调整您的 burp 套件以捕获正在进行的HTTP 请求并与Repeater共享所有内容。
filename=../../../etc/passwd
阻塞的遍历序列
在某些情况下,开发人员会结束遍历过程,即在这种情况下点-点-斜线或任何后续序列将不起作用。
在进入第二个实验室时,我遇到了同样的问题,即“ ../ ”序列不起作用,我无法捕获密码文件。因此,让我们尝试在 burpsuite 监视器中再次捕获此请求。
由于我们被“../”序列挡住了。让我们尝试输入没有任何前置值的/etc/passwd。
太棒了!这招管用,我们通过直接调用获得了密码文件。
经过验证的路径遍历
许多开发人员会验证他们的 Web 应用程序,如果URL 中包含“../”,则会被拒绝。因此,当我们在下一个实验中尝试上述两种程序时,我们被拒绝了,没有抓取任何东西。
因此,我们在 burpsuite 中捕获HTTP 请求并将其遍历到Repeater。
太棒了!从上图可以看出,我们再次使用这种不寻常的技术捕获了密码文件。
当我们跳过第4个实验室时,我们得到了这个,开发人员已经进行了验证,阻止了包含路径遍历序列的输入。
filename=..%252f..%252f..%252fetc/passwd
URL 中的路径披露
如果您知道为了捕获您想要的文件需要执行的后退步骤数,那不是很好吗?
路径泄露是一种漏洞,其中 URL 提供了其包含的文件的完整路径,从而允许攻击者简单地操纵 URL 并毫不费力地访问系统文件。
当我们进一步进入实验室5 时,我们遇到了一个为我们提供文件完整路径的应用程序。
我们只是捕获了该请求并将其发送到中继器。从下图中,你可以看到 filename 参数的值为“/var/www/images/21.jpg”。这意味着文件“21.jpg”位于images目录中,而根目录距离我们只有3 步之遥。
现在我们知道了进入密码文件需要执行多少后退步骤,因此我们将这样做
filename-/var/www/images/../../../etc/passwd
空字节旁路
许多开发人员在所需变量被包含之前,在其代码末尾添加一个“.php”扩展名。
因此,Web 服务器将/etc/passwd解释为/etc/passwd.php,因此我们无法访问该文件。为了删除这个“.php”,我们尝试使用空字节字符 (%00) 终止变量,这将强制 php 服务器在解释后立即忽略其后的所有内容。
一旦我们将捕获的请求分享到中继器,我们就会尝试消除这个空字节字符,如上所述。
因此,从下图中,您可以看到我们再次通过在 URL 中添加 (%00) 来捕获密码文件:
filename=../../../etc/passwd%00.jpg
Windows Server Path_Traversal 漏洞利用
我们不一定每次遇到在 Linux 服务器上运行的应用程序时都会遇到这种情况,因此我们可能运气不佳,只能使用 Windows 服务器。让我们了解在这种情况下可以使用的不同序列和方法。
基本路径遍历
我正在我的Windows 机器上设置DVWA 。
让我们以“admin: password”的身份启动DVWA应用程序,安全级别为“低”。然后,从左侧面板中选择漏洞为文件包含。
一旦我们选择这个,我们将被重定向到存在path_traversal 漏洞的网页。
我们通过burpsuite捕获这个请求,看看能得到什么。
从上图可以看出,file.php包含在page参数中。让我们将这一切分享给中继器,并尝试使用此输入字段。
为了在 Web 应用程序屏幕上调用Windows 文件,请使用以下输入来操作页面参数。
page=C:/Windows/win.ini
从上图可以看出,我们已成功在响应选项卡中调用该文件。现在转发此请求并在应用程序的屏幕上检查结果。
双点与正反斜杠
无论应用程序托管在 Linux 还是 Windows 服务器上,开发人员都会验证他们的 Web 应用程序。在这里,为了保证应用程序免受路径遍历攻击,开发人员会屏蔽一些序列,例如“../”,这样如果在 URL 中输入这些序列,就会自动被拒绝。
提高DVWA的安全级别,设置为“中”。在burpsuite上捕获请求,并将所有内容直接发送到转发器。
从下图中你可以看到,我们通过双点加 斜杠成功绕过了这一验证,并再次获取了“win.ini ”文件:
page=…./..../..../..../..../Windows/win.ini
使用类似的序列,你甚至可以捕获 Windows 系统中存在的其他文件。从下图中你可以看到,我通过简单地操作 URL 参数,获取了一个标志,即fi.php ,它位于可破解文件夹中:
page=…./..../hackable/flags/fi.php
阻塞的遍历序列
在很多情况下,这些条件不起作用,即开发人员验证并阻止他所能验证和阻止的所有可能的序列。
让我们找到另一种可能的方法来获取“win.ini”文件,而不涉及常用的序列。
再次选择安全选项,并在DVWA应用程序中使用高安全性。返回文件包含部分并在 burpsuite 中捕获请求。
将 HTTP 请求共享到转发器选项卡并使用以下命令操作 URL 页面参数:
page=file://C:/Windows/win.ini
从下图中您可以看到,我们通过在 URL 参数中输入完整路径来捕获“win.ini”文件。
现在让我们尝试使用相同的程序来捕获标志:
page=file://C:/xampphtdocsdvwahackableflagsfi.php
太棒了!!我们也拿到了这个可破解的 flag 。
缓解步骤
- 开发人员应该创建一个他想要包含的所有文件的白名单,以限制攻击者的控制。
- 在可用的最新版本的 Web 服务器中开发或运行代码。Web 应用程序甚至应该以最小的权限实现。
- 排除目录分隔符“/”,以防止 Web 应用程序受到目录遍历攻击
原文始发于微信公众号(三沐数安):路径遍历综合指南
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论