前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WEBGOAT.2.2 Path traversal

WEBGOAT.2.2 Path traversal

原创
作者头像
用户8478947
发布2022-09-12 18:09:19
8850
发布2022-09-12 18:09:19
举报
文章被收录于专栏:安全学习

0x1.Path traversal

路径(目录)遍历是一个漏洞,攻击者可以访问或存储应用程序运行位置之外的文件和目录。这可能导致从其他目录读取文件,并且在文件上传的情况下覆盖关键系统文件。

例如,假设我们有一个托管一些文件的应用程序,可以按以下格式请求它们:http://example.com/file=report.pdf现在,作为一名攻击者,您当然对其他文件感兴趣,所以您可以尝试http://example.com/file=../../../../../etc/passwd.在本例中,您尝试走到文件系统的根目录,然后进入/etc/passwd以访问该文件。../被称为点对点斜杠,这是该攻击的另一个名称。

当然,这是一个非常简单的示例,在大多数情况下,框架实现的控件不适用于此,因此我们需要更具创造性,在请求发送到服务器之前开始编码。例如,如果我们对../进行URL编码,您将得到%2e%2e%2f,接收此请求的web服务器将再次将其解码为../。

还请注意,避免应用程序过滤这些编码,双重编码也可能起作用。在系统a调用系统B的情况下,可能需要双重编码。系统a将仅解码一次,并使用仍然编码的URL调用B。

0x2.Path traversal while uploading files 1

源码

抓包,得到URI是PathTraversal/profile-upload,查看源码。

进入到父类的execute方法中,发现没有对用户上传的文件名进行检测,造成了目录遍历漏洞。

过关

题目要求我们把图片上传到C:\Users\chang/.webgoat-@project.version@/PathTraversal/chang123里,但是直接上传的时候发现上传到的位置是C:\Users\chang/.webgoat-@project.version@/PathTraversal/chang123/test

提交图片的时候进行抓包,然后在fullname里修改上传图片后的名字为../test.jpeg再进行发送即可。

0x3.Path traversal while uploading files 2

源码

发现在上一关的基础上进行了对../的静态过滤处理,因此我们可以使用双写进行绕过。

过关

本关基于上一关,对文件名中的../进行了过滤。因此我们需要考虑绕过。既然提示了对../的过滤,那么我们可以使用双写进行绕过。

0x4.Path traversal while uploading files 3

源码

抓包,URI是PathTraversal/profile-upload-remove-user-input,查看源码,发现对文件的名字进行了处理,因此需要进入里面看是怎么处理的。这里需要注意下,他这里是读取文件名不是像前两关的一样直接使用fullName的。

发现有多个实现了getOriginalFilename接口的方法,一个个看,发现只有CommonsMultipartFile类是进行处理的,因此下面就分析该类,因为另外两个没有做然后处理就不分析了。

发现对文件名进行了正反斜杠的检测,如果文件名字存在正反斜杆就需要对上传后的文件名进行重命名;如果没有正方斜杆就还是原来的文件名。

但是我还是无法确定实际上用的是那个类,因为不能根据是否做了处理就来判断的,还是不严谨。

过关

由于不是对fullName来进行上传后文件的命名的,因此我们只能从filename来进行处理。把filename的值添加../在进行提交,就能够绕过成功了。

0x5.Retrieving other files with a path traversal

源码
过关

路径遍历不限于文件上传。在检索文件时,也可能存在路径遍历可以从系统检索其他文件的情况。本关要求查找名为path-traversal-secret.jpg的文件。

实现点击Show random cat picture抓包,可以发现请求的时候是没有任何参数的,但是响应的时候发现Location里居然出现了一个id参数。

于是就尝试在random-picture添加参数id。发现能够正常显示了一张图片。

代码语言:javascript
复制
/WebGoat/PathTraversal/random-picture?id=1

于是使用../来组合path-traversal-secret来遍历查找。需要注意的是,由于是使用GET方式请求的,所以需要对../进行编码处理,即为%2e%2e%2f

代码语言:javascript
复制
%2e%2e%2f%2e%2e%2fpath-traversal-secret
===
../../path-traversal-secret

根据返回的提示说明用户的SHA-512就是答案,因此去加密。

后面三页设计到Zip Slip vulnerability,目前了解不是很多,因此先放着。

0x6.Zip Slip vulnerability

讲了个zip文件的漏洞,可以在提取zip文件时覆盖ls命令。一旦该命令被替换为一些额外的恶意操作,每次用户在ls中键入时,您可以在向用户显示真正的命令之前向服务器发送列表结果。因此,您最终会执行远程命令。

有问题的代码
代码语言:javascript
复制
File destinationDir = new File("/tmp/zip");
Enumeration<? extends ZipEntry> entries = zip.entries();
while (entries.hasMoreElements()) {
  ZipEntry e = entries.nextElement();
  File f = new File(destinationDir, e.getName());
  InputStream is = zip.getInputStream(e);
  IOUtils.copy(is, write(f));
}

但如果上传了包含orders.csv的zip文件,orders.csv内容是:

代码语言:javascript
复制
../../../../../../../tmp/evil.sh

一旦使用上面的代码提取zip文件,该文件将保存在/tmp/evil.sh中。

0x7.

0x8.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x1.Path traversal
  • 0x2.Path traversal while uploading files 1
    • 源码
      • 过关
      • 0x3.Path traversal while uploading files 2
        • 源码
          • 过关
          • 0x4.Path traversal while uploading files 3
            • 源码
              • 过关
              • 0x5.Retrieving other files with a path traversal
                • 源码
                  • 过关
                  • 后面三页设计到Zip Slip vulnerability,目前了解不是很多,因此先放着。
                  • 0x6.Zip Slip vulnerability
                    • 有问题的代码
                    • 0x7.
                    • 0x8.
                    相关产品与服务
                    云服务器
                    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档