【Burp系列】超全越权漏洞实验总结
https://portswigger.net/web-security/access-control/lab-unprotected-admin-functionality
1. 访问控制【越权】
https://portswigger.net/web-security/access-control#what-is-access-control
### 什么是访问控制:
访问控制是对谁或什么被授权执行操作或访问资源的限制的应用。在 Web 应用程序的上下文中,访问控制依赖于身份验证和会话管理:
身份验证可确认用户的真实身份。
会话管理可识别同一用户正在发出哪些后续 HTTP 请求。
访问控制确定是否允许用户执行他们尝试执行的操作。
损坏的访问控制很常见,并且通常会带来严重的安全漏洞。访问控制的设计和管理是一个复杂且动态的问题,它将业务、组织和法律约束应用于技术实现。访问控制设计决策必须由人类做出,因此出错的可能性很高。
实验1:不受保护的管理功能
### 实验要求:
该实验室有一个不受保护的管理面板。
通过删除用户来解决实验室问题carlos。
### 实验操作:
robots.txt通过附加实验室 URL 转到实验室并查看/robots.txt。请注意,该Disallow行公开了管理面板的路径。
在 URL 栏中,替换/robots.txt为/administrator-panel以加载管理面板。
删除carlos。
管理面板不受凭据保护:
实验2:未受保护的管理功能和不可预测的 URL
### 实验要求:
该实验室有一个不受保护的管理面板。它位于不可预测的位置,但该位置已在应用程序中的某处公开。
通过访问管理面板并使用它删除用户来解决本实验carlos。
### 实验操作:
使用 Burp Suite 或 Web 浏览器的开发人员工具查看实验室主页的源代码。
请注意,它包含一些公开管理面板 URL 的 JavaScript。
加载管理面板并删除carlos.
实验3:通过请求参数控制用户角色【cookie参数伪造垂直越权】
### 实验要求:
该实验室有一个管理面板/admin,位于 ,它使用可伪造的 cookie 来识别管理员。
通过访问管理面板并使用它删除用户来解决本实验carlos。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
浏览/admin并发现您无法访问管理面板。
浏览至登录页面。
在 Burp Proxy 中,打开拦截并启用响应拦截。
完成并提交登录页面,并在 Burp 中转发生成的请求。
观察响应设置了 cookie Admin=false。将其更改为Admin=true.
加载管理面板并删除carlos.
某些应用程序在登录时确定用户的访问权限或角色,然后将此信息存储在用户可控制的位置,如隐藏字段、cookie或预设查询字符串参数。应用程序根据提交的值做出后续访问控制决策
例如:
https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1
这种方法从根本上讲是不安全的,因为用户可以简单地修改值并获得对他们未被授权的功能(如管理功能)的访问权限
实验4:用户角色可以在用户配置文件中修改【垂直越权】
### 实验要求:
该实验室的管理面板位于/admin。只有 a 为 2 的登录用户才能访问它roleid。
通过访问管理面板并使用它删除用户来解决本实验carlos。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
使用提供的凭据登录并访问您的帐户页面。
使用提供的功能更新与您的帐户关联的电子邮件地址。
请注意,响应包含您的角色 ID。
将电子邮件提交请求发送到Burp Repeater,添加"roleid":2到请求正文中的JSON中,然后重新发送。
请注意,响应显示 your roleid已更改为 2。
浏览/admin并删除carlos.
实验5:由请求参数控制的用户ID【水平越权】
### 实验要求:
该实验室在用户帐户页面上存在水平提权漏洞。
要解决该实验,请获取用户的 API 密钥carlos并将其作为解决方案提交。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
使用提供的凭据登录并转到您的帐户页面。
请注意,URL 的“id”参数中包含您的用户名。
将请求发送到 Burp Repeater。
将“id”参数更改为carlos。
检索并提交 的 API 密钥carlos。
实验6:用户ID由请求参数控制,用户ID不可预测
### 实验要求:
该实验室在用户帐户页面上存在水平提权漏洞,但使用 GUID 来识别用户。
要解决该实验室问题,请找到 的 GUID carlos,然后提交他的 API 密钥作为解决方案。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
查找 的博客文章carlos。
单击carlos并观察 URL 包含他的用户 ID。记下此 ID。
使用提供的凭据登录并访问您的帐户页面。
将“id”参数更改为保存的用户 ID。
检索并提交 API 密钥。
记录下用户id:
userId=61e346b1-dc08-4a1f-b0e5-d59a126ecb0a
实验7:请求参数控制用户ID,重定向时数据泄露
### 实验要求:
该实验室包含一个访问控制漏洞,其中敏感信息在重定向响应正文中泄露。
要解决该实验,请获取用户的 API 密钥carlos并将其作为解决方案提交。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
使用提供的凭据登录并访问您的帐户页面。
将请求发送到 Burp Repeater。
将“id”参数更改为carlos。
请注意,虽然响应现在将您重定向到主页,但它的正文包含属于 的 API 密钥carlos。
提交 API 密钥。
实验8:用户ID由请求参数控制,密码泄露
### 实验要求:
该实验室的用户帐户页面包含当前用户的现有密码,并预先填充了屏蔽输入。
要解决该实验,请检索管理员的密码,然后使用它来删除用户carlos。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
使用提供的凭据登录并访问用户帐户页面。
将 URL 中的“id”参数更改为administrator。
查看 Burp 中的响应并观察到它包含管理员的密码。
登录管理员帐户并删除carlos。
实验9:不安全的直接对象引用
### 实验要求:
本实验将用户聊天日志直接存储在服务器的文件系统上,并使用静态 URL 检索它们。
通过找到用户的密码carlos并登录其帐户来解决实验室问题。
###
选择实时聊天选项卡。
发送消息,然后选择查看记录。
查看 URL 并观察记录是文本文件,其文件名包含递增的数字。
将文件名更改为1.txt并查看文本。注意聊天记录中的密码。
返回实验室主页面并使用窃取的凭据登录。
使用凭据登陆:carlos:z608sgq5p1rcy2k6x94v
实验10:基于 URL 的访问控制可以被规避
### 实验要求:
该网站在 处有一个未经身份验证的管理面板/admin,但前端系统已配置为阻止对该路径的外部访问。然而,后端应用程序是建立在支持X-Original-URL标头的框架之上的。
要解决该实验,请访问管理面板并删除用户carlos
### 使用操作:
尝试加载/admin并观察是否被阻止。请注意,响应非常简单,表明它可能来自前端系统。
将请求发送到 Burp Repeater。将请求行中的 URL 更改为/并添加 HTTP 标头X-Original-URL: /invalid。观察应用程序返回“未找到”响应。这表明后端系统正在处理来自X-Original-URL标头的 URL。
将标头的值更改X-Original-URL为/admin。请注意,您现在可以访问管理页面。
要删除carlos,请添加?username=carlos到实际查询字符串中,并将X-Original-URL路径更改为/admin/delete。
实验11:基于方法的访问控制可以被规避
### 实验要求:
本实验部分基于 HTTP 请求方法实现访问控制。您可以通过使用凭据登录来熟悉管理面板administrator:admin。
要解决该实验室问题,请使用凭据登录wiener:peter并利用有缺陷的访问控制来提升自己成为管理员。
### 实验操作:
使用管理员凭据登录。
浏览到管理面板,升级carlos并将 HTTP 请求发送到 Burp Repeater。
打开私人/隐身浏览器窗口,然后使用非管理员凭据登录。
尝试通过将非管理员用户的会话 cookie 复制到现有的 Burp Repeater 请求中来重新升级carlos该用户,并观察响应显示“未经授权”。
将方法从 更改为POST并POSTX观察到响应更改为“缺少参数”。
GET通过右键单击并选择“更改请求方法”将 请求转换为使用该方法。
将用户名参数更改为您的用户名并重新发送请求
登陆管理员,获得提升权限的api接口:
将wiener登陆后的请求包发送到repeater,使用管理员提升用户权限的接口,使用username=wiener&action=upgrade做完
post参数发送请求,此时cookie的身份是wiener.
使用get方法绕过,提升权限:
实验12:多步骤流程,一步无访问控制
### 实验要求:
该实验室的管理面板包含有缺陷的用于更改用户角色的多步骤流程。您可以通过使用凭据登录来熟悉管理面板administrator:admin。
要解决该实验室问题,请使用凭据登录wiener:peter并利用有缺陷的访问控制来提升自己成为管理员。
### 实验操作:
使用管理员凭据登录。
浏览到管理面板,升级carlos并将确认 HTTP 请求发送到 Burp Repeater。
打开私人/隐身浏览器窗口,然后使用非管理员凭据登录。
将非管理员用户的会话 cookie 复制到现有的 Repeater 请求中,将用户名更改为您的用户名,然后重播。
获得提升权限功能的api接口:
将提权的流程1数据包发送到repeater,修改cookie为wiener,username=wiener 发现提权失败:
将提升权限第二个步骤的数据包发到repeater,替换cookie为wiener,302跟随重定向成功提升wiener的权限。
实验13:基于Referer的访问控制
### 实验要求:
本实验根据 Referer 标头控制对某些管理功能的访问。您可以通过使用凭据登录来熟悉管理面板administrator:admin。
要解决该实验室问题,请使用凭据登录wiener:peter并利用有缺陷的访问控制来提升自己成为管理员。
### 实验操作:
使用管理员凭据登录。
浏览到管理面板,升级carlos并将 HTTP 请求发送到 Burp Repeater。
打开私人/隐身浏览器窗口,然后使用非管理员凭据登录。
浏览/admin-roles?username=carlos&action=upgrade并观察到,由于缺少 Referer 标头,该请求被视为未经授权。
将非管理员用户的会话 cookie 复制到现有的 Burp Repeater 请求中,将用户名更改为您的用户名,然后重播。
google浏览器:crtl+shift+n:打开一个无痕浏览器:wiener:peter登陆
注意:refer参数:这说明鉴定权限的参数不是cookie,而是refer值:是否为:target_site/admin
参考:
### portswigger官方访问控制【越权】:
https://portswigger.net/web-security/access-control/lab-unprotected-admin-functionality
### 【Burp系列】超全越权漏洞实验总结
https://mp.weixin.qq.com/s/hlmC6sMpwT5G5qSV8-4y5A
### owasp
https://owasp.org/www-project-web-security-testing-guide/stable/
### PayloadsAllTheThings
https://github.com/swisskyrepo/PayloadsAllTheThings