今年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是会提示用户未登录的。

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

接下来继续看又有一个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, ","

最低0.47元/天 解锁文章
561

被折叠的 条评论
为什么被折叠?



