← Blog

Hack The Box — DevArea Writeup

DevArea

https://app.hackthebox.com/machines/DevArea

Machine: DevArea
Difficulty: Medium
OS: Linux


目录

  • 01 — Reconnaissance
  • 02 — FTP Anonymous Login & JAR Analysis
  • 03 — XOP/MTOM SSRF via CVE-2022-46364
  • 04 — Hoverfly Authentication
  • 05 — Hoverfly Middleware RCE (CVE-2025-54123)
  • 06 — User Flag
  • 07 — Privilege Escalation Enumeration
  • 08 — Bash Binary Swap to Root

01 — Reconnaissance

对全端口进行扫描。

服务版本探测。

信息收集结果

  • 端口 21 — vsftpd 3.0.5(允许匿名登录,pub/ 目录可访问)
  • 端口 22 — OpenSSH 9.6p1
  • 端口 80 — Apache 2.4.58(重定向到 devarea.htb)
  • 端口 8080 — Jetty 9.4.27(疑似 Apache CXF)
  • 端口 8500 — Go HTTP 代理(”This is a proxy server”)
  • 端口 8888 — Hoverfly Dashboard

02 — FTP Anonymous Login & JAR Analysis

从 FTP 服务器下载 employee-service.jar 文件。

解压 employee-service.jar

安装 CFR 反编译器,将 .class 文件转换为 .java 文件。

执行反编译。

查看反编译出的 .java 文件(ServerStarterEmployeeServiceEmployeeServiceImplReport)。

从源码可以得知的信息

  • 接口: http://0.0.0.0:8080/employeeservice
  • 行为: 调用 submitReport(Report) 函数
  • 问题点: 服务端实现将 report.getContent() 的值原样回显到响应中
  • Report 对象: 包含 content 字段——这就是我们可以注入输入的位置(注入点)

03 — XOP/MTOM SSRF via CVE-2022-46364

确认 WSDL 请求可以正常工作。

查看 SOAP 请求/响应。

通过请求 /etc/passwd 验证 SSRF。

Content 字段中发现 base64 编码字符串。

base64 解码后确认 /etc/passwd 明文内容。

利用 SSRF 获取 Hoverfly 的 systemd unit 文件,从中获取到 admin 账号和密码。


04 — Hoverfly Authentication

为了在 CLI 上处理 JSON 请求,安装 jq

获取 Hoverfly JWT。

确认获取到的 token 权限。

使用获取的 JWT 发起授权请求——响应中确认 Hoverfly 版本为 1.11.3。

该版本存在 Hoverfly Middleware RCE (CVE-2025-54123) 漏洞。


05 — Hoverfly Middleware RCE (CVE-2025-54123)

为反向 shell 准备,确认 tun0 接口。

构造 payload,并在 4444 端口准备反向 shell。

在 4444 端口监听。

使用 source 命令触发 payload。


06 — User Flag

反向 shell 成功连接,获取 user flag。


07 — Privilege Escalation Enumeration

枚举 sudo 权限发现,当前用户 dev_ryan 可以无密码以 root 权限执行 /opt/syswatch/syswatch.sh

黑名单(禁止参数)

  • web-stop
  • web-restart

其他所有参数均允许。

查看 shell 二进制文件 /bin/bash 的权限——发现被设置为 777,任何人都可以修改。


08 — Bash Binary Swap to Root

思路: 执行 sudo /opt/syswatch/syswatch.sh 时,该脚本内部会以 root 权限运行 bash

如果我们把 /bin/bash 替换为”创建原始 bash 的 SUID 副本的恶意代码(payload)”,sudo 就会以 root 权限替我们执行它。

SUID = 执行时以 root 权限运行的文件

总结

  1. /bin/bash 全局可写
  2. 我们将 /bin/bash 替换为恶意代码
  3. 执行 sudo /opt/syswatch/syswatch.sh
  4. 脚本内部调用 bash
  5. 我们植入的代码以 root 权限执行
  6. 创建出 SUID bash
  7. 之后可以随时获取 root shell

备份原始 bash。

生成恶意 bash payload。

为修改 bash,切换到 dash。

如果提示符变为 $,说明已成功切换到 dash。

查看当前 bash 占用的进程。

结束(kill)之前的 bash chain 进程。

在另一个终端中,通过 5555 端口建立反向 shell。

在 5555 shell 中切换到 dash,准备替换为我们准备好的恶意 bash payload。

16298 是之前的 bash chain,17201 是新的 bash chain。

结束剩余的 bash chain 进程,并用恶意 payload 覆盖。

父进程结束后,前面用 nohup 启动的恶意 payload 开始运行——可以确认 66 字节的 bash 进程正在以 root 权限运行。

以 root 权限执行 syswatch.sh

原本的 4444 shell 提权为 root,成功访问 root flag。