浅谈“越权与提权”
0x00 前言
很早之前就想写这篇博客,但是Java反序列化的任务很重,就一直搁置着。偷得浮生半日闲,就这样写一篇吧。
0x01 概念
我最开始并不能清晰地理解越权和提权是什么,常常把它们混为一谈,实际上二者还是有很大差别的。
越权:一般在Web服务中,由于权限控制不当,用户通过某些手段访问本不该有权限的操作。这往往是由于Web服务的逻辑漏洞造成的。
提权,一般是在拿到shell之后,由于权限较低,利用系统漏洞或配置错误来提高自己的权限。
一般来说,越权主要涉及访问控制的错误,而提权主要指在系统中提升权限的操作。
0x02 越权
概述
越权漏洞有两大类:水平越权、垂直越权。
水平越权发生在具有相同权限级别的用户之间,攻击者通过利用漏洞,可以访问其他用户的资源或者执行一些不符合用户现有权限的操作。
垂直越权发生在具有多个权限级别的系统中,攻击者通过利用漏洞,功能模块从低权限级别跳转到高权限级别。
举一个简单的例子:
用两个用户A、B以及管理员C。每个用户只能看自己的文章,管理员可以对用户的文章进行任意操作。
水平越权:用户A利用漏洞,成功访问到用户B的文章,这属于同一权限层级的越权行为。
垂直越权:用户A利用漏洞,成功得到管理员权限,可以对B的文章进行任意操作,这属于不同权限层级的越权行为。
实例
水平越权
假设有一个在线论坛,每个用户都有一个唯一的用户ID,并且用户可以通过URL访问他们自己的帖子。应用程序的某个页面的URL结构如下:
1 | https://example.com/forum/posts?userId=<用户ID> |
假设用户Alice的userId=1,她可以这样访问自己的帖子:
1 | https://example.com/forum/posts?userId=1 |
但是Alice可以修改userId,比如修改成userId=2:
1 | https://example.com/forum/posts?userId=2 |
如果此时应用程序没有验证Alice的身份和权限,那么Alice将成功访问到userId=2对应用户的帖子。
垂直越权
假设有一个电子商城网站,有用户和管理员两种角色。用户的权限只能查看和下单商品,而管理员则可以对商品信息进行操作。
如果攻击者发现cookie里有一个roleID的角色参数,那么攻击者可以通过修改该值,然后对商品进行增删改查等管理员权限才具有的操作。
危害
常见危害如下:
- 数据泄露:攻击者可以通过越权访问敏感数据,如个人信息、财务数据或其他敏感业务数据。这可能导致违反隐私法规、信用卡信息泄露或个人身份盗用等问题。
- 权限提升:攻击者可能利用越权漏洞提升其权限级别,获得系统管理员或其他高权限用户的特权。这可能导致对整个系统的完全控制,并进行更广泛的恶意活动。
修复
- 实施严格的访问控制:确保在应用程序的各个层面上实施适当的访问控制机制,包括身份验证、会话管理和授权策略。对用户进行适当的身份验证和授权,仅允许其执行其所需的操作。
- 验证用户输入:应该对所有用户输入进行严格的验证和过滤,以防止攻击者通过构造恶意输入来利用越权漏洞。特别是对于涉及访问控制的操作,必须仔细验证用户请求的合法性。
- 最小权限原则:在分配用户权限时,采用最小权限原则,即给予用户所需的最低权限级别,以限制潜在的越权行为。用户只应具备完成其任务所需的最小权限。
- 安全审计和监控:建立安全审计和监控机制,对系统中的访问活动进行监视和记录。这可以帮助检测和响应越权行为,并提供对事件的审计跟踪。
0x03 提权
提权根据操作系统可以分为Linux提权和Windows提权,本文主要讲解Linux提权
问题
带着问题去学习,才能更深入地思考。在了解提权之前,需要带上几个问题:
- 什么是系统提权?
- 为什么获取的 shell 会有高低权限的区别?
- 为什么我们需要进行提权?
概述
什么是系统提权?
这个问题主要跟渗透测试有关,一次完整的渗透测试流程一般包含8个步骤:
主机发现 > 服务枚举 > 实施攻击 > 获取shell > 权限提升 > 权限维持 > 内网渗透 > 痕迹清除
不难看出在第四步我们获得了shell,但是初始shell为低权限用户,需要提升权限为高权限用户,这个过程就是“提权”。
为什么 shell 会有高低权限的区别?
当我们从Web服务进入到服务器时,我们的权限是由tomcat
中间件提供的,看下图:
假设 tomcat 服务以普通用户www-data
的权限运行并提供 Web 服务,那么如果黑客通过 Web 漏洞获取到 shell,该shell 就是一个www-data
用户权限的 shell——此时就需要提权。
反之,若 tomcat 是以root
用户权限运行,那黑客获取到的 shell 就是 root 权限。
为什么要提权?
在渗透测试中,获得高权限往往是必要的:
高权限能对更多的文件进行「增删改查」操作,便于进一步收集主机系统中的敏感信息
inux 系统的 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展
Windows 系统中的 system 权限可提取内存中的密码 Hash,可进一步用于域渗透
0x04 小结
提权方法之后会单开一章,先到这里。
参考教程: