客户端原型污染漏洞利用解析

admin 2024年12月22日21:43:36评论6 views字数 1978阅读6分35秒阅读模式
客户端原型污染漏洞利用解析

点击蓝字

关注我们

客户端原型污染漏洞利用解析

始于理论,源于实践,终于实战

老付话安全,每天一点点

激情永无限,进步看得见

客户端原型污染漏洞利用解析

严正声明

本号所写文章方法和工具只用于学习和交流,严禁使用文章所述内容中的方法未经许可的情况下对生产系统进行方法验证实施,发生一切问题由相关个人承担法律责任,其与本号无关。

特此声明!!!

手动查找客户端原型污染源

尝试不同的方法将任意属性添加到 Object.prototype 中,直到找到有效的源。测试客户端漏洞时,使用以下步骤:

1、通过查询字符串、URL 片段和任何 JSON 输入注入任意属性。例如:

example.com/?__proto__[cc]=by

2、在浏览器控制台中,检查 Object.prototype 以查看是否已成功使用任意属性污染它,F12打开浏览器控制台,输入Object.prototype ,看是否显示cc:by,

3、如果该属性未添加到原型中,请尝试使用不同的技术,例如切换到点表示法而不是方括号表示法,反之亦然:/?__proto__.cc=by

4、对每个潜在源重复此过程

手动查找客户端原型污染小工具

一旦确定了允许向全局 Object.prototype 添加任意属性的源,下一步就是找到一个合适的小工具,使用它来制作漏洞利用。可以借助第三方工具来完成此操作。

通过构造函数进行原型污染

前面我们通过特殊的 __proto__ 访问器属性获取对原型对象的引用。因此常见的防御措施是在合并用户控制的对象之前从用户控制的对象中去除任何带有  __proto__ 属性的键。但是还有有其他方法可以引用 Object.prototype,而不依赖 __proto__ 字符串。

除非其 prototype 设置为 null,否则每个 JavaScript 对象都有一个 constructor 属性,该属性包含对用于创建它的 constructor 函数的引用。

创建对象可以使用字面量语法创建,如:

let myObject = { name"John"age30}; // 对象的constructor属性指向Object构造函数 console.log(myObject.constructor  === Object); 

还可以使用Object()构造函数创建对象

let anotherObject = newObject(); anotherObject.property  = "value"// 对象的constructor属性同样指向Object构造函数 console.log(anotherObject.constructor  === Object); 

在JavaScript中,constructor属性是一个对象原型(prototype)上的属性,它指向创建该对象实例的构造函数。对于普通的对象字面量(myObjectLiteral)或者通过new Object()创建的对象(myObject),它们的constructor属性都指向Object构造函数。当你创建一个对象时,JavaScript会自动为该对象设置constructor属性,以便能够追溯到创建它的构造函数。

myObjectLiteral是一个对象字面量,myObject是通过Object构造函数创建的对象(例如myObject = new Object())。

当访问它们的constructor属性时,都返回function Object(){{...}},这表明它们都是由Object构造函数创建的。不过需要注意的是,虽然对象字面量看起来没有显式使用Object构造函数创建,但在JavaScript内部,对象字面量的创建机制与使用Object构造函数有一定的关联,所以它们的constructor属性也指向Object构造函数。

绕过有缺陷的密钥清理

网站试图防止原型污染的一种明显方法是在将属性键合并到现有对象之前对其进行清理。这意味着在处理用户输入或外部数据时,应该验证和过滤掉可能引起原型污染的属性键。例如,如果用户输入的属性键是__proto__,那么在合并到现有对象之前,应该将其过滤掉或进行适当的处理。

一个常见的错误是未能递归清理 Importing 字符串。这意味着如果用户输入的数据包含嵌套的对象或数组,那么仅仅清理顶层的属性键是不够的。还需要递归地清理每一层的属性键。例如:

https://example.com/?data=%7B%22__proto__%22:%7B%22polluted%22:%22value%22%7D%7D  

在这个 URL 中,data参数是一个 JSON 字符串,解码后会变成一个对象,其中包含一个__proto__属性。如果在合并到现有对象之前没有递归清理这个对象,那么就会导致原型污染。

END

客户端原型污染漏洞利用解析

老付

客户端原型污染漏洞利用解析

欢迎扫码

关注我们

网络安全

客户端原型污染漏洞利用解析
客户端原型污染漏洞利用解析
客户端原型污染漏洞利用解析

原文始发于微信公众号(老付话安全):客户端原型污染漏洞利用解析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月22日21:43:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   客户端原型污染漏洞利用解析https://cn-sec.com/archives/3540232.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息