前言
这个知识点涉及到的是好久以前的某些题,但是我压根就没看,不是因为我懒的看,而是因为那些比赛好多题,我都不会,所以都轮不到它们。
js原型链污染
文章参考:https://www.leavesongs.com/PENETRATION/javascript-prototype-pollution-attack.html
原型
为了创建类方法,使用原型prototype。可以视原型prototype是类的一个属性,而所有此类实例化的对象,都将拥有这个属性中的所有内容,包括变量和方法。
通过类名.prototype可以访问类的原型;类的实例通过对象名.__proto__访问类的原型。
原型链继承
JavaScript使用prototype链实现继承机制,在调用对象属性时,如果该对象没有,将调用.__proto__继续向原型查找,直到得到属性或者null。
原型链污染
原型链污染指的是:如果能够控制并修改一个对象的原型,那么将可以影响所有和这个对象来自同一个类、父祖类的对象。
在可以设置__proto__的值的情况下,就可以完成原型链污染。
找到能够控制数组(对象)的“键名”的操作比如:
1.对象merge:
2.对象clone
构造类似如下代码段:
1 | JSON.parse('{"a": 1, "__proto__": {"b": 2}}') |
1 | global.process.mainModule.constructor._load('child_process').execSync |
Author: suyumen
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.