1 概述
在Web应用安全领域,JSONP(JSON with Padding)因其跨域特性被广泛使用,但也常成为攻击入口。本文通过分析某企业登录系统的高危漏洞案例,揭示未过滤的JSONP回调函数如何导致完整会话Cookie泄露。该漏洞利用难度低但危害极大,通过篡改AJAX响应即可窃取用户会话,实现完全身份冒充。
2 正文
2.1 漏洞挖掘思路
在对某JSP平台登录模块进行黑盒测试时,发现关键接口:
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()解析动态数据
var responseData = eval("(" + textStr + ")");
此处使用eval()直接解析响应文本,为回调函数注入埋下伏笔。
2.2 JavaScript审计关键点
漏洞链核心问题:
- 动态执行风险:eval()函数无条件执行任意JS代码
- 缺失输出过滤:服务端未校验Content-Type头(应为application/json)
- 回调函数暴露:攻击者可劫持Object.assign等原生函数
2.3 漏洞攻击链分析
通过Burp Suite拦截响应并注入恶意JS:
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,})
触发流程:
- eval()执行注入代码,调用Object.assign()
- 执行alert()泄露完整Cookie(包含JSESSIONID)
- 伪造的JSON结构绕过逻辑检查,验证码组件正常渲染
在用户无感知情况下弹出会话信息,实现“无交互劫持”(下图是我画的示意图):
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
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论