WebGoat代码审计-06-有缺陷的访问控制
Drunkbaby Lv6

WebGoat代码审计-06-有缺陷的访问控制

WebGoat代码审计 06 有缺陷的访问控制

0x01 前言

这段前言是不得不写咯 ~

这篇文章也比较简单,源代码的问题基本都是逻辑漏洞

这一篇的名为 **”有缺陷的访问控制”**,英文被称作 **”Broken Access Control”**。这一块如果总得来说非常复杂,水平提权,垂直提权,业务逻辑漏洞,身份认证,氦,我感觉太杂了。所以这一块的总结,个人或许讲解的不会很好。

而这一块在 WebGoat 当中也被分为两个部分,不安全的直接引用,缺少功能级别的访问控制。

自己日后也要做一个类似于 WebGoat 的靶场,所以自己思考地比较多。

0x02 Insecure Direct Object References

1. 直接对象引用,Direct Object References 是什么

  • 直接对象引用是指应用程序使用客户端提供的输入进行访问。

    例子

使用 GET 方法的直接对象引用示例可能如下所示

1
2
3
https://some.company.tld/dor?id=12345
https://some.company.tld/images?img=12345
https://some.company.tld/dor/12345

而不安全的直接引用,呃,就是越权查看而已,我不太懂为什么要吹的这么 cjb。

2. IDOR PageLesson2 简单登录

题目部分

直接以 username = tom 以及 password = cat 登陆即可,只是为了后续的做题更加顺利而已,没什么用。但是这里我们可以去看一看源码,看一看是怎么实现登录的。毕竟为自己以后的开发做铺垫。

源码部分

文件:IDORLogin.java

首先是数据库,并没有连接数据库,而是使用 HashMap

下面的登录阶段进行了强判断,主要是 username 与 password 的判断

1
if ("tom".equals(username) && idorUserInfo.get("tom").get("password").equals(password))

3. IDOR PageLesson3

题目部分

也没啥好说的,就比对了一下前端界面的 Profile 与 Burpsuite 发包之后的 Response 回应即可,发现多出来了 Userid 与 role。

在框中提交即可

源码部分

文件:IDORDiffAttributes.java

  • 比较简单,也是进行了呆笨的判断。

4. IDOR PageLesson4 越权查看

这种越权查看其实是我个人工作的时候遇到最多的。

题目界面

题目让我们直接越权查看信息,呃就挺简单的。

  • 在框中输入 WebGoat/IDOR/profile/2342384 即可。
  • 这就是最常见的越权查看,基本上的程序,如果开发者没有安全意识的话,是最容易造成的漏洞,一般我自己挖洞也会去尝试。并且这最后的参数 23422384 可以进行爆破,能够爆破更多的消息。

源码界面

文件:IDORViewOwnProfileAltUrl.java

判断还是比较简单与呆笨的

5. IDOR PageLesson5 越权查看他人信息

题目界面分两个部分

  • 越权查看他人信息
  • 越权编写他人信息
  • 题目让我们越权查看他人的消息

那么就按照我上题来攻击,爆破 userid

经过爆破,找到 userid 为 2342388

如果是要提交 src 的话,就需要这种越权查看的一起提交上去,也是替换 userid 即可。

0x03 Missing Function Level Access Control

  • 个人觉得这其实不太算访问控制吧,见到可见和非可见的消息。

1. Missing Function Level Access Control PageLesson2

题目界面

  • 要求找到两个藏起来的菜单项

f12 一下,在 Admin 附近找到了两个 href,分别是 users 与 config;输入即可。提交的话首字母要大写,避坑 ~

源码部分

文件:MissingFunctionACHiddenMenus.java

  • 简单的强判断

1. Missing Function Level Access Control PageLesson3

题意:找到自己的 Hash 并提交

题目界面

我们发现个人信息的界面是在 /Users 接口下,尝试访问 /Users 接口。

访问 /Users 接口之后居然返回 500 了;有点懵逼,因为再怎么说服务器端那边也不可能出问题吧。后来才知道要修改 Content-Type 为 application/json 才可以。

提交自己的 Hash 即可。

源码界面

文件:MissingFunctionACUsers.javaMissingFunctionACYourHash.java

  • 将所有用户列出,此时需要 Content-Type 为 application/json
  • 判断的语句

不算很难吧,但是自己开发起来想想就累

0x04 小结

怎么说呢,总的来说还是给我一种逻辑方面的问题,自己早些时候敲代码也被学长说过,逻辑太差。基本上就是乱敲,而且不考虑安全问题。

 评论