访问控制安全模型是对一组独立于技术或实现平台的访问控制规则的定义。访问控制安全模型在操作系统、网络、数据库管理系统以及后台、应用程序和网络服务器软件中实施。多年来,已经设计了各种访问控制安全模型,已将访问控制策略与业务或组织规则和技术变化相匹配。主要包括以下四种:
- 程序化访问控制模型
- 自主访问控制模型(DAC)
- 强制访问控制模型(MAC)
- 基于角色的访问控制模型(RBAC)
2. 程序化(矩阵)访问控制模型
用户权限矩阵存储在数据库中,并参照该矩阵应用访问控制。这种访问控制可以包括角色、组、个人用户、流程集合或工作流,并且可以是高细粒度的。
3. 自主访问控制模型(DAC)
可以根据用户或指定的用户组来限制对资源或功能的访问。单个资源或功能的所有者能够向用户分配访问权限。该模型是高度细化的,定义了对单个资源或功能的用户访问权限。因此,模型的设计和管理可能会变得非常复杂。
4. 强制访问控制模型(MAC)
是一种集中控制的访问控制系统,主体对某个对象(文件或其他资源)的访问受到限制。与DAC不同,资源的用户和所有者无权委派或修改其资源的访问权限。这种模式通常被军队、保密单位的系统采用。
5. 基于角色的访问控制模型(RBAC)
可以定义指定的角色,并为其分配访问权限。然后分配给用户单个或多个角色。如果设计得当,可以提供足够的粒度,以便在复杂的应用程序中提供可管理的访问控制。例如,可以将采购办事员这个职位定义为对采购分类功能及其相关资源有访问权限的角色。当员工离开或担任该职位时,访问控制将简单的撤销或授权其账户为采购办事员的角色即可。
当有足够的角色来正确地调用访问控制,但又不会使模型过于复杂和难以管理时,RBAC是最有效的。
4. 访问控制漏洞利用
1. 垂直权限提升
如果用户可以访问到他们不被允许访问的功能时,即为垂直权限提升。例如,如果非管理用户实际上访问到管理页面。
- 仅受到有限防护的功能点
用户可以通过浏览器直接输入URL到管理功能页。开发者未对所有功能页面做好安全验证防护,导致未授权访问。
https://insecure-website.com/admin
例题1
有时路径并不好寻找,也无法预测,如下
https://insecure-website.com/administrator-panel-yb556
有时响应的JS代码中含有这个路径,其实这属于信息泄露的一种
<script>
var isAdmin = false;
if (isAdmin) {
...
var adminPanelTag = document.createElement('a');
adminPanelTag.setAttribute('https://insecure-website.com/administrator-panel-yb556');
adminPanelTag.innerText = 'Admin panel';
...
}
</script>
例题2
- 基于参数的访问控制方法
一些程序将用户的权限存储在了用户可控制的位置,如URL参数、cookie
https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1
例题 3、4
- 平台配置错误导致访问控制中断
一些程序的访问控制是依赖于平台基于角色对特定URL和HTTP的限制实现的。
DENY: POST, /admin/deleteUser, managers
禁止managers用户组的人员 使用删除账户的功能
但是可尝试修改访问方法
和 X-Original-URL
X-Rewrite-URL
两个header重写URL,实现绕过
POST / HTTP/1.1
X-Original-URL: /admin/deleteUser
...
例题 5、6
2. 横向权限提升
如果用户能够访问属于另一个用户的资源,即为横向权限提升。如查看他人个人信息页或查看工资单。
攻击手段与垂直权限提升攻击手段类似,如直接访问URL
https://insecure-website.com/myaccount?id=123
例题7、8、9
3. 从横向到纵向的权限提升
如果横向权限提升到了其他高权限账户,则实现了从横向到纵向的权限提升。
例题 10
4. 不安全的直接对象引用(IDOR)
应用程序直接调用被用户控制输入的信息进行查询,造成对恶意对象的直接调用。
- 对数据对象的直接引用
https://insecure-website.com/customer_account?customer_number=132355
如上URL,某个网站数据库存储的索引值(index)直接作为路径参数customer_number
的值。若防护不当,攻击者可以任意修改该值,查看其他索引值对应存储的信息。
若遍历到存储高权限账户的索引值,则攻击会造成很大的威胁。
- 对静态文件的直接引用
https://insecure-website.com/static/12144.txt
如上URL,某个网站将聊天记录以txt文档形式定期存储在服务其上,随着不断累积自动生成新的txt文档。网站可通过URL直接访问这些静态文件。若防护不当,攻击者可任意修改该URL路径,查看其他静态文件。
例题11
5. 多步骤业务流程中的访问控制漏洞
在处理比较重要的业务时,往往采用多步骤处理流程。以管理员更新指定账户信息的操作为例,往往涉及至少如下三个步骤:
- 读取指定用户的信息
- 提交变更
- 查看变化内容并确认
有时网站安全防护只针对部分步骤进行了访问控制,而忽略剩余页面的防护。比如,开发者对上述一、二两步骤设置访问控制,却默认到达第三步的用户为可信用户,无需再做访问控制。攻击者可以利用这点直接调到第三步进行未授权访问。
例题 12
6. 基于Referer的访问控制
有些网页的认证逻辑是,用户在登陆管理员页面/admin
时,进行严格的访问控制。但在执行后续操作时,如删除某个用户/admin/deleteUser
,则采取验证报头referer
的方式,验证其是否从/admin页面过来。
referer标头的作用是记录请求过来时的上一个路径,但此标头可以在Burp等类似工具中任意修改。
例题 13
7. 基于地理位置的访问控制
有些商业或社交媒体应用对访问者的位置进行访问控制,此种情况可以使用代理、VPN或者修改地理位置的插件进行篡改,从而实现绕过。
5. 漏洞实例
1. 不受保护的管理功能(Unprotected admin functionality)
- 目标
删除账户carlos
- 解题思路
随手一试有/robots.txt
得到路径/administrator-panel
可直接访问
2. 不受保护的管理功能但使用了不可预测的URL(Unprotected admin functionality with unpredictable URL)
- 目标
删除账户carlos
- 解题思路
在首页代码中发现js代码,获取后台管理路径/admin-mzk80q
var isAdmin = false;
if (isAdmin) {
var topLinksTag = document.getElementsByClassName("top-links")[0];
var adminPanelTag = document.createElement('a');
adminPanelTag.setAttribute('href', '/admin-mzk80q'); (关键信息在此行)
adminPanelTag.innerText = 'Admin panel';
topLinksTag.append(adminPanelTag);
var pTag = document.createElement('p');
pTag.innerText = '|';
topLinksTag.appendChild(pTag);
}
3. 由请求参数控制的用户角色(User role controlled by request parameter)
- 目标
删除账户carlos
测试账户:wiener:peter
- 解题思路
浏览数据包发现cookie中存在Admin=false
,改为true即可
GET /my-account HTTP/1.1
Host: 0ab100e204f55672c0eb16ac002b0029.web-security-academy.net
Cookie: session=DsCKlJOncLPK0Qw4ANnbaeMd0SjWW9m9; Admin=false
4. 可以在用户配置文件中修改用户角色(User role can be modified in user profile)
- 目标
管理页面路径为/admin
用户roleid=2
可访问。删除账户carlos
测试账户:wiener:peter
- 解题思路
- 经测试在更换邮箱功能点时发现如下数据包和响应,包含
roleid
- 经测试在更换邮箱功能点时发现如下数据包和响应,包含
POST /my-account/change-email HTTP/1.1
Host: 0aa400d30361cda2c0613cc0007b00f7.web-security-academy.net
{"email":"123@123.com"}
HTTP/1.1 302 Found
Location: /my-account
Content-Type: application/json; charset=utf-8
Connection: close
Content-Length: 115
{
"username": "wiener",
"email": "123@123.com",
"apikey": "EG450geTGShSaScJP4Wx0jQfObL3dITa",
"roleid": 1
}
- 因是json交互,尝试在请求json中,增加
roleid=2
POST /my-account/change-email HTTP/1.1
Host: 0aa400d30361cda2c0613cc0007b00f7.web-security-academy.net
{"email":"123@123.com",
"roleid":2
}
5. 可以绕过基于URL的访问控制(URL-based access control can be circumvented)
- 目标
管理页面在/admin
HTTP支持标头X-Original-URL
删除账户carlos
- 解题思路
本题访问/admin页面被拒绝,考虑使用X-Original-URL
重写URL,实现绕过
GET / HTTP/1.1
Host: 0a1400540499c19fc0588c9500a700cc.web-security-academy.net
X-Original-URL: /admin
GET /?username=carlos HTTP/1.1
Host: 0a1400540499c19fc0588c9500a700cc.web-security-academy.net
X-Original-URL: /admin/delete?username=carlos
6. 可以绕过基于方法的访问控制(Method-based access control can be circumvented)
- 目标
登陆账户wiener:peter 提升权限至administrator
可参考登陆administrator:admin熟悉整个流程
- 解题思路
暂略
7. 可控制请求参数中的用户的ID (User ID controlled by request parameter)
- 目标
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
(User ID controlled by request parameter)
- 目标
[外链图片转存中…(img-8KkcuaAg-1714797429502)]
[外链图片转存中…(img-syl457Ha-1714797429502)]
[外链图片转存中…(img-E0jSxn9a-1714797429503)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新