记一次开源OA组合拳RCE漏洞审计过程
字数 1226 2025-08-29 08:30:06
开源OA系统组合拳漏洞审计与分析
一、漏洞概述
本教学文档详细分析某开源OA系统存在的前台SQL注入与后台RCE组合漏洞。攻击者可通过以下步骤实现远程代码执行:
- 利用前台SQL注入漏洞获取后台管理员凭证
- 使用获取的凭证登录后台
- 利用后台RCE漏洞实现远程代码执行
二、系统架构分析
入口文件分析
系统入口为index.php,主要处理流程:
// 获取请求参数
$m = $_GET['m']; // 模块参数,定位php文件
$d = $_GET['d']; // 目录参数,指定webmain下的子目录
$a = $_GET['a']; // 方法参数,指定执行的函数
// 包含核心视图文件
include '/include/View.php';
参数行为:
ajaxbool为true时,a参数调用Ajax方法ajaxbool默认为false,a参数调用Action方法
三、前台SQL注入漏洞分析
漏洞位置
webmain/task/api/uploawAction.php文件中的upfileAction方法
漏洞成因
-
鉴权绕过:
- 该类继承
apiAction类,但重写了init方法 - 导致
upfileAction方法成为无需认证的前台方法
- 该类继承
-
漏洞调用链:
upfileAction() -> c() -> upfilechajian.php -> up() -> downchajian.php -> uploadback() -> record() -
关键代码分析:
// 检查上传行为
if(!$_FILES) exit();
// 调用上传组件
$upses = c('upfile')->up('upfile');
// 调用上传回调
$arr = c('down')->uploadback($upses);
- SQL注入点:
$upses['oldfilename']参数完全可控- 最终被拼接到SQL语句中执行
漏洞复现
- 构造恶意上传请求,控制
oldfilename参数 - 示例Payload:
oldfilename=' OR 1=1 -- - 利用注入获取管理员账号密码
四、后台RCE漏洞分析
漏洞位置
webmain/task/api/uploadAction.php中的getmfilvAction方法
漏洞成因
-
文件写入功能:
- 使用
createtxt方法写入文件内容 - 方法定义:
createtxt($path, $content)
- 使用
-
攻击流程:
- 第一步:利用
m('file')->insert()将恶意内容写入数据库 - 第二步:利用
createtxt从数据库读取内容写入文件
- 第一步:利用
-
关键代码:
// 写入数据库
$uarr['id'] = m('file')->insert($uarr);
// 从数据库读取并写入文件
$this->rock->createtxt($filepath, file_get_contents($lujing));
漏洞复现
- 准备恶意文件内容
- 通过接口将内容写入数据库
- 触发文件创建功能,将数据库内容写入可执行文件
- 访问生成的文件实现RCE
五、组合攻击流程
-
信息收集阶段:
- 利用SQL注入获取管理员凭证
- 示例:
SELECT username,password FROM admin_users
-
权限提升阶段:
- 使用获取的凭证登录后台
-
代码执行阶段:
- 利用后台RCE漏洞写入Webshell
- 示例写入PHP代码:
<?php system($_GET['cmd']); ?>
-
持久化阶段:
- 在服务器上建立持久化后门
六、防御建议
-
SQL注入防御:
- 使用预处理语句
- 对用户输入进行严格过滤
- 最小化数据库操作权限
-
RCE防御:
- 限制文件写入目录
- 禁用危险函数如
file_put_contents - 对写入内容进行严格校验
-
系统加固:
- 实现严格的权限控制
- 关键操作增加二次验证
- 定期进行安全审计
七、总结
本案例展示了如何通过组合利用多个漏洞实现从信息泄露到远程代码执行的完整攻击链。安全开发中需要:
- 重视每一处用户输入的过滤
- 遵循最小权限原则
- 关键操作实现多重验证
- 定期进行代码安全审计