Web
hackjs
考点:qs数组原型链污染,hasOwnProperty覆盖
通过审计第三方包可以大致猜出要考什么 确定明确方向
https://github.com/n8tz/CVE-2022-24999
有效负载将创建这种“邪恶”数组:
categories[_proto__]&categories[_proto__]&categories[length]=100000000
所有继承了 Object
的对象都会继承到 hasOwnProperty
方法。这个方法可以用来检测一个对象是否含有==特定的自身属性==;和 in
运算符不同,该方法会忽略掉那些从原型链上继承到的属性
通过将它==设置为一个字符串==,venom.hasOwnProperty("text")
的调用将会失败,因为hasOwnProperty
已不再是一个函数。所以进入catch
块
Object.keys(venom).length
来获取venom
对象中的属性数量,==但是不包括原型链上的其他父属性== 可以通过原型链污染实现属性的控制
为什么考虑venom[text]
进行POST传参(少见) ==参考用例==
调试分析发现qs数组原型链污染 仅有在第一个传参是是
[__proto__]
才起作用
如果不是第一个 没有成功污染父类属性
如果是第一个
就可以污染成功了 神奇
venom[__proto__][welcome]=159753&venom[text]=flag&venom[hasOwnProperty]=J1rrY