sso登陆劫持漏洞
引子
最近项目遇到这个漏洞,但是我没有发现。。
正文
参考资料:
sso单点登陆,用户一次登陆,所有系统都可访问。
sso设计目的是简化登陆方式,可能有很多系统,但是多个系统都是一个机构的,每个系统每次都要分别登陆就很复杂。
举个例子,OpenID是一个很流行的sso框架,
用户提交1. openID 2.openID Provider(提供者)
网站重定向到openID provider认证,登陆成功后,再重定向回网站。
这里可以理解为,门卫不知道你是谁,然后让你去某某处盖章,你去盖章完成后回到门卫处,门外验证红章没问题就让你通过。
案例
1 |
|
此处有一个参数backurl=abc.com,当修改此参数为backurl=abc.com.test
网页向abc.com.test,也就是openID Provider(提供者)提交一串openID。
提交后,网页提示无法连接abc.com.test,并且抓取到了一段数据包,包含了登陆成功的token。
由于客户可以伪造openID Provider(提供者),此处产生了sso登陆劫持漏洞。下列的sid是token。如果使用以下token,再次访问http://abc.com.test/Account/Login,可以发现已经登陆。
1 |
|
攻击方式
攻击者可以将backurl修改为自己的地址,然后发送恶意连接http://abc.com/public/pages/login/index.html?backurl=http%3A%2F%2F恶意地址%2FAccount%2FLogin%3FReturnUrl%3D%252f&app=YuLinTu
一旦受害者点击链接,并输入正确的用户名和密码。恶意地址会收到如下的get请求“GET /Account/Login?ReturnUrl=%2f&sid=96c2182d0da29dc720fab468734fef9e47ced2993df16fda6b03c98e92f6e77475b4cf56623430d6 ”
攻击者就可以使用token sid=xxx,以受害者的身份进行登陆abc.com。