任意用户密码重置(五):重置凭证可暴破

2018-03-12 513091人围观 ,发现 8 个不明物体 WEB安全数据安全

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

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

传送门:

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

任意用户密码重置(二):重置凭证接收端可篡改

任意用户密码重置(三):用户混淆

任意用户密码重置(四):重置凭证未校验

密码找回需要鉴别用户的合法身份,证明你就是你,通常有两种做法,一是网站将重置验证码发至用户绑定的邮箱或手机号,用户持重置验证码证明你就是你,二是用户输入密码保护问题对应的答案。其中,验证码、密保答案就是重置密码的重要凭证。有些网站生成四位数字的重置验证码,复杂度较低,[0000, 9999] 也就一万种组合,在如今的计算能力和网络带宽条件下,顺手的工具三五分钟的功夫就能枚举完。如果服务端又未设置验证码的存活有效期、未限制高频访问,那么极易暴破。

案例一

密码找回页面 http://www.xxxx.com/find-pw.html 用攻击者账号 13908081024 进入密码找回全流程,输入图片验证码、选择手机找回、获取短信验证码,发现短信验证码为 4 位数字且短信内容上未看到有效期信息,所以,可暴破短信验证码,进行后续的重置流程。

用账号枚举漏洞遍历得到的普通手机号 13908093346 为例,进入密码找回流程,提交短信验证码:

任意用户密码重置(五):重置凭证可暴破

其中,1234 是我随便输入的错误的短信验证码,需要对 code 参数值进行暴破以找出正确的短信验证码。

具体而言,我将该请求中的 code 参数值定义为枚举变量、以 [0000, 9999] 为字典,设定 32 个线程进行暴破:

任意用户密码重置(五):重置凭证可暴破

很快暴出短信验证码为 6909:

任意用户密码重置(五):重置凭证可暴破

提交短信验证码后顺利进入新密码设置页面,重置密码设为 PenTest1024 后提交,服务端返回“修改成功”:

任意用户密码重置(五):重置凭证可暴破

尝试用 13908093346/PenTest1024 登录,验证成功:

任意用户密码重置(五):重置凭证可暴破

案例二

密码找回页面 http://xx.xxxx.com/xxxx/findpassword 用攻击者账号 13908081024 进入密码找回全流程,输入图片验证码、选择手机找回、获取短信验证码,发现短信验证码为 4 位数字且短信内容上未告知有效期,所以,可暴破短信验证码,进行后续的重置流程。

用用户名枚举得到的普通手机号 15012804897 为例,进入密码找回流程,提交短信验证码:

任意用户密码重置(五):重置凭证可暴破

其中,1234 是我随便输入的错误的短信验证码,需要对 auto 参数进行暴破以找出正确的短信验证码:

任意用户密码重置(五):重置凭证可暴破

很快暴出短信验证码为 9997,输入后进入新密码提交页面,重置密码为 PenTest1024 后提交:

任意用户密码重置(五):重置凭证可暴破

尝试用 15012804897/PenTest1024 登录,验证成功:

任意用户密码重置(五):重置凭证可暴破

加固措施

密码重置凭证强度提高,建议六位数字,有效期十分钟,并且验证码应校验一次后立即作废。另外,服务端应限制枚举等恶意请求。

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

这些评论亮了

  • yangyangwithgnu (5级) 任何事情都有无穷乐趣 回复
    @ TopScrew 我的初衷是把密码找回漏洞的常见思路梳理完整,每种思路在日常渗透时都可以作为切入点发起攻击,不存在说哪一章质量高、哪章质量低,完整性、真实性是我的考量依据。
    拿你问的 IP 受限时如何暴破验证码来说,本文的确未提及,平时我到遇到几个,但限于厂商约定,没办法把真实案例公布出来。思路上倒是可以交流下,伪造 IP、使用代理池是我常用且成功率较高的两种方式。
    伪造方式。HTTP 服务端验证客户端 IP 的常用首部也就 Client-IP、X-Client-IP、X-Real-IP、True-Client-IP、X-Originating-IP、X-Forwarded-For、X-Remote-IP、X-Remote-Addr、X-Forwarded-Host 等几种,均可伪造绕过。比如,可先在请求中增加 X-Forwarded-For 首部,IP 来源可以是从免费代理池中获取的,也可用 burp 自动生成。具体而言,在请求中添加首部 X-Forwarded-For: 128.64.§32§.§16§,将后两个字段设定为枚举变量(按需添加更多枚举变量),这就有整个 B 段的随机 IP。
    代理池方式。很多网站提供免费代理池服务,通过爬虫爬取会来后,用脚本调用 curl 发起 HTTP 请求、设置 --proxy 参数指定代理 IP。
    )6( 亮了
发表评论

已有 8 条评论

取消
Loading...

特别推荐

推荐关注

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php