深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持

admin 2025年6月12日17:08:25深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持已关闭评论13 views字数 1836阅读6分7秒阅读模式
免责声明
由于传播、利用本公众号开心网安所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号开心网安及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉,谢谢!

1 概述

在Web应用安全领域,JSONP(JSON with Padding)因其跨域特性被广泛使用,但也常成为攻击入口。本文通过分析某企业登录系统的高危漏洞案例,揭示未过滤的JSONP回调函数如何导致完整会话Cookie泄露。该漏洞利用难度低但危害极大,通过篡改AJAX响应即可窃取用户会话,实现完全身份冒充。

2 正文

2.1 漏洞挖掘思路

在对某JSP平台登录模块进行黑盒测试时,发现关键接口:

深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持
深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持
POST /sp/checkCode!isShow.ajax?loginName=xxx HTTP/1.1POST /sp/smsVerify!sendSmsVerifyCode.ajax HTTP/1.1

响应为标准的JSON结构:

{"success":true,"datas":{"isNeetCheckCode":true}}{"success":true}

但当深入审查前端代码时,发现致命隐患:

典型的高危函数滥用:使用eval()/Function()解析动态数据

深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持
深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持
var responseData = eval("(" + textStr + ")");

此处使用eval()直接解析响应文本,为回调函数注入埋下伏笔。

2.2 JavaScript审计关键点

漏洞链核心问题

  • 动态执行风险eval()函数无条件执行任意JS代码
  • 缺失输出过滤:服务端未校验Content-Type头(应为application/json
  • 回调函数暴露:攻击者可劫持Object.assign等原生函数

2.3 漏洞攻击链分析

通过Burp Suite拦截响应并注入恶意JS:

深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持
HTTP/1.1 200 OK  Content-Type: text/javascript  // 恶意修改为JS类型Object.assign(window,   alert('SESSION:'+document.cookie),   {"success":true,"datas":{"isNeetCheckCode":true}})Object.assign(window, alert('SESSION:'+document.cookie), {"success":true,})

触发流程:

  1. eval()执行注入代码,调用Object.assign()
  2. 执行alert()泄露完整Cookie(包含JSESSIONID)
  3. 伪造的JSON结构绕过逻辑检查,验证码组件正常渲染
深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持

在用户无感知情况下弹出会话信息,实现“无交互劫持”(下图是我画的示意图):

深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持

3 总结

1. JavaScript常见高危函数

在渗透测试中,我们重点关注以下JavaScript函数,因为它们可能导致代码执行:

  • eval():直接执行字符串中的JS代码,是最高危的函数。
  • Function()构造函数:通过new Function('arg', 'alert(arg)')方式创建函数,同样能执行动态代码。
  • setTimeout()/setInterval():如果第一个参数是字符串,则会执行。
  • document.write()/innerHTML:可能导致XSS,但当插入点位于script标签内时,可以执行JS。
  • JSON.parse():虽然相对安全,但若解析后的对象没有正确处理,仍可能通过原型链污染或后续不安全操作导致漏洞。

2. 浏览器全局检索

全局搜索: eval(、Function(、setTimeout(、innerHTML

3. 渗透测试中挖掘JS漏洞,需聚焦四个核心维度如下:

graph LR  A[JS漏洞挖掘] --> B[动态执行点]  A --> C[数据流通道]  A --> D[原生函数劫持]  A --> E[上下文逃逸]

4 祝福

愿诸位安全从业者永葆对细节的敏锐洞察,在代码的海洋中精准捕获每一处暗流。愿你们的防御体系如星辰般稳固,让每一次漏洞挖掘都成为系统进化的契机。长风破浪会有时,直挂云帆济沧海——共筑网络安全长城;当你在万千行代码中捕获到一个漏洞时,记住这不仅是技术胜利,更是对数字世界的守护。剑未佩妥出门已是江湖,愿你的渗透之刃始终斩向黑暗。攻防之道,存乎一心;安全之路,永无止境! 🔥

先知社区也发布此文章,欢迎给我看官浏览观看学习交流

https://xz.aliyun.com/news/18212

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月12日17:08:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持https://cn-sec.com/archives/4158232.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.