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

WEBGOAT.2.2 Path traversal

原创
作者头像
用户8478947
发布2022-09-12 18:09:19
8140
发布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,查看源码。

image-20220910165832017
image-20220910165832017

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

image-20220910170446666
image-20220910170446666
过关

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

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

image-20220910165132015
image-20220910165132015
image-20220910165320682
image-20220910165320682

0x3.Path traversal while uploading files 2

源码

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

image-20220910171112531
image-20220910171112531
过关

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

image-20220910171006329
image-20220910171006329

0x4.Path traversal while uploading files 3

源码

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

image-20220910173150869
image-20220910173150869

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

image-20220910173429660
image-20220910173429660

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

image-20220910174051969
image-20220910174051969

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

过关

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

image-20220910202938652
image-20220910202938652

0x5.Retrieving other files with a path traversal

源码
过关

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

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

image-20220910220535962
image-20220910220535962

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

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

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

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

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

image-20220910221438513
image-20220910221438513
image-20220910221508213
image-20220910221508213

后面三页设计到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.
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档