本帖最后由 wholesome 于 2020-2-24 16:57 编辑
乌云 《不小心闯进1905某站后台/我发誓真的是不小心》 记录:此次的漏洞只是作者“无意之举”,作者自己本人本来想找注入,顺带看了逻辑漏洞,但是不小心进入后台,怎么说呢?如果对于恶意攻击者,估计这是十分幸运的。但是对于我这样的初学者,还是要学习一下作者的渗透技巧: 作者自己注册了一个账户,然后使用找回密码界面流程,假装自己密码忘记,并停留在验证码界面,然后作者在同一浏览器打开新的网页。随后作者开始随便猜解用户名,由于该网站的设置,使得如果不存在某用户名,网站会报错,此时作者就轻易地猜解到了test账户。这个时候作者用test账户进行密码找回,并同样停留在手机验证码阶段。随后作者返回自己的账户界面进行重置密码,发现在同一浏览器的test账户密码也同样被重置(成相同密码)。 这是为什么呢? 作者给出了关键性的解释:因为验证码与cookie绑定而两账号此时cookie相同造成了混淆。 原来这是一个逻辑漏洞,属于任意用户密码重置,可能出现在新用户注册页面,也可能是用户登录后重置密码的页面,或者用户忘记密码时的密码找回页面,其中,密码找回功能是重灾区。 上述案例就是一个典型的因用户cookie混淆导致的任意用户密码重置问题。若想更加清楚,可以进入上述链接学习观摩。 这里我就自己再延伸扩展记录: 通过 cookie 混淆不同账号,实现重置任意用户密码 大致浓郁的 cookie 混淆大致攻击思路: 首先,用攻击者账号 www 进入密码找回流程,查收重置验证码、通过校验;然后,输入新密码后提交,拦截中断该请求,暂不发至服务端,这时,PHPSESSID 关联的是 www 账号;接着,关闭浏览器的 burp 代理,新开重置流程的首页,在页面中输入普通账号 admin 后提交,这时,PHPSESSID 已关联成admin了;最后,恢复发送之前中断的请求,放至服务端,理论上,可以成功重置 admin的密码。 由此可见,此类漏洞十分恐怖,轻而易举就可以把管理员的密码修改。 通过篡改请求包中的用户名参数,实现重置任意用户密码 大致攻击流程: 用攻击者账号走完密码找回全流程,涉及三步请求,依次为:验证用户名是否存在、获取短信验证码、提交短信验证码和新密码。第三步的时候,我们拦包修改用户名后放行,就会重定向至登录页面。用修改后的账号登录成功。期间还有一个小技巧:另外,密码找回流程第三步的请求中的短信验证码参数,单次有效,不可复用,如何实现自动批量密码重置?经测试,将该参数置空,或者完整删除该参数,服务端不再校验短信验证码。 通过篡改带 token 的重置链接中的用户名,实现重置任意用户密码 大致攻击思路: 在重置密码页面。假设攻击者用户 ID 为 42558。输入攻击者账号绑定的邮箱后点击“确认”,收到带 token 的密码重置链接,里面某个参数为攻击者的ID的base64编码,改变该ID,就会重置改变ID后的密码。
上述方法几乎能很容易理解,最后相关作者提出了防御措施如下(感觉这里我就不明白了,估计是代码方面不知道流程): 一定要将重置用户与接收重置凭证作一致性比较,通常直接从服务端直接生成,不从客户端获取。另外,密码找回逻辑中含有用户标识(用户名、用户 ID、cookie)、接收端(手机、邮箱)、凭证(验证码、token)、当前步骤等四个要素,这四个要素必须完整关联,否则可能导致任意密码重置漏洞。另外,HTTP 参数污染、参数未提交等问题,服务端也要严格判断。
《M1905价值2588套餐只要5毛钱(拥有后台权限可自己审核订单) 》 记录:这次又是上次网站。作者进入后台后,查看了订单记录,(估计是售卖什么的网站吧),作者随便购买了一个套餐,金额还比较大,当它去结算的时候抓包拦截,把有关数字修改成负数,然后再放行,发现金额只需支付0.5元!(这样显然卖家要倾家荡产啊!)随后支付宝支付的时候,还是只需要支付0.5元。(最后我怀疑这个网站是作者自己搭建的吧)
|