Java代码审计安全篇-目录穿越漏洞

前言:

 堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油

注意:

本文章参考qax的网络安全java代码审计,记录自己的学习过程,还希望各位博主 师傅 大佬 勿喷,还希望大家指出错误

目录穿越漏洞

概念:

      目录遍历Directory traversal(也称文件路径遍历、目录穿越、路径遍历、路径穿越)是一种允许攻击者在未授权的状态下读取应用服务上任意文件的安全漏洞。这包括应用代码、数据、凭证以及操作系统的敏感文件。在有些情况下,攻击者还可能对服务器里的文件进行任意写入,更改应用数据甚至完全控制服务器。 

原因:

       程序系统在实现上没有过滤用户输入的../之类的目录跳转符,允许攻击者通过提交目录跳转符来遍历服务器上的任意文件。 比如:http://www.test.com/index.php?file=image1.jpg 当服务器处理传送过来的image1.jpg文件名后,Web应用程序会自动添加完整的路径,比如:c://test/static/imgs/image1.jpg,然后web系统将读取的内容返回给攻击者。 若对文件名称的安全性验证不足,攻击者会使用../../../ect/passwd的文件名,将会导致访问非授权文件资源。 

 我们直接进入平台 测试

我们随意上传一张图片 得到文件的当前路径

然后文件的最后一个地址为FUll Name ,

我们直接测试修改为../wenda进行目录穿越试试发现存在漏洞

我们查看源代码进行审计(部分截取)

  private void assignment1() throws IOException {
    MatcherAssert.assertThat(
        RestAssured.given()
            .when()
            .relaxedHTTPSValidation()
            .cookie("JSESSIONID", getWebGoatCookie())
            .multiPart("uploadedFile", "test.jpg", Files.readAllBytes(fileToUpload.toPath()))
            .param("fullName", "../John Doe")
            .post(url("PathTraversal/profile-upload"))
            .then()
            .statusCode(200)
            .extract()
            .path("lessonCompleted"),
        CoreMatchers.is(true));
  }

我们根据下面这几行就可以得知 

multiPart("uploadedFile", "test.jpg", Files.readAllBytes(fileToUpload.toPath()))
 

它将名为 "test.jpg" 的文件作为 "uploadedFile" 字段的值进行上传。 这就是文件上传的逻辑

.param("fullName", "../John Doe")

这一部分是提交参数的逻辑。它将名为 "fullName" 的字段设置为 "../John Doe"。也就是上面的Pull Name,这是一个潜在的路径遍历漏洞。使用 "../" 这样的相对路径可以尝试绕过文件系统的限制,访问到非预期的目录或文件。 

其实就是说传入的文件获得当前路径的时候没有进行任何过滤,而且该当前地址的最后为PullName,所以就直接../目录穿越成功,通过这个就可以获得敏感信息,下载任意文件等重大漏洞危害

漏洞修复

  1. 关闭远程包含参数开关,彻底切断这个业务相比较
  2. 设置类似白名单的方法,筛选固定文件名
  3. 常见目录穿越字符进行过滤,如(./ …/ …\等)
  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W3nd4L0v3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值