0x50 Burpsuite练兵场-目录遍历


这一篇本来是应该介绍HTTP走私的下一章节:如何探查HTTP请求走私漏洞,但是我在做其中一个实验的时候出现了问题,不知道是实验环境本身存在Bug还是我的操作遗漏了关键细节,所以在其官方论坛上提交了一个post,等有回复或者解决了问题后再来更新下一章节吧

就先来介绍下目录遍历(Directory traversal)这一内容吧,先来简单的说一下相关概念,这里的目录遍历不是指我们在信息搜集阶段的路径爆破,而是指攻击者能够通过目录遍历漏洞读取应用程序服务器上的任意文件,包括应用程序代码和数据、后端系统的凭据等敏感系统文件。在某些情况下,攻击者甚至还可以通过这一漏洞,在服务器上写入任意文件,从而允许他们修改应用程序的数据或行为,并最终获得服务器控制权限。

这里举一个具体的例子方便大家理解:有一台运行有Web服务的Linux系统服务器,在该Web服务中,存在一个网页对图像路径的引用为<img src="/loadImage?filename=218.png">,通过loadImage URL对图片进行索引,图片存储在/var/www/images/目录下。当我们访问这一网页时会发送一个GET请求,URL为http://www.host.com/loadImage?filename=218.png。此时,若服务器后台未对文件名进行检测,我们就可以构造恶意payload如../../../../etc/passwd读取服务器中的敏感文件内容并返回,这就构成了一次成功的目录遍历攻击。

../的含义为返回上一目录,/etc/passwd为Linux系统中的特有文件,存储了系统中所有用户的基本信息。而这在Windows系统中有所不同,../..\ 都可以用于实现返回上一目录这一目的,而相对应可用的文件路径有例如..\..\..\windows\win.ini等,更多相关的敏感文件路径可以参阅扩展阅读中的链接

实验内容

实验一:简单的目录遍历漏洞

实验提示:这一实验环境中的页面在图像引用中存在目录遍历漏洞

实验要求:通过目录遍历漏洞获取 /etc/passwd文件内容

在这里插入图片描述

因为漏洞存在于图片的引用当中,所以要注意筛选条件的设置,如下图为相关访问流量

在这里插入图片描述

任意选择一条信息流发送到Repeater模块,进行目录遍历尝试

在这里插入图片描述

通过添加多个../即可成功获取到/etc/passwd文件内容,,完成实验。因为命令执行原理,这里所使用的../数量是不限的,但是不能过少,这样可能无法到达根路径

实验二:使用绝对绕过路径遍历保护

实验提示:这一实验环境中的页面在图像引用中存在目录遍历漏洞,虽然后台拒绝了绝对路径的使用,但是将提交的文件名视为相对于默认工作目录的文件名

实验要求:通过目录遍历漏洞获取 /etc/passwd文件内容

在这里插入图片描述

还是一样发送到Repeater模块进行相关操作,根据提示可以使用绝对路径绕过防护

在这里插入图片描述

使用payload/etc/passwd完成实验

实验三:未进行递归过滤路径符

实验提示:实验环境中的页面在图像引用中存在目录遍历漏洞,且会过滤用户提交数据中的路径符

实验要求:通过目录遍历漏洞获取 /etc/passwd文件内容

在这里插入图片描述

这个提示简单的说就是web应用后台会对用户提交的路径进行处理,尝试去除../这样的内容,但是由于考虑不周(比如仅进行一次判断是否存在../并去除而未进行多次递归),往往可以采取措施进行绕过,例如使用 ....// 或者 ....\/

同样监控通信流,并发送到Repeater模块进行处理

在这里插入图片描述

使用payload ....//....//....//etc/passwd成功绕过,完成实验

实验四:通过编码进行绕过

实验提示:实验环境中的页面在图像引用中存在目录遍历漏洞,且会阻断包含有路径遍历的用户输入,并会在使用前进行解码

实验要求:通过目录遍历漏洞获取 /etc/passwd文件内容

在这里插入图片描述

根据实验提示,我们可以使用编码后的payload对保护机制进行绕过

在这里插入图片描述

使用的payload为 ..%252f..%252f..%252fetc/passwd

除了这里使用的编码,还有许多其他编码方式也可以被用于绕过此保护措施,这里列举了一些编码方式

普通URL编码

. = %2e
/ = %2f
\ = %5c

双重URL编码

. = %252e
/ = %252f
\ = %255c

Unicode编码

. = %u002e
/ = %u2215
\ = %u2216

UTF-8  Unicode编码

. = %c0%2e, %e0%40%ae, %c0ae
/ = %c0%af, %e0%80%af, %c0%2f
\ = %c0%5c, %c0%80%5c

关于为什么%C0%AF这类编码可以被用于目录遍历,可以看这个回答,因为太长了就不进行翻译了。简单的讲就是%C0%AF/的非法UTF-8编码,但是由于不同的具体实现导致在某些情况下其仍能被成功解码并被用于绕过常见的目录遍历防范措施。

实验五:检测路径开头的保护机制

实验提示:实验环境中的页面在图像引用中存在目录遍历漏洞,且会检测路径的开头是否为预期值

实验要求:通过目录遍历漏洞获取 /etc/passwd文件内容

程序后台会检测路径开头,那我们只需保证路径开头正确,更改后续内容即可绕过保护机制

使用payload /var/www/images/../../../etc/passwd

在这里插入图片描述

完成实验

实验六:通过零截断绕过保护机制

实验提示:实验环境中的页面在图像引用中存在目录遍历漏洞,且会检测文件扩展名是否为预期值

实验要求:通过目录遍历漏洞获取 /etc/passwd文件内容

在这里插入图片描述

后台程序会对扩展名进行检测,那么我们需要在附加扩展名的同时使得文件内容能够成功返回

这里利用了一个零截断技术,由于Web应用程序使用的API允许字符串中包含空字符,但当实际获取文件名时系统API会直接截断导致成功绕过保护措施

在这里插入图片描述

使用payload ../../../etc/passwd%00.jpg成功完成实验

总结


目录遍历漏洞背后原理并不复杂,但是造成的危害还是不小的,主要的防范措施有以下几种:

  • 尽量避免将用户提交的输入传递到文件系统API中
  • 在接受参数前做好验证,使用白名单策略
  • 验证参数后,应将其追加到基本目录并做好路径规范化
  • 使用适当的文件系统访问权限

关于自动利用工具可以使用Kali自带的dotdotpwn,贴两个链接,就不作拓展介绍了

扩展阅读


这里有一堆payload合集,各位可以自行挑选使用

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐