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的角色参数,那么攻击者可以通过修改该值,然后对商品进行增删改查等管理员权限才具有的操作。

危害

常见危害如下:

  1. 数据泄露:攻击者可以通过越权访问敏感数据,如个人信息、财务数据或其他敏感业务数据。这可能导致违反隐私法规、信用卡信息泄露或个人身份盗用等问题。
  2. 权限提升:攻击者可能利用越权漏洞提升其权限级别,获得系统管理员或其他高权限用户的特权。这可能导致对整个系统的完全控制,并进行更广泛的恶意活动。

修复

  1. 实施严格的访问控制:确保在应用程序的各个层面上实施适当的访问控制机制,包括身份验证、会话管理和授权策略。对用户进行适当的身份验证和授权,仅允许其执行其所需的操作。
  2. 验证用户输入:应该对所有用户输入进行严格的验证和过滤,以防止攻击者通过构造恶意输入来利用越权漏洞。特别是对于涉及访问控制的操作,必须仔细验证用户请求的合法性。
  3. 最小权限原则:在分配用户权限时,采用最小权限原则,即给予用户所需的最低权限级别,以限制潜在的越权行为。用户只应具备完成其任务所需的最小权限。
  4. 安全审计和监控:建立安全审计和监控机制,对系统中的访问活动进行监视和记录。这可以帮助检测和响应越权行为,并提供对事件的审计跟踪。

0x03 提权

提权根据操作系统可以分为Linux提权和Windows提权,本文主要讲解Linux提权

问题

带着问题去学习,才能更深入地思考。在了解提权之前,需要带上几个问题:

  • 什么是系统提权?
  • 为什么获取的 shell 会有高低权限的区别?
  • 为什么我们需要进行提权?

概述

什么是系统提权?

这个问题主要跟渗透测试有关,一次完整的渗透测试流程一般包含8个步骤:

主机发现 > 服务枚举 > 实施攻击 > 获取shell > 权限提升 > 权限维持 > 内网渗透 > 痕迹清除

image-20241124201823691

不难看出在第四步我们获得了shell,但是初始shell为低权限用户,需要提升权限为高权限用户,这个过程就是“提权”。

为什么 shell 会有高低权限的区别?

当我们从Web服务进入到服务器时,我们的权限是由tomcat中间件提供的,看下图:

image-20241124202313899

假设 tomcat 服务以普通用户www-data的权限运行并提供 Web 服务,那么如果黑客通过 Web 漏洞获取到 shell,该shell 就是一个www-data用户权限的 shell——此时就需要提权。

反之,若 tomcat 是以root用户权限运行,那黑客获取到的 shell 就是 root 权限。

为什么要提权?

在渗透测试中,获得高权限往往是必要的:

高权限能对更多的文件进行「增删改查」操作,便于进一步收集主机系统中的敏感信息

inux 系统的 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展

Windows 系统中的 system 权限可提取内存中的密码 Hash,可进一步用于域渗透

0x04 小结

提权方法之后会单开一章,先到这里。

参考教程:

详解越权漏洞 - FreeBuf网络安全行业门户

越权漏洞:原理、攻防与防御措施-CSDN博客

越权漏洞_账户越权-CSDN博客

提权学习之旅——Linux操作系统提权 - 先知社区