任意用户密码重置(一):重置凭证泄漏

*本文作者:yangyangwithgnu,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

在逻辑漏洞中,任意用户密码重置最为常见,可能出现在新用户注册页面,也可能是用户登录后重置密码的页面,或者用户忘记密码时的密码找回页面。其中,密码找回功能是重灾区。我把日常渗透过程中遇到的案例作了漏洞成因分析,这次,关注因重置凭证泄漏导致的任意用户密码重置问题。

案例一

用邮件找回密码时,作为重置凭证的验证码在 HTTP 应答中下发客户端,抓包后可轻易获取。先用攻击者账号走一次密码找回流程,测试账号 [email protected] 选用邮箱找回密码:

任意用户密码重置(一):重置凭证泄漏_第1张图片

点击获取校验码后抓取如下应答:

任意用户密码重置(一):重置凭证泄漏_第2张图片

其中,VFCode 从字面理解很可能是校验码。登录邮箱查看网站发过来的密码找回邮件:

任意用户密码重置(一):重置凭证泄漏_第3张图片

发现两者一致,那么,几乎可以确认服务端将密码找回的校验码泄漏至客户端,可导致任意账号密码重置问题。

尝试找回普通账号的密码。密码找回首页输入邮箱后,系统将立即校验该邮箱是否注册:

任意用户密码重置(一):重置凭证泄漏_第4张图片

将 UName 参数定义为枚举变量,以常见 qq 邮箱作为字典,可枚举出多个有效邮箱:

任意用户密码重置(一):重置凭证泄漏_第5张图片

[email protected] 为例,在应答包中找到校验码,成功将其密码重置为 PenTest1024,验证可登录:

任意用户密码重置(一):重置凭证泄漏_第6张图片

尝试找回管理员账号的密码。从该网站的域名注册信息中找到联系人的邮箱为 [email protected],可推测后台用户的邮箱后缀为 @xxxx.cn,所以,用常见后台用户名简单调整可构造出后台用户邮箱字典,枚举出大量后台用户:

任意用户密码重置(一):重置凭证泄漏_第7张图片

同理可重置这些后台用户的账号密码,为避免影响业务,不再实际操作。

案例二

用邮件找回密码时,带凭证的重置链接泄漏至客户端,抓捕可获取。用攻击者账号走一次密码找回流程。在找回密码页面输入攻击者账号及其邮箱(yangyangwithgnu、[email protected])后提交:

任意用户密码重置(一):重置凭证泄漏_第8张图片

拦截如下应答:

任意用户密码重置(一):重置凭证泄漏_第9张图片

显然是个重定向,isVerify、PassPhrase 这两个参数很可疑,后续交互中应留意,先放包,进入发送重置邮件的页面,输入验证码后提交。登录攻击者邮箱查看重置邮件:

任意用户密码重置(一):重置凭证泄漏_第10张图片

这个带 token 的重置链接似曾相识,对,就是前面抓包获取的 token 信息,比对看下:

forgotPwdEa.php?isVerify=eWFuZ3lhbmd3aXRoZ251fHlhbmd5YW5nd2l0aGdudUB5ZWFoLm5ldHw2MzQyNDkw&PassPhrase=01e4f6d4ede81b2604dc320bc4e3a6e8
forgotPwdEc.php?isVerify=eWFuZ3lhbmd3aXRoZ251fHlhbmd5YW5nd2l0aGdudUB5ZWFoLm5ldHw2MzQyNDkw&PassPhrase=01e4f6d4ede81b2604dc320bc4e3a6e8

唯一区别 forgotPwdEa 和 forgotPwdEc 两个文件名。

接下来验证通过服务端泄漏的 token 能否重置普通用户的账号密码。从重置流程可知,要重置密码必须提供用户名及其邮箱(或手机号)。

获取有效用户名。注册页面中,输入用户名后立即校验该用户名是否被占用:

任意用户密码重置(一):重置凭证泄漏_第11张图片

对应请求、应答如下:

任意用户密码重置(一):重置凭证泄漏_第12张图片

用户名已存在返回 failed,不存在返回 ok。以此特征,用常见国人姓名字典,可枚举出大量有效用户名(如 chenchuan、chenanqi、chenanxiu、zhangfeng 等等),存为 username.txt。

获取有效用户名对应邮箱。密码找回首页提交的请求中,user_name 与 email 参数匹配情况下,HTTP 应答代码为 302,交互包如下:

任意用户密码重置(一):重置凭证泄漏_第13张图片

可以此特征枚举有效用户名及其邮箱。现在考虑如何制作邮箱字典?很多用户喜欢用用户名注册 qq 邮箱,换言之,用户名 yangyangwithgnu 可能对应邮箱 [email protected]。所以,用前面已经获取有效用户名字典 username.txt 快速制作了邮箱字典 qq-email.txt,其中,username.txt 与 qq-email.txt 逐行对应。

例如,前者第一行为 yangyangwithgnu、后者第一行为 [email protected]。将上面的数据包放入 burp 的 intrduer 中,攻击类型选 pitchfork、user_name 的参数值定义为枚举变量 1 并加载字典 username.txt、email 的参数值定义为枚举变量 2 并加载字典 qq-email.txt,可枚举出大量有效用户名/邮箱信息,如,zhangfeng/[email protected]、chenchuan/[email protected] 等等。

用普通账号 chenchuan/[email protected] 演示密码重置漏洞。输入用户名、密码提交,正常完成密码找回逻辑,从交互包中获取服务端下发的重置 token:

isVerify=Y2hlbmNodWFufGNoZW5jaHVhbkBxcS5jb218MTE2MDIzNw==&PassPhrase=cbf0160662358808f3586868f041cbaa 

拼装为重置链接 http://www.xxxx.com/user/forgotPwdEc.php?isVerify=Y2hlbmNodWFufGNoZW5jaHVhbkBxcS5jb218MTE2MDIzNw==&PassPhrase=cbf0160662358808f3586868f041cbaa ,访问之,即可进入密码重置页面:

任意用户密码重置(一):重置凭证泄漏_第14张图片

输入新密码 PenTest1024 后系统提示修改成功。用 chenchuan/PenTest1024 成功登录:

任意用户密码重置(一):重置凭证泄漏_第15张图片

防御措施上,密码找回的凭证切勿下发客户端,另外,校验邮箱是否有效应添加图片验证码,以防止关键参数被枚举。

*本文作者:yangyangwithgnu,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

发表评论

已有 23 条评论

  • 比尔.绿帽  2018-01-22 回复 1楼

    不错,继续

    亮了( 3)
  • tombstonc  (1级)  2018-01-22 回复 2楼

    见到的比较多的还有认证码能暴力破解,支持作者继续分享

    亮了( 1)
  • 想个名字好难  (1级)  2018-01-22 回复 3楼

    给改掉了?按照文中的方法显示错误。。。

    亮了( 0)
    • yangyangwithgnu  (3级) 任何事情都有无穷乐趣  2018-01-22 回复

      @ 想个名字好难 
      知道是哪个站?

      亮了( 0)
      • 想个名字好难  (1级)  2018-01-22 回复

        @ yangyangwithgnu  **维?不知道对不对?搜了一下,收到的,感觉界面、地址啥的和你文中的图是一样的。。。

        亮了( 0)
      • yangyangwithgnu  (3级) 任何事情都有无穷乐趣  2018-01-22 回复

        @ 想个名字好难 
        来人,发现一个社工高手。

        亮了( 0)
      • 想个名字好难  (1级)  2018-01-22 回复

        @ yangyangwithgnu  大神,别闹。。。

        亮了( 0)
      • ChangG  (1级) 我轻轻的来了,正如你轻轻的走了╰(*°▽°*)╯  2018-02-06 回复

        @ yangyangwithgnu  这么基本的方法还社工高手。。。

        亮了( 0)
  • 苏苏苏苏苏苏  (1级)  2018-01-22 回复 4楼

    谢谢大神分享,

    亮了( 0)
  • nolove  (3级)  2018-01-22 回复 5楼

    有一就有二
    请继续

    亮了( 0)
  • test  2018-01-22 回复 6楼

    实测第二个网站还可以按这个方法来

    亮了( 0)
  • 比尔盖饭  2018-01-23 回复 7楼

    好厉害哦。。。求带!!

    亮了( 0)
  • jingks  2018-01-23 回复 8楼

    高效工作,幸福生活。企业标语你也应该给上马的。

    亮了( 0)
    • yangyangwithgnu  (3级) 任何事情都有无穷乐趣  2018-01-23 回复

      @ jingks

      心,好累

      亮了( 1)
  • kepton  (2级) 什么都不懂的吃瓜群众之一  2018-01-23 回复 9楼

    嗯,高效工作,幸福生活

    亮了( 0)
  • JOKRE  (1级) 小白  2018-01-23 回复 10楼

    验证用户名是否存在哪里能抓到那个包吗?这里我不太会耶

    亮了( 0)
  • yangyangwithgnu  (3级) 任何事情都有无穷乐趣  2018-01-23 回复 11楼

    文章中示例的两个站点,我已经尽可能打码了,但还是被有些同学找出来了。大家随便看看就好,别搞事哈,都不容易。

    亮了( 0)
  • thmdly  (1级)  2018-01-24 回复 12楼

    还有这种骚操作

    亮了( 0)
  • 90sa  2018-01-26 回复 13楼

    任意用户密码重置(二) 什么时候来? :razz::razz:

    亮了( 0)
    • yangyangwithgnu  (3级) 任何事情都有无穷乐趣  2018-02-05 回复

      @ 90sa

      《任意用户密码重置(二):重置凭证接收端可篡改 》 http://www.freebuf.com/articles/database/161495.html

      亮了( 0)
  • clovermm  (1级)  2018-02-05 回复 14楼

    给力!

    亮了( 0)
  • 2209553467  (1级)  2018-02-05 回复 15楼

    求一个burpsuite,我的会乱码

    亮了( 0)
  • OO  (1级)  2018-02-06 回复 16楼

    打码不到位不是一个好的作者 :mrgreen:

    亮了( 0)

你可能感兴趣的:(逻辑缺陷)