免责声明
由于传播、利用WK安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负
责,WK安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除
并致歉。谢谢!
本文是记录一次利用"组合拳"拿下OA系统文件上传RCE漏洞的过程,由于是后台漏洞,整体上危害较低,系统搭建进入之后要求强制更改密码,导致更加鸡肋了。
前景
某天下午,我一朋友发我一份源码让我扫扫看,我一看这个版本之前正好分析过,于是简单记录了下来。(我菜,大佬勿喷)
产品版本:V2.6.7 分析的该版本,其他版本未进行测试!
这套系统的路由分析可自行百度,网上对其分析的文章还是蛮多的,当然各位佬们也可以抓几个包,找找规律也可以发现他的路由逻辑。
这套系统的SQL注入点,大家可以看看下面这篇文章,这里就不分析啦
https://forum.butian.net/article/613
漏洞分析
直接来到漏洞点:
webmain/task/api/uploadAction.php
在该文件下存在 getmfilvAction 函数
SQL产生都是一样的,由于base64decode引起的,绕过了检测
接着看看这个参数$fname,字面意思应该是文件名,接下来进行判断参数是否存在并且不为空,为True,那么把$frs数组中的值(filename对应的)赋值给$fname,否则的话直接把文件名跟文件后缀进行拼接
$frs 是一个存储了xinhu_file表里面的值,根据$fileid进行查询的
m('file')->getone($fileid) 进行SQL查询
关注$filepath的组成,外部变量拼接的是$fileid、$fileext
UPDIR在配置$config里面 为upload,$fileid是自己传入的,$fileext是根据查询得到$frs数组内的(也是数据库内的)
可以大致得到路径为 1458是生成的随机四位数,1是$fileid值,php是$fileext值
upload/2025-02/23_rocktpl1458_1.php
往下走关注createtxt函数
定义在 include/class/rockClass.php 全文搜索了一下,就这个地方存在function createtxt()
从注释可以看出这个是写入文件的功能 跟进查看,createdir是创建文件夹的功能,没有过滤,createtxt也没过滤 红箭头的都是几个内置的函数
整体就是把第二个变量的内容写入到第一个变量内
这几个变量的内容含义都分析完了,然后再继续看这个函数的剩下部分
$uarr这个数组其中的filename对应的值我们可控,而且在下面进行了插入操作,根据上面的那篇SQL注入文章的分析
得到应该是使用的update语句
到这里,由于是本地搭建的,我们直接去看数据内里面xinhu_file到底存储的内容是什么
关注filepath跟filepathout
那么此时的file_get_contents就派上用场了,这个函数是进行文件读取的,可读本地的也可以读取远程的(远程的要开allow_url_fopen)
我们可以利用刚才的update注入,在filepath里面插入恶意的远程地址,然后再通过文件读取的方式存储到服务器上,这里组合一下不就相当于文件上传漏洞了
复现复现(本地)
开启8080端口,提供远程访问文件的功能
然后加载
访问
http://192.168.1.7:8090/upload//2025-02//23_rocktpl4759_16.php
实习/校招/社招
安全服务工程师、安全攻防工程师、安全研发工程师、前后端开发工程师、测试工程师等等,所有岗位均可内推 需要考CISP/CISP-PTE/PMP/OSCP/CISSP等证书也可以加我,市场低价!有折扣! |
推荐阅读
渗透实战|记一次简单的Docker逃逸+反编译jar接管云主机
原文始发于微信公众号(藏剑安全):审计分析 | 一套组合拳造成文件上传漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论