通达OA v11.7 auth_mobi.php 漏洞原理剖析:从SQL查询到会话劫持的3步逻辑链
通达OA v11.7 auth_mobi.php会话劫持漏洞深度解析
漏洞背景与影响范围
通达OA作为国内广泛使用的办公自动化系统,其v11.7版本中 auth_mobi.php 文件存在一个关键的设计缺陷。这个漏洞允许攻击者在特定条件下获取合法用户的会话凭证,进而实现未授权访问。受影响版本包括v11.7及之前的所有版本,直到v11.8发布后才得到修复。
在企业环境中,这类漏洞尤其危险,因为它不依赖于传统的身份认证机制,而是直接绕过了会话验证环节。根据公开资料统计,在漏洞披露期间,约有数千家企业系统暴露在此风险之下。
漏洞原理剖析
核心代码逻辑缺陷
auth_mobi.php 文件的漏洞根源在于其对用户会话处理的三个关键环节:
- 参数接收与验证缺失 :
if ($isAvatar == '1' && $uid != '' && $P_VER != '') {
$sql = 'SELECT SID FROM user_online WHERE UID = \'' . $uid . '\' and CLIENT = \'' . $P_VER . '\'';
$cursor = exequery(TD::conn(), $sql);
if ($row = mysql_fetch_array($cursor)) {
$P = $row['SID'];
}
}
这段代码直接使用用户提供的 uid 和 P_VER 参数构造SQL查询,既没有进行充分的输入验证,也没有实施权限检查。
- 会话处理机制缺陷 :
if ($P == '') {
$P = $_COOKIE['PHPSESSID'];
if ($P == '') {
relogin();
exit;
}
}
session_id($P);
session_start();
系统优先使用从数据库查询到的会话ID,如果不存在则回退到客户端提供的Cookie,这种设计使得攻击者可以通过控制SQL查询结果来劫持会话。
- 二次验证缺失 :
if ($_SESSION['LOGIN_USER_ID'] == '' || $_SESSION['LOGIN_UID'] == '') {
relogin();
}
虽然存在会话验证,但验证发生在会话ID已经被接受之后,为时已晚。
漏洞利用的三步逻辑链
-
参数注入 :通过构造特定的
isAvatar、uid和P_VER参数,攻击者可以查询user_online表中任意用户的会话状态。 -
会话窃取 :当目标用户在线时,系统会返回其
SID(即PHPSESSID),攻击者获取这个值后可直接用于会话伪造。 -
权限提升 :使用窃取的会话ID访问系统后台,由于系统信任这个会话,攻击者可以获得与该会话关联的用户权限。
技术深度分析
数据库层面分析
user_online 表结构关键字段:
| 字段名 | 类型 | 描述 |
|---|---|---|
| UID | varchar | 用户唯一标识 |
| SID | varchar | 会话ID |
| CLIENT | varchar | 客户端版本信息 |
漏洞利用的核心在于 SID 字段的暴露,这个字段本应被视为敏感信息,不应通过公开接口返回。
会话管理机制对比
正常会话流程与漏洞流程对比:
正常流程 :
- 用户通过登录页面认证
- 系统生成新会话ID
- 会话ID通过安全Cookie传输
- 后续请求验证Cookie中的会话ID
漏洞流程 :
- 攻击者直接请求
auth_mobi.php - 系统返回现有用户的会话ID
- 攻击者使用该会话ID伪造请求
- 系统验证会话ID有效并授权访问
漏洞验证与防护方案
安全验证方法
对于企业安全团队,可以通过以下方式检测系统是否存在此漏洞:
- 基础检测 :
curl -I "http://target/mobile/auth_mobi.php?isAvatar=1&uid=1&P_VER=0"
观察响应中是否包含 PHPSESSID 头或 RELOGIN 内容。
- 自动化检测脚本 :
import requests
def check_vulnerability(url):
try:
response = requests.get(
f"{url}/mobile/auth_mobi.php?isAvatar=1&uid=1&P_VER=0",
timeout=5,
verify=False
)
if 'PHPSESSID' in response.headers.get('Set-Cookie', ''):
return True
return False
except Exception:
return False
全面防护方案
-
官方补丁 :
- 立即升级到v11.8或更高版本
- 官方修复方案主要包含:
- 增加权限验证层
- 移除敏感信息返回
- 加强会话管理机制
-
临时缓解措施 :
- 在Web服务器层面对
auth_mobi.php设置访问控制 - 修改文件权限限制直接访问
- 监控异常会话请求
- 在Web服务器层面对
-
长期加固建议 :
- 实施会话绑定(IP、User-Agent等)
- 引入二次认证机制
- 定期进行安全审计
漏洞研究的高级话题
漏洞利用的扩展可能性
通过深入分析,我们发现此漏洞可能与其他漏洞形成攻击链:
- 结合信息泄露漏洞 :先获取用户列表,再针对性地进行会话劫持
- 权限提升组合 :配合低权限账户的会话劫持实现垂直提权
- 持久化控制 :利用会话维持长期访问权限
静态代码分析视角
从代码审计角度看,这类漏洞的典型特征包括:
- 直接拼接用户输入到SQL查询
- 敏感信息的不当返回
- 缺乏前置的权限验证
- 过度信任客户端提供的数据
使用自动化工具检测时,可以关注以下模式:
preg_match('/SELECT.*FROM.*WHERE.*\$_GET/', $code)
preg_match('/session_id\(.*\$_(GET|POST)/', $code)
企业安全实践建议
对于使用通达OA的企业,我们建议采取以下安全措施:
-
应急响应 :
- 立即检查系统版本
- 审查日志中的异常
auth_mobi.php访问 - 重置所有用户会话
-
安全配置 :
- 限制移动端接口的访问范围
- 启用详细的访问日志
- 配置WAF规则拦截攻击尝试
-
持续监控 :
- 部署SIEM系统监测异常会话
- 定期进行漏洞扫描
- 建立安全更新机制
安全开发生命周期启示
从这个漏洞案例中,我们可以总结出以下安全开发经验:
- 最小权限原则 :接口应只返回必要的最小信息量
- 防御性编程 :对所有输入参数进行严格验证
- 敏感数据保护 :会话标识符应被视为密码级别的敏感信息
- 安全审计 :定期对认证和会话管理模块进行专项审查
在企业实际开发中,建议建立以下安全机制:
- 代码审查清单包含会话安全项目
- 自动化安全测试覆盖认证流程
- 敏感操作的安全日志记录
- 定期的安全培训机制
更多推荐
所有评论(0)