靶机难度Very Hard
一、信息收集
nmap 扫描
发现80、8080端口都开启http,分别进行目录爆破
二、web渗透
8080端口发现/dev目录进入
页面提示仅可以上传gif图片,尝试绕过
修改content-type为image/gif,成功上传
本地开启监听,web访问木马成功反弹shell
找到local.txt
三、提权
上传linpeas到靶机,发现没有wget,但是有curl
用curl下载linpeas到靶机并执行linpeas
通过linpeas发现我们在docker中
在/var/backups中发现snmp配置文件,猜测主机运行snmp,配置文件中发现
SNMP服务可以以多种方式扩展。例如,它可以通过NET-SNMP-EXTEND-MIB MIB提供的功能进行扩展。Net SNMP代理提供了一个MIB扩展(Net-SNMP-EXTEND-MIB),可用于执行任意shell脚本。因此,通过在SNMP上调用NET-SNMP-EXTEND-MIB,我们可以调用服务器上的任意脚本或可执行文件。因为我们知道交互字符串为53cur3M0NiT0riNg,所以让我们尝试使用snmpwalk。
我们下载snmp与snmp-mibs-downloader
apt-get install snmp
apt-get install snmp-mibs-downloader
然后我们通过snmp-mibs-downloader下载mib
修改snmp配置文件为
通过nsExtendOutput1Table的示例,我们可以在目标上查询SNMP守护程序,如下所示:
这也就意味着我们可以通过snmpwalk在远程机上执行shell,在目标机snmp配置文件中我们知道snmp守护进程在/tmp/shtest中,tmpfs用于在主机和容器之间轻松传输文件,而无需每次登录。当使用tmpfs挂载创建容器时,容器可以在容器的可写层之外写入文件。与卷和绑定装载不同,tmpfs装载是临时的,只在主机内存中存在。并且tmpfs安装在docker的/tmp中,所以我们尝试使用snmp进行docker逃逸。
成功逃逸出docker
尝试suid提权
发现/usr/bin/logconsole属主为tom
使用ltrace来跟踪logconsole,发现查看cpu时候并没有写绝对路径而是通过环境变量方式调用。
使用环境变量获得tom用户shell
下一步,我们尝试使用ssh登陆tom用户,老方法
再次使用linpeas,我们发现/opt/cert/openssl的功能为空。Linux功能允许非root用户执行的二进制文件执行有限的特权(root)操作。
https://int0x33.medium.com/day-44-linux-capabilities-privilege-escalation-via-openssl-with-selinux-enabled-and-enforced-74d2bec02099
为了利用这个潜在的漏洞,我们必须运行/opt/cert/openssl。该程序可用于托管本地web服务器。但是,在运行它之前,我们需要生成一个证书,如下所示,将所有选项留空:
再开启一个ssh连接到tom,因为刚才的ssh用于托管web server
使用curl通过漏洞获取root的私钥
使用私钥登陆root,并且得到proof.txt