『web安全』未授权访问、越权漏洞
未授权访问
概念
-
定义
应用系统对业务功能页面没有进行有效的身份校验和权限控制,攻击者可以在没有登录的情况下直接访问未授权的页面、目录或资源,从而获取系统中的敏感信息或进行非法操作。
-
危害
- 数据泄露(个人隐私信息、账户相关信息和系统信息等)
- 系统安全(通过未授权访问可能修改某些应用系统功能或者数据库)
- 进一步利用
类型
组件类型
这种类型的未授权访问漏洞通常发生在系统的基础组件或服务上,如数据库、网络服务、容器等(Redis、MongoDB、docker)。这些组件一般通过特定端口提供服务,如果没有进行正确的访问控制或身份验证,就可能发生未授权访问漏洞。
具体原理、利用方式、修复方法参考:常用的30+种未授权访问漏洞汇总
web类型
通过Web应用层面的漏洞进行未授权访问,通常这些漏洞暴露在应用的前端,可能因为错误的身份验证、缺乏权限管理等方式被利用。例如有些CMS存在未授权文件上传、未授权账号创建等。
挖掘方法
-
针对组件类型
通过 Nmap 进行端口扫描,识别目标系统上暴露的端口和服务。例如,我们扫描到常见的开放组件服务如FTP(21端口)、MongoDB(27017端口)、Elasticsearch(9200端口)等,就可以考虑是否存在组件类型未授权访问
-
针对web类型
1)收集API接口信息
使用工具快速搜集网站的HTML、CSS、JS文件中暴露的API接口
2)构造请求方式
系统一般通过检测Cookie、token等认证因子判断用户是否登录,在测试的时候我们将认证因子删除,分析删除前后返回包的响应是否发生了变化来判断是否存在未授权访问。
这里我一般使用burp suite插件 burp-unauth-checker (或者网上用的Authz比较多),将数据包中的Cookie等字段值置空或者修改为无用字符,快速自动化挖掘此类漏洞。
越权漏洞
概念
-
定义
因为应用程序未对当前用户操作的身份权限进行严格校验,所以用户可以使用超出自己权限范围的功能,从而产生一些越权行为。
- 水平越权:用户通过越权访问其他用户拥有的资源,发生在具有相同权限级别的用户之间。例如:低权限用户能够操作和修改其他用户的数据。
- 垂直越权:用户通过越权访问具有更高权限的资源或功能的攻击行为。例如,攻击者从普通用户身份成功跃迁为管理员。
-
产生原因
Web应用程序的开发者安全意识不足,认为通过登录即可验证用户的身份,而对用户登录之后的操作不做进一步的权限验证,进而导致越权问题。
-
危害
- 敏感数据泄露
- 权限提升:攻击者可能利用越权漏洞提升其权限级别,获得系统管理员或其他高权限用户的特权。这可能导致对整个系统的完全控制,并进行更广泛的恶意活动。
挖掘方法
根据产生原理,越权类漏洞可以分为两大类:
-
未使用 cookie 鉴权:通过修改 userid 等字段进行越权。
-
使用 cookie 鉴权:未检测对应操作是否符合当前权限预期。
未使用cookie鉴权
-
全局全局搜索userid、id、countid等字符
- 通过修改对应id值进⾏判断
- 空值绕过:对于如
userID=1111&userIDcard=3401212312312128
等多条件匹配获取用户数据的情况,如果程序未对空值进行校验,攻击者可以尝试将userIDcard
等参数赋值为空或者去除这些参数,看是否可以通过userID
越权遍历相关信息。
-
如果存在获取验证码的功能点
系统可能没有验证请求中
user
字段的合法性或是否与当前用户的身份匹配。因此,攻击者可以修改userid
获取其他用户的验证码,并且利用验证码进行登录、密码重置或账户修改等越权操作
使用cookie鉴权
-
情况一:只有普通账号
这种情况适用于攻击者通过暴力破解等手段获得了一个普通账号,然后尝试进行越权操作。
1)通过
JS
或Swagger
获取暴露的API接口2)删除认证因子:攻击者访问接口时,系统通常会要求提供某些认证信息(如 Cookie、Token)。攻击者可以尝试删除或绕过这些认证因子,看看是否可以直接执行未授权的操作。
3)查看返回提示信息
- 如果系统返回错误信息,且提示缺少某些参数或某些参数不能为
null
,攻击者可以通过这种提示来构造请求包。可以尝试在请求中提供正确的参数,然后进行 fuzzing 操作,即通过修改请求参数的值,检查是否能够执行不属于该用户的操作。 - 如果系统提示“无权限”或其他错误信息,说明没有越权漏洞。
- 如果系统返回错误信息,且提示缺少某些参数或某些参数不能为
-
情况二:拥有两个账号密码(管理员和普通用户账号,检测是否存在垂直越权)
这种情况适用于白/灰盒渗透测试,已经提供了管理员账号
1)分别登录管理员和普通用户账号,获取cookie
2)使用管理员账号进行一些权限操作,例如添加用户、修改数据等。操作时,通过 Burp Suite 抓取数据包
3)将抓取到的数据包发送到重放模块,将 管理员 Cookie 替换为 普通用户 Cookie。
4)如果替换 Cookie 后,操作仍然能够成功执行(即普通用户仍然能够执行管理员权限操作),那么就表明系统存在越权漏洞。因为普通用户不应该能够执行管理员操作。
防御方法
- 实施严格的访问控制:确保在应用程序的各个层面上实施适当的访问控制机制,包括身份验证、会话管理和授权策略。对用户进行适当的身份验证和授权,仅允许其执行其所需的操作。
- 最小权限原则:在分配用户权限时,采用最小权限原则,即给予用户所需的最低权限级别,以限制潜在的越权行为。用户只应具备完成其任务所需的最小权限。
- 验证用户输入:应该对所有用户输入进行严格的验证和过滤,以防止攻击者通过构造恶意输入来利用越权漏洞。特别是对于涉及访问控制的操作,必须仔细验证用户请求的合法性。
- 安全审计和监控:建立安全审计和监控机制,对系统中的访问活动进行监视和记录。这可以帮助检测和响应越权行为,并提供对事件的审计跟踪。