迎头痛击:Jenkins – Bcrypt密码哈希破解(权限提升的重要性)

2024-06-07 333 0

这里会按照一些特定的场景对哈希值进行提取和破解,包括利用SUID的一个权限提升,其实这些技术通常是在于一些后渗透中常见,就是因为这类的技术存在,作为红队一方都是可以进行范围扩大利用的,这期主要围绕这jenkins哈希提取和Liunx权限提升来篇写。

首先最近的jenkins目前的是存在任意文件读取的,是没错,对于一些文件读取的利用范围也是可能有限制。前段时间我在尝试在FOfa上找了相关资产,但是有些只能通过help或者connect-node来读取!下图是大概的一个影响范围:

迎头痛击:Jenkins – Bcrypt密码哈希破解(权限提升的重要性)插图

一、Jenkins-cli.jar 是什么?

jenkins-cli.jar是 Jenkins 的 CLI(Command Line Interface)工具的 JAR 文件。它提供了一种通过命令行与 Jenkins 服务器进行交互的方式,可以执行各种 Jenkins 命令和操作,包括管理任务、构建、节点、用户等。

通过 Jenkins CLI,用户可以在不需要登录 Jenkins 网页界面的情况下,直接通过命令行执行相关操作。这对于自动化和批量处理任务非常有用,同时也方便了对 Jenkins 系统的管理和监控。

一般来说,jenkins-cli.jar是从 Jenkins 服务器上下载的一个独立的 JAR 文件,例如:

wget http://192.168.207.137:8080/jnlpJars/jenkins-cli.jar

根据其它的有关jenkins-cli.jar的说法是,能够被直接下载,是因为它是一个公开可用的资源,Jenkins 服务器已经配置好让外部用户能够访问这个 jar 文件,从而便于进行远程管理和自动化操作。所以被利用的概率就提升了!

1、Jenkins - 任意文件读取

在了解读取之前我们先来了解jenkins_home需要读取的核心,其次我们需要注意的是可能因为一些版本的差异或者自定义安装的文件路径,使用POC进行读取的话是可能不会成功情况。

/var/jenkins_home/是 Jenkins 安装目录,其中包含了 Jenkins 所需的所有文件,包括配置文件、日志文件、插件、构建历史等。这个目录的结构和内容可能会因 Jenkins 版本和安装方式的不同而有所差异,但一般来说,它会包含以下几个关键子目录和文件:

  • jobs/: 存储 Jenkins 服务器上的所有工作项(Jobs)的配置文件。每个工作项都有自己的目录,包含 XML 格式的工作项配置文件。

  • plugins/: 存放 Jenkins 插件的目录。Jenkins 的功能扩展性很大,几乎所有的功能都是通过插件实现的。

  • credentials/: 存储 Jenkins 中的凭证信息,如用户名/密码、SSH 密钥等。

  • secrets/: 包含 Jenkins 的安全敏感信息,如加密的密码、API 密钥等。

  • config.xml: Jenkins 的全局配置文件,存储了 Jenkins 服务器的全局设置。

  • config.jelly: 用于自定义 Jenkins UI 的模板文件。

  • data/: 存储 Jenkins 的运行时数据,包括构建历史、构建日志、工件等。

  • updates/: 用于存储 Jenkins 自动更新的临时文件。

  • workspace/: 每次构建都会在这里创建一个新的工作区(Workspace),用于存放构建过程中的临时文件。

  • war/: 如果 Jenkins 是通过 WAR 文件部署的,可能会在这里找到 Jenkins 的 WAR 文件。

  • .matthew/: 存储 Jenkins 的备份和迁移信息。

  • .maven/: 如果 Jenkins 集成 Maven,可能会在这里找到 Maven 的缓存和其他相关信息。

  • users/: 包含 Jenkins 用户的配置信息,包括用户权限、用户组成员资格等。

目前得知的任意文件读取是有限制的,在一些公网JkenKins环境是读取不了一些关于JkenKins的核心文件,除非你运气好可以访问到users文件也就是下面放的第三张图,第三张图的/var/jenkins_home/users/users.xml指向的文件是 Jenkins 中用于存储用户信息的 XML 文件。这个文件包含了 Jenkins 中所有用户的详细信息,包括系统用户、外部用户(如 LDAP 或 Active Directory 用户)、以及 Jenkins 自身的内部用户(如管理员)。每个用户的信息通常以 XML 格式存储,每个用户的配置可能占用一个或多个 XML 元素。

在整体任意文件读取环境使用的有connect-nodehelpreload-job这三个参数配合jenkins-cli.jar来读取,目前公开的POC是这样:

java -jar jenkins-cli.jar -s http://192.168.207.137:8080/ connect-node '@/etc/passwd'

OR

java -jar jenkins-cli.jar -s http://192.168.207.137:8080/ help '@/etc/passwd' a

OR

java -jar jenkins-cli.jar -s http://192.168.207.137:8080/ reload-job '@/var/jenkins_home/users/users.xml'

上面的命令如果你仔细看的话都会发现带了一个@的符号,它的作用是什么?其它很多分析文章都提到args4j库!那么我看看那到底是什么玩意!

@符号,具体到您的上下文是'@/var/jenkins_home/users/users.xml'。在这里,@符号的作用是告诉命令行解析器(比如在 Jenkins CLI 中使用的args4j库),后面的参数是一个文件路径,并且这个文件路径指向'@/var/jenkins_home/users/users.xml'这个文件。

通常情况下,@符号在命令行中表示文件路径引用,告诉程序将后面的内容作为文件路径处理,而不是作为普通的命令行参数。在您的命令中,@/var/jenkins_home/users/users.xml可能是用来重新加载 Jenkins 中的一个作业,它告诉 Jenkins CLI 从指定的 XML 文件中重新加载用户信息。

2、官方补丁分析

在官方发布的补丁 core/src/main/java/hudson/cli/CLICommand.java 

迎头痛击:Jenkins – Bcrypt密码哈希破解(权限提升的重要性)插图5

看到这两个代码片段,可以看出在修补过的代码中,增加了一个变量和对象来修复,禁止@的这种方法执行:

  1. Boolean 变量ALLOW_AT_SYNTAX添加了一个名为ALLOW_AT_SYNTAX的布尔变量,用于控制是否允许解析以 '@' 前缀开头的参数。通过这个变量,可以动态地控制是否允许使用 '@' 符号加载文件并解析文件内容。

  2. ParserProperties对象:getCmdLineParser方法中,创建了一个ParserProperties对象,并通过ParserProperties.defaults().withAtSyntax(ALLOW_AT_SYNTAX)设置了是否允许 '@' 符号语法。这样可以在创建CmdLineParser对象时,根据ALLOW_AT_SYNTAX的值来决定是否允许解析 '@' 前缀开头的参数。

通过以上改动,代码在修补后实现了动态控制是否允许解析 '@' 前缀开头的参数,从而避免了任意文件读取漏洞。应该是这段是来控制@的core/src/main/java/hudson/cli/declarative/CLIRegisterer.java

迎头痛击:Jenkins – Bcrypt密码哈希破解(权限提升的重要性)插图6

ParserProperties.defaults()获取默认的解析器属性,然后通过withAtSyntax(ALLOW_AT_SYNTAX)设置了解析器属性中是否允许解析以@符号开头的参数,ALLOW_AT_SYNTAX是一个布尔变量,根据您之前提到的修补过的代码,这个变量用于控制是否允许解析@符号语法,大概是这么一个修复方式。

3、Bcrypt密码哈希破解

哈希提取破解是这个环境重要的一部分,我在这个漏洞爆出不久的时候已经编写过一篇文章“Jenkins 任意文件读取(CVE-2024-23897)+后台用户密码提取哈希破解+反弹Shell 一条龙”不管是不是Jenkins上的哈希提取,在内网渗透中是需要用上的,比如Mimikatz可以用于提取Windows系统中的密码哈希,包括本地账户和域账户的哈希。它能够捕获LSASS进程中的明文密码和哈希值,提取了你还要进行爆破,所以在内网中的一些环境中可是一个大分。

下面是通过connect-node来读取/var/jenkins_home/users/kylereese_12022439290147957862/config.xml其它参数读取是有限的,并不能完全进行读取!

java -jar jenkins-cli.jar -s http://192.168.207.137:8080 connect-node '@/var/jenkins_home/users/kylereese_12022439290147957862/config.xml'

<passwordHash>#jbcrypt:$2a$10$GqneLZhOq6hRpCXeXF07tuAN..Q8GKDv5zad/HfcpNpL8GJUNNdDO</passwordHash>

$2a$10$GqneLZhOq6hRpCXeXF07tuAN..Q8GKDv5zad/HfcpNpL8GJUNNdDO是一个 bcrypt 哈希值。bcrypt 是一种密码哈希函数,广泛用于存储密码以提高安全性。我们可以用Hashcat 密码破解工具,来爆破它,目前这个工具支持多种哈希算法,包括 bcrypt。在 Hashcat 破解 bcrypt 哈希值之前,先知道几个关键点:

  1. 算法识别:首先,确保你要告诉 Hashcat 你正在处理的是哪种哈希算法。在这种情况下,你需要使用-m参数指定 bcrypt 算法。例如,-m 3200是指定 bcrypt 的哈希算法,-m 0 就是MD5算法 这个这里不多说。

  2. 使用正确的模式:bcrypt 哈希值由两部分组成:算法标识符(如$2a$)和实际的哈希值。Hashcat 需要知道这两部分才能正确地处理哈希值。

  3. 提供字典或规则:破解 bcrypt 哈希值通常需要大量的时间,因为 bcrypt 的设计就是为了防止快速破解。因此,你需要提供一个大型的字典或规则集来尝试不同的密码。

下图就是我没有使用指定的爆破算法,才会提示让我使用-m参数来指定算法类型

┌──(kali㉿kali)-[~/jenkins-exploit]
└─$ hashcat -m 3200 passwd.txt rockyou.txt

通过hashcat成功爆破出密码,然后用users.xml和config.xml发现的账号密码,来登陆后台管理系统,在过来就是拿Shell,好了,我这拿了Shell了,但是不是Root权限!

二、权限提升的重要性

在红队视角中,权限提升,是为了掌握更多的权限和系统资源的掌控,在权限高时可以走高速,毫不费力的进行横向移动,在权限低的时候就很淡疼,因为权限是限制执行的根本,所以不管是在多么复杂的情况下,还是值得去提升这个权限!权限维持这里就先不说了,提升是提升,维持是维持,维持这个比提升麻烦一点。回到正文权限提升的流程就是信息收集,系统信息,用户信息,敏感文件。Linux和Windows系统权限提升手段那个就比较多了,典型的有:

  1. 内核漏洞利用(Kernel exploits)

攻击者可以利用 Windows 内核中的漏洞来获得对系统的控制。这些漏洞可能允许攻击者执行未授权的操作,绕过安全检查,甚至修改内核代码。

  1. 应用程序漏洞(Application vulnerabilities)

应用程序中的安全漏洞也是一个常见的权限提升途径。攻击者可能会利用这些漏洞来执行恶意代码,或者利用应用程序的配置错误来获得额外的权限。

  1. 弱密码和凭据(Weak passwords and credentials)

如果系统中使用的密码太弱,或者在配置文件中明文存储,攻击者可能能够通过猜测或暴力破解来获取这些密码,从而升级权限。

  1. 本地管理员权限滥用(Overprivileged Users)

标准业务用户可能在个人工作站上拥有本地管理员权限。攻击者可以利用这些本地管理员权限,通过工具如 mimikatz 和操作系统配置的改变,来升级到完整域的权限。

  1. 安全帐户管理器(Security Account Manager, SAM)

Windows 在安全帐户管理数据库(SAM)中以哈希形式存储凭据。攻击者可能找到备份副本在 Windows 修复目录下,获取 SYSTEM 和 SAM 数据库的访问权限可能允许攻击者提取哈希值。如果原始密码是一个弱、重用的密码,攻击者很可能能破解它。

  1. Pass-the-hash 技术

如果攻击者无法从哈希中破解密码,他们可能仍然能够仅使用哈希在网络上移动。这称为 pass-the-hash 技术。

  1. 不安全的 GUI 应用程序(Insecure GUI apps)

例如,一款鼠标软件的最近漏洞允许用户插入鼠标以升级到 Windows 10 管理员权限。一旦鼠标插入,Windows 更新就会启动,将下载 Razer 安装程序作为 SYSTEM。用户可以使用资源管理器启动一个提升的 PowerShell 窗口。

一、QQTIM本地提权

CVE-2023-34312腾讯QQTIM本地提权,很经典啊,不会有人在服务器上装QQ吧,那当前没有,如果是自己往人家服务器装呢?哈哈!

然后这个洞之前也是做过了分析的,QQProtect.exe文件QQProtect.exe+0x40c9f8处的代码,使用Ida-32位打开,并找到0x40c9f8

找到后直接按 - F5反编译

default:
  if ( a1 == 4 && a2 )
    *(_DWORD *)a2 = dword_41A740;
  break;

这里,a2是一个可以被攻击者控制的指针,而dword_41A740是一个全局变量,其值为 0x00000001。当a1等于 4 且a2不为零时,该代码会将dword_41A740的值写入a2指向的地址。因此,攻击者可以通过控制a2的值来在任意地址写入 DWORD(1)。

然后导致可以进行权限提升,而且不单单这种案例,向日葵是有一个RCE的漏洞,我也发现是有人进一步利用权限提升的操作,像一些远程软件如果爆出一些权限提升的漏洞也是可以看看,能不能利用起来。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

HTB-Infiltrator:一文带你走进域渗透
JAVA安全 | Classloader:理解与利用一篇就够了
多角度揭秘威胁行为组织CryptoCore复杂的加密货币欺诈活动
网络空间的“边水往事”?针对华语黑产及用户进行攻击的 APT-K-UN3 活动分析
伪装“黑神话悟空修改器”传播木马的活动分析
靶场战神为何会陨落?

发布评论