type
Post
status
Published
date
Nov 26, 2025
slug
summary
tags
CTF
推荐
category
CTF-Knowledge
category (1)
icon
password
comment
Show

原理

js创建对象有三种方式
在js中所有的东西都可看为对象。
而在js中每一个对象都会有一个__proto__的属性。
__proto__
对象可以通过__proto__来找到其自己的父类。
而对于构造函数也有一个prototype与之相对应。
prototype
可以看到,其实两者是一样的。

原型链

通俗来讲就是js中类之间因继承机制而产生的线性关系。
如上a()上层为{},再上为Object,再上就是NULL。
NULL为链的的末端。

继承机制

对于js中类的继承机制为
可以看到c为b类产生的对象,但是再输出是却又age属性。
这就是继承,b类继承了a的age属性。

漏洞思路

先看一个经典的递归漏洞。
对于merge函数是一个经典的递归js原型链污染。
输入用以上代码即可污染,使o3拥有属性b。
这样要强调一点JSON.parse函数使用是必须的
要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法
看一下用JSON.parse用与不用的区别。
区别一目了然
如果不用JSON.parse,再递归时key不会等于__proto__,就不会令a的__proto__加上b属性。
厦门三日游GeekChallenge2025-web
Loading...
公告
🎉qetx新博客已经上线🎉
-- 感谢您的支持 ---
这里会有什么?
ctf知识
RL学习笔记
有趣的生活日常