不乱于心,不困于情。
不畏将来,不念过往。如此,安好。

从用户枚举到任意用户密码修改

背景

最近一次授权的渗透测试,该网站只有一个后台,对系统进行探测只开放了80和443,规范的端口开放,也只能从web应用进行进一步测试了。后台在没有给测试账号的情况下,只能从登陆逻辑的相关业务点去突破。

过程

用户名枚举

web后台如下,在没有账号的情况下,我们只能通过在正常的登录逻辑中寻找漏洞。

可以看到当前页面只有两个功能,一个是登录一个是忘记密码,通过测试发现并没有对登录次数失败进行限制,但是想要爆破用户名再爆破密码无疑是个不可完成的工作量。那只能忘记密码的功能处突破了。

先描述一遍忘记密码的逻辑:

1.输入一个手机号,然后输入验证码。

但是此处的判断逻辑存在一定的问题,填写手机号后和呀验证码之后发送请求,先判断该手机号是否已经注册,未注册则返回用户不存在,注册了则会校验验证码是否正确。在此我们找到了存在一个11111111111的测试账号。由此此处存在一个逻辑漏洞导致用户名可被暴力枚举。

2.填入收到的短信验证码,修改密码

另外还有一个收获,在测试用户名枚举时,尝试mobile参数为admin显示该用户存在(需在抓包软件处修改,前端校验手机号),由此可以判断后台很可能默认是使用手机号当用户名,实际执行执行的SQL的参数为username而非mobile,所以这里传入admin用户名可对管理员密码进行重置。

短信验证码爆破导致任意用户密码修改

我们可以枚举用户之后,但是可以看到还需要对应的验证码才能修改密码,这里我们先简单的尝试了假设验证码是四位的情况去暴力枚举短信验证码。并没有成功爆破,很可能是六位的短信验证码,很难突破。但是在过程中发现,后台没有对验证失败次数进行限制,且短信验证码很可能没有设置有效时长,在数个小时之后重发密码修改的数据包任提示短信验证码错误。

由此可知就算是六位数的密码,只要短信验证码一直不过期,且没有失败处理策略我们任可以通过暴力枚举的方法对任意用户的密码进行重置。因此挂了双个线程,进行短信验证码暴露枚举尝试,不到一个小时候后成功修改管理员用户密码:

成功登录管理后台

总结

从上面的场景可以看到,就算再长的验证码,在上面的场景中一样是可以被突破的。单一的高强度的安全策略也是不能保证系统的安全的,在安全建设者的角度来说,我们需要的是建立起一个没有短板的木桶,安全策略是相互维系着的,对每一个业务/功能/系统处没有一个完整的安全策略,很容易被攻击者以点破面,打破防御。

文章来源:黑白之道

赞(0) 打赏
未经允许不得转载:seo优化_前端开发_渗透技术 » 从用户枚举到任意用户密码修改

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏