权限控制漏洞实战:利用角色修改实现权限提升
我最近完成了PortSwigger Web安全学院中权限控制漏洞模块的第四个实验。这个实验室展示了一个常见但关键的网络应用漏洞:权限控制失效。
在这篇文章中,我将详细分析这个漏洞以及我利用它的步骤。
实验设置:简单目标与权限障碍
实验室提出了一个直接的目标:获取管理员面板访问权限并删除用户carlos。
管理员面板位于/admin端点,但受到保护。只有经过身份验证且roleid为2的用户才能访问。作为登录的标准用户,我最初的roleid是1。
第一步:初始侦察
使用提供的凭据登录后,我导航到"我的账户"页面。该部分包含更新电子邮件地址的功能,这是任何网络应用中的常见功能。
我输入了一个新的电子邮件地址,点击"更新",并使用Burp Suite拦截了请求。这是初始POST请求到/my-account/change-email的样子:
|
|
服务器的响应很有启发性:
|
|
服务器不仅确认了电子邮件更改,还泄露了敏感的用户元数据,包括我的roleid。
第二步:识别漏洞
应用程序的行为立即引起了警觉。为什么客户端会收到roleid?更重要的是,客户端能否影响它?
这指向了一个经典的权限控制失效问题。服务器未能正确授权用户提交的请求,隐含地信任客户端不会篡改自己的权限级别。
第三步:构造攻击
我将电子邮件更新请求发送到Burp Repeater以便更容易操作。然后我修改了JSON主体以包含roleid参数,试图将自己提升为管理员。
修改后的请求:
|
|
服务器响应:
|
|
成功!服务器接受了我的新roleid并相应更新了我的权限。访问控制确实被破坏了。
第四步:达成目标
有了新的roleid为2,我现在是管理员了。刷新页面后,导航菜单中显示了之前隐藏的"管理员面板"链接。
我导航到/admin,找到用户管理部分,并删除了carlos,成功完成了实验室。