WebGoat的Authentication Bypasses关卡源码解析

在这里插入图片描述
在做这一道题的时候发现当我们把两个变量从命名后就可以bypass了,如下图所示
在这里插入图片描述
但是不知道原理是什么,所以从github下载源码,来审计一下。
https://github.com/WebGoat/WebGoat/releases/tag/v8.2.1
在这里插入图片描述
定位到该模块的位置,第一个是账号验证功能模块,第三个是验证账号模块,我们打开第三个,定位到收到请求后的响应模块
在这里插入图片描述
首先创建了AccountVerificationHelper对象,接下来调用了parseSecQuestions方法
在这里插入图片描述
可以看到parseSecQuestions方法主要是提取请求参数中包含secQuestion的参数名,并把该参数名做为键,参数名的值作为值,然后返回。HashMap是散列表,由键和值组成,具体参考下方链接
https://www.runoob.com/java/java-hashmap.html

在这里插入图片描述
接下来到了第一个if,为条件为true的话就faile了
在这里插入图片描述

条件调用了AccountVerificationHelper的didUserLikelylCheat方法,所以我们定位到该模块
在这里插入图片描述
该模块所调用的参数
在这里插入图片描述
可以看到该模块的主要功能是判断传入的HashMap是否和userSecQuestions的键值对数量一致,并且键值也是否一致,是的话为true,否为false。可以看到第一个if的主要功能是防止暴力破解。
接下来看第二个if,可以看到我们要使条件为true
在这里插入图片描述
条件调用了AccountVerificationHelper的verifyAccount的方法
在这里插入图片描述
该方法有三个if,第一个if判断键值数量是否同userSecQuestions相同,第二个if判断当键secQuestion0存在时其值是否和userSecQuestions的一致,第三个if判断当键secQuestion1存在时其值是否和userSecQuestions的一致,但是它三个if为false时,它返回是true,这也导致漏洞的产生。
那么我问一下,我们发出请求的secQuestion0,secQuestion1是否可以随意重命名呢?

答案是不行的,如果随意重命名parseSecQuestions方法就提取不到键值了,变量必须包含secQuestion
在这里插入图片描述
最后,现实中真有重置密码功能像verifyAccount这么写的吗

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值