原型链污染
原型链污染
定义
原型链污染是一种针对javascript运行时的注入攻击。通过原型链污染,攻击者可能控制对象属性的默认值。这允许攻击者篡改应用程序的逻辑,还可能导致拒绝服务,或者在极端情况下远程执行代码
prototype原型
原型链污染原理
什么情况下原型链会被污染
找找能控制数组(对象)的键名的操作就可以
比如对象merge
1 | function merge(target, source) { |
erge
函数的目标是将 source
对象的内容合并到 target
对象中。如果 target
和 source
中有相同的键且其值为对象,则递归合并这些对象;否则将 source
的值直接赋给 target
。
导致的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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 OP!
评论