Cosm3No1de/Bedside.htb_solved

GitHub: Cosm3No1de/Bedside.htb_solved

一份针对 Hack The Box Bedside 机器的渗透测试 writeup,完整演示了从不安全反序列化到权限提升的攻击链路。

Stars: 0 | Forks: 0

Bedside HTB Writeup Banner

Bedside - Hack The Box

## 📋 基本信息 | 字段 | 详情 | |-------|---------| | **平台** | Hack The Box | | **机器** | Bedside | | **难度** | Medium | | **操作系统** | Linux (Debian GNU/Linux 13 - trixie) | | **初始攻击向量** | 不安全的反序列化 (pdfminer.six) | | **权限提升** | 滥用 `torch.load()` + `pickle` 反序列化 | | **关键技术** | Pickle 反序列化,Path Traversal,SUID 滥用 | ## 🗺️ 攻击流程概述 ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Foothold │────▶│ User Access │────▶│ Root │ │ (Container) │ │ (SSH developer) │ │ (SUID bash) │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ CVE-2025-64512 Vite LFI Path torch.load() pdfminer.six Traversal (id_rsa) pickle payload pickle deserialization plain ## 🔍 攻击阶段 ### 1. 初始侦察 - **端口扫描:** SSH (22),HTTP (80) - **Web 枚举:** 发现子域名 `research.bedside.htb` - **技术分析:** Vite dev server (内部端口 3000),Python 3.12/3.13 ### 2. Foothold - Container 内的 Shell **漏洞:** `pdfminer.six` 中的不安全反序列化 (CVE-2025-64512) PDF 解析器从 `.pickle.gz` 文件中加载字符映射 (CMap)。该文件路径可通过 PDF 中的 path traversal 进行控制,从而允许加载任意的恶意 pickle。 **方法:** - 构建一个引用带有 path traversal 的 CMap 的 PDF - 该 CMap 指向由攻击者控制的 `shell.pickle.gz` 文件 - 该 pickle 包含一个带有 `__reduce__` 的类,用于执行 reverse shell **结果:** 获得 `data-wrangler` Docker container 内 `datawrangler` 用户的 Shell ### 3. Container 枚举 - **发现的 Mounts:** `/datastore` → `/dev/sda4` (host) - **权限:** `datawrangler` 对 `/datastore` 具有写权限 - **内部服务:** 位于 `127.0.0.1:3000` 的 Vite dev server ### 4. User Flag - 通过 Vite Path Traversal 实现的 LFI **漏洞:** Vite development server 中的 Path traversal Vite 开发服务器未对请求的路由进行充分的过滤,允许通过 `../` 序列访问系统上的任意文件。 **方法:** ``` curl -s --path-as-is "http://127.0.0.1:3000/../../../../../../../home/developer/.ssh/id_rsa" Resultado: Extracción de la clave SSH privada de developer → Acceso SSH al host 5. Root Escalation - torch.load() Deserialización Vulnerabilidad: Uso inseguro de torch.load() en script con privilegios sudo El script /opt/trainer/bedside_trainer.py se ejecuta como root mediante sudo. Internamente usa CheckpointLoader de MONAI, que llama a torch.load() para cargar checkpoints de entrenamiento. torch.load() utiliza pickle para deserializar objetos Python, permitiendo la ejecución de código arbitrario mediante __reduce__. Metodología: En el contenedor: Crear checkpoint malicioso en /datastore/checkpoints/ (directorio compartido con el host) En el host (SSH como developer): Ejecutar sudo /usr/bin/python3 /opt/trainer/bedside_trainer.py El script carga el checkpoint → deserializa el payload → ejecuta cp /bin/bash /var/tmp/rootbash && chmod 4755 /var/tmp/rootbash Root: Ejecutar /var/tmp/rootbash -p para obtener shell root 🛠️ Herramientas Utilizadas Hojas Herramienta Uso nmap Escaneo de puertos gobuster/ffuf Enumeración de subdominios curl Explotación de path traversal python3 + pickle Construcción de payloads de deserialización ssh Acceso remoto seguro netcat Reverse shells 📚 Referencias y Recursos CVE-2025-64512 - pdfminer.six Deserialization PyTorch torch.load() Security MONAI CheckpointLoader Documentation Vite Dev Server Security 🏆 Flags Hojas Flag Estado User ✅ Obtenida Root ✅ Obtenida 📝 Notas del Autor Esta máquina destaca la importancia de nunca deserializar datos no confiables. Tanto pickle como torch.load() son extremadamente peligrosos cuando procesan entrada controlada por el usuario. Además, montar directorios del host en contenedores sin restricciones de permisos crea vectores de escape trivial.

Escrito con fines educativos | HTB Bedside Writeup

```
标签:CISA项目, CTI, HTTP工具, Web报告查看器, 云资产清单, 内存分配, 凭据扫描, 协议分析, 后端开发, 安全实战靶机, 权限提升, 网络安全, 网络安全审计, 请求拦截, 逆向工具, 逆向工程, 隐私保护