#翻译文章#
原文:
https://mokhansec.medium.com/full-account-takeover-worth-1000-think-out-of-the-box-808f0bdd8ac7
有删减
这是一个不能披露的项目。我们姑且称为example.com。这个网站没有很特殊的功能,你可以注册,登陆,修改密码等。
国际惯例,我注册了2个账号,我登陆了第一个账号,然后检查了请求响应数据包,我发现这个网站使用了某种CSRF token来防御CSRF攻击。并且,我发现这个网站使用6位userID来标记每个用户,所以这非常容易枚举。
然后我去设置页面,修改了一些个人信息,然后我观察了请求。

现在我登陆了第二个账号,然后我尝试去修改第一个账户的用户名,然而并没有成功。
我又检查了修改邮箱的功能,但是没有CSRF token啥也干不了。现在我开始检查修改密码的功能。修改密码,需要你输入当前密码和新密码。我发现我删除了当前密码的参数,依然可以修改成功。

但是这个漏洞危害太小了,我没有上报。我和朋友交流了一下,我决定将csrf_token改为null,依然是可行的。

但是到现在为止,我还是只能修改我自己的密码,无法修改其他人的密码。如果你够仔细的话,你可以观察到这个json里没有userId这个参数。我尝试寻找/api/user/userID/change_password这种接口,但是啥也没找到。我觉得userId肯定在json里,但是我不知道键名。于是我决定使用Param Miner来爆破一下。我想要找到隐藏在json里的参数,于是我选择"Guess JSON parameter"

没过多大会,就找到UID参数。现在,你知道该做什么了。我可以修改第一个账号的密码了。

我把这些上报给了厂商,厂商修好了漏洞,付给了我$1000美元。
译者按:
译者曾经参加了一个测试项目,管理员登陆后,可以修改其他人的个人信息。但是参数里没有password,在参数加上password就可以修改其他人的密码,进而可以做到任意账号登陆。译者咨询了开发小哥,小哥说可能是开发的时候,直接把传过来的json解析了,然后就放到sql里执行了。如果大家有其他的看法,欢迎联系译者讨论。
本文迁移自知识星球“火线Zone”