access control

什么是访问控制?

访问控制是对谁或什么有权执行操作或访问资源的约束的应用。在 Web 应用程序的上下文中,访问控制依赖于身份验证和会话管理:

  • 身份验证确认用户是他们所说的人。
  • 会话管理可识别同一用户正在发出哪些后续 HTTP 请求。
  • 访问控制确定是否允许用户执行他们尝试执行的操作。

损坏的访问控制很常见,并且通常存在严重的安全漏洞。访问控制的设计和管理是一个复杂而动态的问题,它将业务、组织和法律约束应用于技术实现。访问控制设计决策必须由人类做出,因此出错的可能性很高。

垂直权限提升

如果用户可以访问他们不允许访问的功能,则这是垂直权限提升。例如,如果非管理用户可以访问管理页面,他们可以在其中删除用户帐户,则这是垂直权限提升。

水平权限提升

如果用户能够访问属于其他用户的资源,而不是他们自己的该类型的资源,则会发生水平权限提升。例如,如果员工可以访问其他员工的记录以及他们自己的记录,那么这就是横向权限提升。

横向权限提升攻击可能使用与垂直权限提升类似的利用方法。例如,用户可以使用以下 URL 访问自己的帐户页面:

https://insecure-website.com/myaccount?id=123

如果攻击者将参数值修改为其他用户的参数值,他们可能会访问其他用户的帐户页面以及关联的数据和函数。id

1)先用wiener:peter登录,抓取requst包,发到repeater,修改id=wiener为id=carlos打开响应页面提交API密钥就成功了

在某些应用程序中,可利用参数没有可预测的值。例如,应用程序可以使用全局唯一标识符 (GUID) 来标识用户,而不是递增的数字。这可以防止攻击者猜测或预测其他用户的标识符。但是,属于其他用户的 GUID 可能会在引用用户的应用程序中的其他位置披露,例如用户消息或评论。

1)查看carlos的博客保存id

2)用wiener:peter登录修改之前保存的id

3)刷新之后提交API密钥

在某些情况下,应用程序会检测何时不允许用户访问资源,并返回指向登录页面的重定向。但是,包含重定向的响应可能仍包含属于目标用户的一些敏感数据,因此攻击仍然成功。

提交api密钥就成功了

水平到垂直权限提升

通常,水平权限提升攻击可以通过危害特权更高的用户而转变为垂直权限升级。例如,水平升级可能允许攻击者重置或捕获属于其他用户的密码。如果攻击者以管理用户为目标并破坏其帐户,则他们可以获得管理访问权限,从而执行垂直权限提升。

攻击者可能能够使用已针对水平权限提升描述的参数篡改技术访问其他用户的帐户页面:

https://insecure-website.com/myaccount?id=456

如果目标用户是应用程序管理员,则攻击者将获得对管理帐户页面的访问权限。此页面可能会泄露管理员的密码或提供更改密码的方法,或者可能提供对特权功能的直接访问。

1)登录wiener:peter抓包发到repeater修改id=administrator发送

2)没有登录到管理员面板,在repeater响应包的正文里面发现有password保存用这个密码登录管理员账号,成功,再删除carlos用户

什么是不安全的直接对象引用 (IDOR)?

不安全的直接对象引用 (IDOR) 是一种访问控制漏洞,当应用程序使用用户提供的输入直接访问对象时会出现该漏洞。IDOR一词因出现在OWASP 2007前十名中而广为人知。但是,这只是许多可能导致访问控制被规避的访问控制实施错误的一个例子。IDOR 漏洞最常与水平权限提升相关联,但它们也可能与垂直权限提升有关。

IDOR 示例

访问控制漏洞的例子很多,其中用户控制的参数值被用来直接访问资源或函数。

直接引用静态文件的 IDOR 漏洞

当敏感资源位于服务器端文件系统上的静态文件中时,通常会出现 IDOR 漏洞。例如,网站可能会使用递增的文件名将聊天消息脚本保存到磁盘,并允许用户通过访问如下所示的 URL 来检索这些脚本:

https://insecure-website.com/static/12144.txt

在这种情况下,攻击者只需修改文件名即可检索其他用户创建的脚本,并可能获取用户凭据和其他敏感数据。

1)点击live chat,发送消息,点击view script,抓包,修改参数为1.txt就可以看到密码

1)登录管理员账号,浏览到升级用户的界面,抓取点击ok的请求包

2)再隐私窗口登录wiener:peter普通用户账号,复制cookie到repeater,修改用户carlos为wiener,放包就可以了。

基于位置的访问控制

某些网站会根据用户的地理位置强制实施访问控制。例如,这可能适用于适用州立法或业务限制的银行应用程序或媒体服务。这些访问控制通常可以通过使用 Web 代理、VPN 或操纵客户端地理位置机制来规避。

如何防止访问控制漏洞

通过采用深度防御方法并应用以下原则,可以防止访问控制漏洞:

  • 切勿仅依靠混淆进行访问控制。
  • 除非资源旨在公开访问,否则默认情况下拒绝访问。
  • 尽可能使用单个应用程序范围的机制来强制实施访问控制。
  • 在代码级别,强制要求开发人员声明每个资源允许的访问,并默认拒绝访问。
  • 彻底审核和测试访问控制,以确保它们按设计工作。
posted @ 2024-01-31 10:12  CLLWA  阅读(10)  评论(0编辑  收藏  举报