介绍:JOSNP(JSONP with Override Security Negotiation Protocol)劫持是一种利用JSONP
(JSON with Padding)跨域数据获取机制的安全漏洞,攻击者通过篡改或伪造JSONP回调函数窃
取用户敏感数据。由于JSONP依赖脚本标签跨域加载数据且缺乏严格的同源策略保护,恶意网站
可能诱导用户执行非预期的回调操作,导致数据泄露。
一.JSONP劫持原理
因为在互联网是允许可以跨域加载js的,和前面CORS的区别就是CORS跨域要看对方服务后
端有没有限制允许你跨域,而我们今天学的JSONP劫持不需要对方限制,浏览器是默认允许的。
所以当我们找到另一个网站存在xss漏洞就可以利用,来跨域执行另一个网站的站点被恶意构造参
数返回的json数据映射执行恶意js代码。
以上可能听着有点绕,下面我们去靶场演示一下。
二.DVWA靶场演示
打开centos 进入apache前端目录
新建一个页面json.php,这个是模拟用户json信息返回的页面,利用的是callback参数。
<?php
$callback = $_GET['callback'];
echo $callback . '({"id":"1","username";"mk"});';
?>
我们打开浏览器查看:
我们打开hackerbar,对参数进行输入测试:
发现输入什么显示什么我们输入alert('123')查看回显:
页面并没有执行弹窗123,
我们利用此网站进行构造:<script src="http://192.168.112.17/json.php?callback=alert(123)"></script>,先单独访问一下这个url:
可以看到没有进行弹窗。
我们再在DVWA里xss漏洞里加入我们构造好的js代码:
以下是js代码:我们看到我们的<script >标签成功插入:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0> Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml>scroll
<head></head>
<body class="home">
<div id="container">
<div id="header"></div>
<div id="main_menu"></div>
v〈div id="main_body">
<div class="body_padded">
<h1>Vulnerability:Reflected Cross Site Scripting (XSS)</h1>
<div class="vulnerable_code_area">
<form name=XSS action=#method=GET>
(p>
What's your name?
<input type=text name="name">
<input type="submit"value="Submit">
</p>
〈/form>
v<pre〉=g0
"Hello
<script src="http://192.168.112.17/ison.php?callback=alert (123)"></script>
</pre>
</div>
<h2>More Information</h2>
<ul></ul>
</div>
<br>
<br>
</div>
<div class="clear"></div>
<div id="system_info></div>
<div id="footer"></div>
这里可以看到我们的插入是成功的
然后成功弹窗:
以上就是我们的JSONP劫持演示。
总结:JOSNP劫持的根源在于过度信任客户端输入及缺乏同源策略保护。通过输入验证、CSRF防护和迁移至CORS等技术,可有效降低风险。开发者需定期审计第三方脚本依赖,避免遗留漏洞被利用。