深度剖析JSONP注入漏洞:JavaScript回调函数引发的会话弹窗劫持
tangkaixing 发表于 江苏 渗透测试 2137浏览 · 2025-06-09 07:18

声明

本文章所分享内容仅用于网络安全相关的技术讨论和学习,注意,切勿用于违法途径,所有渗透测试都需要获取授权,违者后果自行承担,与本文章及作者无关,请谨记守法。

1 概述

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

2 正文

2.1 漏洞挖掘思路

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

image.png


image.png


响应为标准的JSON结构:

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

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

image.png


image.png


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

2.2 JavaScript审计关键点

漏洞链核心问题

动态执行风险eval()函数无条件执行任意JS代码

缺失输出过滤:服务端未校验Content-Type头(应为application/json

回调函数暴露:攻击者可劫持Object.assign等原生函数

2.3 漏洞攻击链分析

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

image.png




触发流程:

1 eval()执行注入代码,调用Object.assign()

2 执行alert()泄露完整Cookie(包含JSESSIONID)

3伪造的JSON结构绕过逻辑检查,验证码组件正常渲染

image.png


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

image.png


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漏洞,需聚焦四个核心维度如下:

4 祝福

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



0 条评论
某人
表情
可输入 255