文章总结: 文章详细介绍了JavaScript反序列化漏洞的原理和类型,包括使用eval()或Function()构造函数导致的代码执行、利用JSON.parse()的reviver函数以及原型污染攻击。文章提供了基本概念解释、典型攻击场景和代码示例,帮助读者理解漏洞机制。建议开发者避免直接使用eval()处理用户输入,谨慎使用reviver函数,并对反序列化数据进行严格验证,以防止原型污染和代码注入攻击。
综合评分: 83
文章分类: 漏洞分析,WEB安全,代码审计
PHP、Java、JavaScrip、python反序列化漏洞大盘点–JavaScript漏洞分析
原创
OneDay一卒的老付
老付话安全
2025年8月7日 20:32
山东
点击蓝字
关注我们
始于理论,源于实践,终于实战
老付话安全,每天一点点
激情永无限,进步看得见
严正声明
本号所写文章方法和工具只用于学习和交流,严禁使用文章所述内容中的方法未经许可的情况下对生产系统进行方法验证实施,发生一切问题由相关个人承担法律责任,其与本号无关。
特此声明!!!
03
JavaScript 反序列化漏洞
JavaScript中的序列化与反序列化是数据存储、网络传输和跨系统交互的核心技术之一。
当我们需要向后端传json字符串的时候,需将JavaScript的对象转成json格式,这个过程就是序列化。最常用的是内置方法JSON.stringify(obj)
// 基础用法 const user = { name: "Json", age: 38, roles: ["admin", "mage"] };const jsonStr = JSON.stringify(user); // 输出:{"name":"Json","age":38,"roles":["admin","mage"]}
后端通过接口给前端提供json数据,JavaScript接收json数据后续解析成object对象才好取值,这个过程叫反序列化。最常用的是内置方法JSON.parse(text)
// 基础反序列化 const parsedUser = JSON.parse(jsonStr); console.log(parsedUser.roles[0]); // 输出:"admin"
// Reviver函数处理 const revivedData = JSON.parse('{"date":"2025-08-7T12:00:00.000Z"}', (k, v) => { if (k === "date") returnnew Date(v); return v;});console.log(revivedData.date instanceof Date); // true
典型攻击场景
JavaScript 反序列化漏洞主要发生在使用 JSON.parse()、eval() 或类似方法处理不受信任的数据时。
- 主要漏洞类型
-
使用 eval() 或 Function() 构造函数
-
当直接将用户输入传递给 eval() 时,输入的代码会被执行
-
示例:eval(‘(‘ + userInput + ‘)’) 如果 userInput 包含恶意代码会被执行
-
利用 JSON.parse() 的 reviver 函数
-
JSON.parse() 本身是安全的,但如果使用了 reviver 函数且处理不当可能存在问题
-
reviver 函数在处理每个属性时可能被利用
-
原型污染攻击
-
通过构造特殊的 JSON 对象修改 __proto__ 或原型链
-
示例:{“__proto__”: {“isAdmin”: true}}
- 攻击原理
-
攻击者构造特殊的序列化数据,当这些数据被反序列化时:
-
可能执行任意 JavaScript 代码(在使用 eval 的情况下)
-
可能修改应用程序的原型链,改变对象行为
-
可能触发意外的函数调用
示例攻击
// 恶意JSON注入 const dangerousJson = '{"__proto__": {"isAdmin": true}}';const parsed = JSON.parse(dangerousJson); console.log({}.isAdmin); // 输出:true(原型污染)
// XSS漏洞 const userInput = '{"name":"<script>alert(1)</script>"}';document.body.innerHTML = JSON.parse(userInput).name;
END
枯燥乏味的知识点,学起来有点费劲。
但不积跬步无以至千里。
日拱一卒,每天一点点的进步。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:老付话安全 OneDay一卒的老付《PHP、Java、JavaScrip、python反序列化漏洞大盘点–JavaScript漏洞分析》