通达OA未授权任意文件上传及文件包含漏洞分析学习

今年3月份通达OA爆出了文件上传和文件包含漏洞,网络上很多复现和分析的博客,今天我也来试着分析分析,据360灵腾安全实验室判断该漏洞等级为高,利用难度低,威胁程度高,所以可能比较适合代码审计的新手来练练。

0x00 漏洞概述

通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化系统,包括流程审批、行政办公、日常事务、数据统计分析、即时通讯、移动办公等。

该漏洞在绕过身份验证的情况下通过文件上传漏洞上传恶意php文件,组合文件包含漏洞最终造成远程代码执行漏洞,从而导致可以控制服务器system权限。

0x01 任意文件上传

网上很多信息,存在漏洞的文件就是ispirit/im/upload.php

由于php文件都是通过zend加密的,所以还需要zend解密工具解密才行。

至于zend解密工具,自行百度就OK了。

那么就来看看存在问题的那段代码吧!

$P = $_POST["P"];
if (isset($P) || ($P != "")) {
   
   
	ob_start();
	include_once "inc/session.php";
	session_id($P);
	session_start();
	session_write_close();
}
//如果有传递参数P,就可以绕过执行auth.php了,也就可以绕过了登录验证进行文件上传了。
else {
   
    
	include_once "./auth.php";
}

if-else语句一旦编写时出现判断失误,就会出现必要的执行步骤被忽略的可能。

我用burpsuite来试一下吧,如果直接在未登录情况下访问这个url是会提示用户未登录的。

https://cdn.jsdelivr.net/gh/A1andNS/picgo/img/20200419134308.png

如果我传入一个P参数提交,就会发现成功绕过了登录认证,并且PHPSESSID被设置为了P参数。

https://cdn.jsdelivr.net/gh/A1andNS/picgo/img/20200419134233.png

接下来继续看又有一个IF-else语句,是判断DEST_UID

$TYPE = $_POST["TYPE"];
$DEST_UID = $_POST["DEST_UID"];
$dataBack = array();
if (($DEST_UID != "") && !td_verify_ids($ids)) {
   
   	//验证DEST_UID是否为非数字
	$dataBack = array("status" => 0, "content" => "-ERR " . _("接收方ID无效"));
	echo json_encode(data2utf8($dataBack));
	exit();
}

if (strpos($DEST_UID, ","
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值