记一次开源OA组合拳RCE漏洞审计过程
XiaoQ 历史精选 3282浏览 · 2025-03-17 06:03

一、漏洞详情

某开源OA存在前台SQL注入和后台RCE漏洞,可以用SQL注入跑出来后台账号密码,登录后打后台RCE,组合拳达到前台RCE的效果。

二、代码分析

首先查看index.php入口文件。

image.png


获取get传入的m、d、a参数,最后包含了/include/View.php文件,跟进此文件

Plain Text
复制代码
传入的m参数来定位某个php文件,d参数表示webmain文件夹的某个目录,a参数表示执行的函数方法,当传入的ajaxbool为true时,a参数调用的Ajax方法,ajaxbool默认为false,a参数调用的Action方法。

三、漏洞分析

1、前台SQL注入

漏洞文件在webmain/task/api/uploawAction.php文件下。

此类继承了apiAction类,查看apiAction类,发现其中有initAction,是个鉴权方法

但是在uploawAction.php中重写了init方法,所以uploawAction.php中的upfileAction方法是个前台方法。

查看upfileAction方法

首先,判断是不是上传文件行为,否则退出。之后把upfile带入到c方法,跟进c方法

也就是包含了/include/chajian/upfilechajian.php

之后调用upfilechajian.php中的up方法,并且把结果赋值给upses参数,跟进up方法

其实也就是获取上传文件的各个属性,最后输出一个数组,赋值给upses参数。

然后走到$arr = c('down')->uploadback($upses);,调用downchajian.php中的uploadback方法,传入upses参数,跟进uploadback方法。

此方法中,把upses参数中的oldfilename的值赋予给arrs数组中的filename值。

image.png


最后把整个数组带入到record方法中,跟进

直接执行SQL语句,整个过程中我们可以直接控制的参数就是upses数组中的oldfilename参数,所以这个点存在SQL注入漏洞。



整个SQL注入的过程我们可以顺一下

image.png


漏洞复现

image.png


image.png


(虚拟机有固定1.7s左右延迟)

2、后台RCE

漏洞文件在webmain/task/api/uploadAction.php中的getmfilvAction方法中

这个代码主要是写入一些键值到数据库中,其中有个createtxt方法,跟进

其实就是把第二个参数的内容,写进第一个路径中

那么我们思路就明确了。

利用这个函数达到RCE的结果,分成两步,第一步,利用$uarr['id'] = m('file')->insert($uarr);方法,把我们恶意的内容写入到数据库中;第二步。利用$this->rock->createtxt($filepath, file_get_contents($lujing));来创建文件。



漏洞复现

本地开启python服务

image.png


打入payload

image.png


之后去遍历fileid

image.png


image.png


0 条评论
某人
表情
可输入 255