原型链污染

定义

原型链污染是一种针对javascript运行时的注入攻击。通过原型链污染,攻击者可能控制对象属性的默认值。这允许攻击者篡改应用程序的逻辑,还可能导致拒绝服务,或者在极端情况下远程执行代码

prototype原型

原型链污染原理

image-20241106160045481

什么情况下原型链会被污染

找找能控制数组(对象)的键名的操作就可以

比如对象merge

1
2
3
4
5
6
7
8
9
10
11
function merge(target, source) {
for (let key in source) {
if (key in target && key in source) {
// 如果目标对象和源对象中都有相同的键
merge(target[key], source[key]);
} else {
// 如果目标对象中没有该键,则直接添加
target[key] = source[key];
}
}
}

erge 函数的目标是将 source 对象的内容合并到 target 对象中。如果 targetsource 中有相同的键且其值为对象,则递归合并这些对象;否则将 source 的值直接赋给 target

image-20241106162320530

image-20241106163200555

image-20241106163126951

导致的RCE

找高危执行函数

给里面的参数通过污染尝试赋值

记得用JSON.parse解析

payload积累

1
{"code": '''require("child_process")["\x65\x78\x65\x63\x53\x79\x6e\x63"]('ls /')'''}#js形式

require("child_process"):

  • require 是 Node.js 中的一个函数,用于引入模块。在这里,它引入了 child_process 模块。
  • child_process 是一个 Node.js 自带的模块,允许在系统中创建子进程,以执行系统命令。

["\x65\x78\x65\x63\x53\x79\x6e\x63"]:

  • 这一部分是为了调用 child_process 模块中的一个方法,不过它使用了 十六进制转义 表示法。
  • "\x65\x78\x65\x63\x53\x79\x6e\x63"execSync 的十六进制形式。

execSync,它是 child_process 中的一个方法,用于同步执行系统命令并返回输出结果。

换句话说,这段代码等效于 child_process.execSync