JAVA代码审计06: WEBGOAT 认证缺陷(下)

0x00 前言

书接上回~

0x01 Password Reset

Security questions

这题告诉了我们webgoat用户的安全问题,让我们找回别的用户tom或者admin

image-20201112145629303

一开始还以为这里存在什么逻辑问题结果一看发现,其实这题就是爆破,爆破颜色就行了

image-20201112145714225

Creating the password reset link

说实话这道题目还是蛮有意思的,这里由于要用到邮件系统,所以我还需要打开webwolf,这是webgoat自带的邮件系统

我们来看一下题目的意思,题目这里要求我们重置tom的密码,然后以tom的用户身份登录进去

image-20201112155615621

参考链接:https://pvxs.medium.com/webgoat-password-reset-6-634ea940e0e9 (挂梯子)

我这里还是直接查看源码看一下可能存在的漏洞点在哪里

我们首先进行密码的重置看一下请求,然后后端直接进行一个搜索

image-20201112155823343

定位到如下文件

我们看到我们红框的那行代码,可以发现后端获取了我们请求头中host的数值,然后在发送邮件的过程中引入了host

image-20201112155912569

所以我们可以在这个host这里做文章

我们先正常来看一下,先重置一下我们自己账号的密码

在邮箱中我们收到了重置密码的邮件

image-20201112160507023

点击链接 ,发现url中最后的uuid就是我们当前的用户身份凭证

image-20201112160748934

所以说我们如果能劫持他人的uuid那么我们就可以重置他人的密码了

所以大致流程如下:

  1. 将host修改为我们自己可控的vps,这里我填了webwolf 也就是本地的邮件服务器,email还是tom@webgoat-cloud.org

    image-20201112161009580

    1. 这样邮件就发送到了 tom 的邮箱中了,同时找回密码的链接变成了
    localhost:9090/WebGoat/PasswordReset/reset/reset-password/tom的uuid
    
  2. 然后到我们的邮件服务器中查看劫持到的uuid

image-20201112161225146

然后通过替换uuid 实现密码重置

image-20201112161304231

修复建议

修复起来其实很简单我们只需要固定我们的host就可以了,其实归根结底就是太相信用户的输入了,这也是很多安全问题存在的原因

0x02 总结

相对上部分这一部分设计代码审计的比较少,个人觉得这里重点还是在于思路的学习,特别是第二题让我又学到了新姿势。

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像