WebGoat_身份认证绕过
2024-2-22 13:41:42 Author: www.freebuf.com(查看原文) 阅读量:7 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

通关过程

输入错误的答案,错误回显。

抓包修改,将secQuestion0字段名和secQuestion1字段名修改为secQuestion3secQuestion4

发包发现成功绕过身份验证,可以修改密码了。

代码分析

前端文件路径:BOOT-INF/classes/lessons/authbypass/html/AuthBypass.html

后端文件路径:BOOT-INF/classes/org/owasp/webgoat/lessons/authbypass/VerifyAccount.class

第一行,接收数据,可以观察前面请求数据包知道传进来的数据是什么

第二行的AccountVerificationHelper不知道是什么,跟踪一下看是什么

跳转文件:BOOT-INF/classes/org/owasp/webgoat/lessons/authbypass/AccountVerificationHelper.class

该文件中,初始化了答案。

返回到VerifyAccount.class中继续向下看

第三行调用了当前文件中的方法,将请求数据包中带有secQuestion字符串的字段名,将其字段名以及值用hash表的形式进行存放。

后面进行条件判断语句,第一个判断函数为上图:

如果请求数据包中带有secQuestion字符串的字段数量与设定的答案中的数量一致则返回true

然后再判断①、是否存在secQuestion0字段;②、secQuestion0字段的值与答案设置是否一致;③、是否存在secQuestion1字段;④secQuestion1字段的值与答案设置是否一致,四个条件是否同时成立,成立返回true,否则为false

此时请求数据包中带有secQuestion字符串的字段数量确实和答案中设置的数量一致,但是我们没有secQuestion0字段和secQuestion1字段,所以该函数返回false

进入第二个判断,函数如上图:

同样先是判断数量是否不相同,此时数量相同不进入该判断,然后判断请求数据包中是否存在secQuestion0字段和secQuestion0字段的值与答案设置是否不一致(注意有一个!),那么此时请求数据包中不存在secQuestion0字段,所以不进入该判断,进入最后的else,返回值为(不存在secQuestion1字段)或者secQuestion1字段的值与答案设置是否一致,虽然后一个条件的结果为否,但是此处为或关系,前一个条件为真,则整个语句结果为真,所以此处返回真。

所以进入第二个判断,并返回验证成功页面。


文章来源: https://www.freebuf.com/articles/web/392296.html
如有侵权请联系:admin#unsafe.sh