首页 » 网站推广 » phpheaderjsonp技巧_JSONP劫持及事理

phpheaderjsonp技巧_JSONP劫持及事理

访客 2024-12-13 0

扫一扫用手机浏览

文章目录 [+]

把任何JavaScript工具变成JSON,便是把这个工具序列化成一个JSON格式的字符串,这样才能够通过网络通报给其他打算机。

JSON 语法规则数据为 键/值 对(key:value)数据由逗号分隔方括号保存数组大括号保存工具

var Deutsh = { name: 'De4tsh', age: 66, height: 2.01, grade: null, skills: ['JavaScript', 'C', 'C++', 'Python'], // 数组 like: {"sports":"football","eat":"pizza"} // 工具};// 将 Deutsh 工具序列化为 JSON 格式字符串var deu = JSON.stringify(Deutsh); console.log(deu);

转换得到的 JSON 格式的数据为:

phpheaderjsonp技巧_JSONP劫持及事理

{"name":"De4tsh","age":66,"height":2.01,"grade":null,"skills":["JavaScript","C","C++","Python"],"like":{"sports":"football","eat":"pizza"}}JSONP

CORS是推举的方法,而不是JSONRequest。
JSONP对付较旧的浏览器支持仍旧有用,但考虑到安全隐患,除非您别无选择,否则CORS是更好的选择

phpheaderjsonp技巧_JSONP劫持及事理
(图片来自网络侵删)

JSONP是JSON with padding(添补式JSON或参数式JSON)

大略来说,JSON的一种”利用模式”,可以让当前网页从别的域名(网站)那获取资料,即跨域读取数据,而且JSONP算是一种非官方的技能手段 ( 官方的有CORS(之前在 SSTI 注入时提到过) 和postMessage)

至于为什么跨域访问别的域名的资源还要借助这种办法,缘故原由在于有着:同源策略的限定:在Web浏览器中,许可某个网页脚本访问另一个网页的数据,但条件是这两个网页必须有相同的URI、主机名和端口号,一旦两个网站知足上述条件,这两个网站就被认定为具有相同来源。
此策略可防止某个网页上的恶意脚本通过该页面的文档工具模型访问另一网页上的敏感数据(比如说 cookie )值得把稳的是同源策略仅适用于脚本,这意味着某网站可以通过相应的HTML标签访问不同来源网站上的图像、CSS和动态加载脚本等资源。
而跨站要求假造便是利用同源策略不适用于HTML标签的毛病。

JSONP跨域要求的事理

如上所述,JSONP正是利用了HTML中的<script>标签中src(该属性用于规定外部脚本的 URL)属性不受同源策略约束来跨域获取数据的

JSONP会动态的创建<script>标签,然后通过个中的src属性来跨域获取数据

JSONP 的组成

JSONP由两部分组成

回调函数—callback数据——data

大略来说整体流程为:

当我们访问一个网站时,若该网站须要要求外部的资源,会通过动态建立一个带有src属性的<script>标签,去访问对应要要求资源网站的JSONP接口(要求时供应位于本真个回调函数名称),要求该接口后会返回所供应回调函数的调用,与该函数所须要的数据,而该函数由当前要求端所定义要求的(开拓者根据要求资源的类型来定义好该回调函数)

JSONP 事理实验

此处借用 菜鸟教程所供应一个JSONP接口来展示JSONP跨域要求的一个示例

做事端所供应的 JSONP 接口

jsonp.php

<?phpheader('Content-type: application/json');//获取回调函数名$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);//json数据$json_data = '["customername1","customername2"]';//输出jsonp格式的数据echo $jsoncallback . "(" . $json_data . ")";?>

这个也便是我们要要求的不是同源的数据所在的域

https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction

(该接口为菜鸟教程供应,大家若要做实验可直策应用)

客户端

说是客户端实在比较随意马虎误解,说白了便是一个要要求上述域中资源的非同源的里另一个域名,此处我们通过本地起python -m http.server 8080来搭建一个建议确当地网站,这个网站也便是作为用户的 你/我 要访问的网站,该网站的HTML为:

demo.html

<!DOCTYPE html><html><head><meta charset="utf-8"><title>JSONP 实例</title></head><body><div id="divCustomers"></div><script type="text/javascript">function callbackFunction(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.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction>"></script></body></html>

把稳看客户真个HTML代码中已天生用于访问本域之外资源的带有src属性的<script>标签

用户访问

上述simplehttp的IP:PORT为http://172.16.12.150:8080

作为用户的我们访问该网站后则会显示:

http://172.16.12.150:8080/demo.html

可以看到要求到了位于不同域(https://www.runoob.com)的jsonp.php中的数据["customername1","customername2"],并且该数据还经由了位于http://172.16.12.150:8080HTML 中回调函数callbackFunction的处理后,返回到了用户 “眼中”

以是此时的逻辑便是我们访问了http://172.16.12.150:8080的网站,该网站须要获取位于https://www.runoob.com中的数据(比如说本例子中的JSON数据),但由于这两个网站处于不同域,以是无法直接通过javascript要求,以是通过<script>标签的src属性要求了https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction这个JSONP接口,至此或得到了JSON的数据,并通过本网站(http://172.16.12.150:8080)的回调函数,对或得到的数据进行了个性化的处理,终极展示给用户

实在直接要求该JSONP接口也可以得到数据,但该数据是没有经由本端回调函数处理的(而且还会被包在一个未定义的回调函数中)

JSONP 挟制

由上面的描述就可以很随意马虎的创造,若回调函数被掌握,那么便可将要求到的数据通过该函数进行任意的处理

JSONP 挟制事理

假设当前有两个网站:

网站A由攻击者自建立,包含恶意的JSONP回调函数以及向网站B发送要求的带有src属性的<script>标签网站B正常网站,用户须要登录该网站形式其功能,并且该带有JSONP支持跨域要求

以是整体的流程便是:

首先用户会登录网站B,网站B中包含了该登录的基本信息(用户ID、用户名等),并且网站B还存在一个JSONP接口,用户在访问该网站的时候,该接口会返回用户的信息此时通过合营其他漏洞或勾引用户来访问网站A,此时包含着恶意回调函数以及src属性的<script>标签的HTML页面就会加载到用户这边标签被触发,通过用户的身份,向网站B的JSONP接口发送要求,便可以要求到B的基本信息的数据然后再合营恶意的回调函数,无论是将这些数据发回网站A,还是显示出来都可以,自由发挥即可

至此便完成了一个JSONP的挟制

对 JSONP挟制 的思考

归根结底,JSONP 可造成的危害并不是很大,由于其须要知足的条件条件很多(比如:须要跨域、并且不能有token的校验),这也便是造成其很难自己一个人 “挑起大梁”,还须要合营其他的漏洞,或是钓鱼等

以是与其探求挖该漏洞,不如将其用于蜜罐中

参考文章

What is JSONP, and why was it created?

由浅入深理解JSONP并拓展

201-A20-同源策略及干系漏洞

JSONP 教程

浅谈Ajax跨域及其JSONP大略实现

W3Schools online HTML editor

申明:本文仅供技能互换,请自觉遵守网络安全干系法律法规,切勿利用文章内的干系技能从事造孽活动,如因此产生的统统不良后果与文章作者无关。

本文作者:Deutsh,原文来自FreeBuf.COM

标签:

相关文章