访问控制
那么什么是访问控制呢?访问控制是一种策略,在这种策略的控制下,用户的操作不能逾越预设好的权限边界。而访问控制一旦失效通常会导致未认证信息泄露、内部数据篡改、数据删除和越权操作等后果。访问控制失效型问题通常有以下几种类型:
- 系统在实现过程中违背了“最小权限原则” 或 “默认拒绝原则”,在这种情况下用户可以获得一些特殊权限,而这些特殊权限原本只应该授权给特定的用户或角色;
- 通过修改 URL 地址、内部程序状态、HTML 页面,或者使用 Cyber 工具修改 API 请求的方式绕过访问控制
- 通过提供唯一 ID 的方式预览或者修改其他账户信息及数据;
- 未经过访问控制地通过 POST、PUT 和 DELETE 方法访问 API;
- 通常意义上的提权,比如未登录状态下的用户操作,或者常规用户登录状态下的管理员操作;
- 元数据操纵,比如重放或者修改 JWT(JSON Web Token)访问控制令牌,或者通过操纵 Cookie 的方式进行提权;
- CORS 误配置,可以导致来自未认证源的 API 访问。
这里我们首先来看几种简单攻击场景。
- 这个应用在 SQL 调用中直接使用了未经验证的数据,并利用该数据进行信息查询:
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery();
对于一个攻击者而言,只需要简单地在浏览器地址栏中修改 acct 参数,即可对 SQL 语句进行操纵,而在未经验证的情况下,该攻击者可以访问到其他账户的信息。
https://example.com/app/accountInfo?acct=notmyacct
- 一个攻击者可以很轻松地修改 URL 地址,尝试去访问他的目标链接,比如这里攻击者试图通过 URL 地址修改直接访问 admin 页面:
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo
如果攻击者成功访问了第二个链接,那么说明系统在权限设计和访问控制上就是存在问题的。
- 由于实现过程中未对用户访问参数设置边界,导致了很多越权问题的发生:
https://example.com/order/?order_id=2021102617429999
攻击者可以尝试修改上述 API 接口中的 order_id 参数,使其在程序接口上的输入合法,但是对于用户而言却是越权行为。
- HTTP PUT 方法最早目的用于文件管理操作,可以对网站服务器中的文件实现更改删除的更新操作,该方法往往可以导致各种文件上传漏洞,造成严重的网站攻击事件:
put /root/Desktop/shell.php
上述代码在支持 PUT 方法的环境中,上传 Webshell 进行提权;在实际运用中,若必须启用该方法,则需要对该方法涉及文件资源做好严格的访问权限控制。
- Web