本文主要讲几个docker利用小技巧,以及平时应急响应或者渗透测试中可能遇到的场景。
在攻防中,拿下的机器可能有很多镜像,此时如果将这些镜像的构建信息还原,获取到了dockerfile中的敏感信息,那其实又多了一个突破口。
我们这里说几种办法
docker工具命令
docker images #用于查看有哪些镜像
docker history 镜像名 #查看指定镜像的创建历史
这里我们用复现的环境镜像做演示
docker history rinchat/test:CVE-2022-0492
可以看到一部分命令,但是并不完整,可以添加--no-trunc参数来显示完整的提交记录。
docker inspect 镜像名 #获取指定镜像的元数据
dfimage
这个工具是由alpine从原项目whaler重新打包的一个镜像。
https://hub.docker.com/r/alpine/dfimage
先创建一个快捷方式,方便后续调用
docker pull alpine/dfimage
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock alpine/dfimage"
然后按照下面的命令就行
dfimage 镜像名
或者
dfimage -sV=$dockerclientversion 镜像名
docker version 查看docker版本,然后我们看client这里的api version即可,这里的原工具是1.36,代表的api版本就是1.36,这里可以根据自己情况做调整。
亲测不加这个标签也是可以的
加了标签是这样
dive
项目地址:
https://github.com/wagoodman/dive
dive主要是按层分析镜像内容,并指出每一层的变化。
先创建一个快捷方式
alias dive="docker run -it -v /var/run/docker.sock:/var/run/docker.sock --rm wagoodman/dive"
dive 镜像名
输出如下,左边是镜像和layer信息,右边是当前选中的镜像layer对应的文件磁盘文件信息。
然后文字颜色也代表不同含义
红色代表删除的文件
绿色代表新增的文件
黄色代表被修改的文件
dive并不能直接获取dockerfile文件,只是作为镜像分析工具
但是他作为分析工具也有分析工具的好处,上图中我们在左边会看到layer的层ID,这个id其实也有用处
当我们使用docker save将镜像保存后,去进行解压,对应的去找,他其实就类似于一层一层的保存在文件夹里。
先保存成压缩包,然后解压
docker save -o test.tar 镜像名
tar -xvf test.tar
cat f5f34237d84300cbbf31502ba31964cb34eeffe369665a56bc492b6fbca674f3/json
我们看到上面的那个图,他的id是f5开头的,我们直接去看其中的json文件,里面就是环境变量啥的信息。
Dedockify
这个工具用法有点类似于dfimage,只不过更加精简一些
添加快捷方式
alias dedockify="docker -v /var/run/docker.sock:/var/run/docker.docker.sock --rm mrhavens/desockify"
然后需要获取镜像id
docker images
然后
dedockify 镜像id
如果是通过docker-compose构建的该怎么获取他的docker-compose文件,这里通过我的灯塔构建来做演示。
可以
docker inspect | grep com.docker.compose
然后就会显示出所在的文件夹以及文件名,以上手法其实更偏向于后渗透利用。
其实也有更多的思路大家可以慢慢思考,希望能给大家带来帮助。
原文始发于微信公众号(Crystal Equation):浅谈云安全之反向获取dockerfile
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论