Web安全访问控制及权限提升漏洞
1、什么是访问控制
通常应用程序首先验证用户身份(账号密码登录),随后确认后续请求是否由该用户发出(会话管理),然后判断是否允许用户执行“所请求的操作”或访问"所请求的资源"(访问控制)从用户角度访问控制模型的分为以下类型:
- 垂直访问控制:控制不同权限等级的用户访问应用程序不同的功能;如“管理员”可以修改/删除账号,而普通账号无法操作。
- 水平访问控制:控制用户只能访问自己的资源,而不能访问其他用户相同类型的资源;如“银行程序用户只能从自己的账号进行付款,而不能查看其他用户的账户”。
- 上下文相关的访问控制:防止用户以错误的顺序执行操作。如零售网站阻止用户付款后,修改订单信息。
出现访问控制漏洞的原因:理论上应用程序需要对每一个请求,以及特定用户在特定时刻的每一项操作,都需要进行访问控制检查,由于该策略是由人定义,所以常常出现安全问题。
2、访问控制漏洞
应用程序允许攻击者执行某种攻击者没有权限执行的操作,就会出现访问控制漏洞。
三种访问控制模型分别对应着“垂直权限提升”、“水平权限提升”、“多步骤访问控制”的三种漏洞,并且这些漏洞之间没有明确界限。按照漏洞的表现形式和检测方法的差异会分为很多不同的类型:未受保护的功能、基于标识符的访问控制、基于多步骤的访问控制漏洞、IDOR、不安全的访问控制机制、访问控制绕过漏洞等。
漏洞示例
未受保护的功能
描述
应用程序对敏感功能没有任何访问控制,而是依赖URL的隐蔽性和不可猜测进行访问控制;如:管理用户的后台页面包含各种管理功能,而开发人员认为用户登陆后看不到后台页面,因此任务安全。但是功能链接可能在其他公开位置(如:robots.txt文件)或url爆破或JS、html和CSS源代码中找到。
造成垂直权限提升漏洞实例1:通过robots.txt文件找到后台链接
实例2:网站通过对管理员页面进行了复杂命名,无法通过猜测和爆破发现,但是在响应消息中发现该URL。
基于标识符(参数)的访问控制
描述
某些应用程序可能利用参数的不可预测性,例如将用户身份标识uid设置为无法猜测的随机值;但是该uid可能会在应用程序中公开,如“评论”、“用户消息”等位置。
造成水平权限提升漏洞
实例1:更换用户身份标识的参数
用户通过以下URL访问账户页面https://insecure-website.com/myaccount?id=123、https://ac161fa11e6ee89a80855e0a00b200c2.web-security-academy.net/my-account?id=carlos
如果用户通过将id变更,可能会访问到其他另一个用户的账户页面
首先抓取用户查询key的请求
在网站的响应页面中找到了其他用户的id
替换id即可越权查看该用户的KEY
造成垂直权限提升漏洞
应用程序在登录时确定用户的访问权限或角色,然后将其存储在用户可控制的位置(如:隐藏字段、cookie或预设查询字符串、响应内容),应用程序根据提交的值做出访问控制。攻击者能够修改标识访问权限或角色的参数进行权限提升。
实例1:攻击者可以修改url中的参数(其标识用户或其权限)。
https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1
实例2:攻击者可以修改cookie中的参数(其标识用户或其权限)。
直接请求管理页面失败
尝试将cookie中的参数进行变更
成功绕过访问控制
实例3:攻击者分析响应可发现权限配置参数(其标识用户或其权限),并将其添加到修改请求中。
查看响应中包含用户的其他信息
尝试提交该请求,失败
尝试多个参数同时提交,成功越权
造成水平-垂直权限提升
实例1:修改标识用户身份的参数为管理员
攻击者可以使水平权限提升漏洞转变为垂直权限提升漏洞,如“https://insecure-website.com/myaccount?id=456“变更id参数,能够访问其他用户的账户页面,如果通过将id变更为管理员,获取管理员账户的访问权限。
基于多步骤的访问控制漏洞
简述
应用的有业务可能会涉及到多步骤,如:(1)加载包含用户详细信息表单、(2)提交修改、(3)查看更改并确认修改,网站可能对其中某些步骤进行了严格访问控制,但是忽略了一个步骤就会出现漏洞。
实例1:
使用高权限账户抓取多步骤的全过程:
使用低权限用户访问这2个请求,发现第二个阶段可以越权访问。
不安全的直接对象引用IDOR
简述
当应用程序使用用户提交的数据直接访问对象时,就可能出现IDOR漏洞。攻击者通过变更引用的对象进行攻击。
直接引用数据库对象的IDOR漏洞
实例1:
如果网站从数据库中查询客户信息的URL如下:https://insecure-website.com/customer_account?customer_number=13235
攻击者可以变更customer_number的值,绕过访问控制查看其他客户信息,造成权限提升漏洞。
直接引用静态文件的IDOR漏洞
敏感信息位于服务器端的静态资源中,容易出现IDOR漏洞。
实例1:攻击者通过修改静态文件ID,越权获取其他信息
直接引用方法的IDOR漏洞
应用程序的API的URL和参数被泄露,或方法名可猜测,可能出现直接引用方法的IDOR漏洞。
实例1:
系统某些API的URL:http://wahh-app.com/public/securityCheck/getCurrentUserRoles
如果系统除对getCurrentUserRoles方法外,其他方法没有访问控制,就会出现安全风险。如(getAllUserRoles、getAllRoles和getAllusers等)
不安全的访问控制机制
基于referfer的访问控制漏洞
有些应用程序基于referer(标识http请求发起的网页url)进行访问控制,由于该参数客户端可控制就会出现漏洞。
实例1:
网站管理后台"/admin"进行了严格的访问控制,但是管理后台的子页面如“/admin/deleteuser”仅校验了referer是否包含"/admin"路径,就会出现漏洞。
基于地理位置的访问控制漏洞
有些网站对用户的地址位置进行访问控制。攻击者可以通过VPN、web代理绕过限制。
访问控制阻断机制错误漏洞
访问控制阻断所产生的重定向页面,可能就包含越权访问的信息。
实例1:越权阻断响应中包含敏感信息
以下请求会被JS重定向,但是源代码中还是泄露了越权信息。
访问控制绕过漏洞
基于HTTP方法和覆盖路径的绕过方式
应用程序对用户角色访问的url和http方法实施访问控制,如:DENY:POST, /admin/deleteUser,managers,即拒绝managers角色用户使用post方法访问/admin/deleteUser路径。
一些web框架支持非标准HTTP头,使用X-Original-URL和X-Rewrite-URL可覆盖原始中的URL能够绕过前端控件的访问控制。
一些网站支持其他http请求方法,因而攻击者能够绕过前端控件的访问控制。
实例1:攻击者使用X-Original-URL覆盖url中的路径。
直接请求发现,被拦截
使用X-Original-URL覆盖url的路径后成功越权
实例2:攻击者使用修改HTTP方法
使用administrator用户操作,并抓取修改wiener用户权限的请求
使用wiener用户发起请求失败
修改HTTP请求方法,成功绕过
4、参考文章
*黑客攻防技术宝典-Web实战篇(第2版)-攻击访问控制
访问控制和权限提升https://portswigger.net/web-security/access-control
www.sec-in.com
在这里,探索技术与热爱