通达OA文件上传及文件包含漏洞分析
2020-03-27 10:48:30 Author: xz.aliyun.com(查看原文) 阅读量:265 收藏

一 前言

安全圈只要爆出一个重大漏洞,就是一次腥风血雨,学习代码审计没有多久,看着网上各位大佬分析,也忍不住想分析一下,主要是看到好像漏洞利用不太难,适合我等初学者学习。
本次复现环境是通达OAV11.3,文件上传漏洞为全版本通杀,文件包含漏洞/ispirit/interface/gateway.php只有V11.3版本存在,web文件加密为zend加密,需要下载解密软件进行解密,相关软件下载地址如下:
OA软件地址:https://www.tongda2000.com/download/2019.php
zend 5.4解密工具:https://www.cr173.com/soft/418289.html

二任意文件上传

根据网上众多复现内容,跟进到存在漏洞的文件ispirit/im/upload.php这个文件

$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";
}

如果直接访问该url会提示用户未登录

如果带入P参数提交的话,可以看到PHPSESSID已经设置为P参数,已经绕过了登录限制

然后接下来根据流程,开始判断DEST_UID参数,只需要传入一个不为空和0的数字即可
intval($DEST_UID)如果是空或者为0输出都是0

报错是无文件上传

接下来继续跟进函数,只要是全局变量1 <= count($_FILES)即可,也就是有文件上传就会调用upload函数

然后跟进到upload函数,位于inc/utility_file.php中,当然主要看的是上传允许的后缀问题,但是这里所用的getshell方式是文件包含,绕不绕过也就无所谓了

if (!is_uploadable($ATTACH_NAME)) {
                $ERROR_DESC = sprintf(_("禁止上传后缀名为[%s]的文件"), substr($ATTACH_NAME, strrpos($ATTACH_NAME, ".") + 1));
            }

可以看到调用了is_uploadable函数,跟进到该函数,同样位于inc/utility_file.php,代码意思是寻找最后
一次出现 . 的位置,然后寻找后三个字符,然后变成小写字符看是否匹配字符’php’,绕过方式为在最后加 .

然后继续跟进函数UPLOAD_MODE 该函数是用来回显用的,参数值为 1 2 3,

当UPLOAD_MODE值为1时,看返回的值

然后分析下这个保存路径问题
首先可以看到UPLOAD_MODE所需要的ATTACHMENT_ID等参数来自于ATTACHMENTS,
而ATTACHMENTS则是调用upload函数的返回结果

我们所需要的ATTACHMENTS["ID"]来源于add_attach函数,add_attach函数同样位于inc/utility_file.php文件下

在add_attach函数中,看到保存路径,FILENAME

然后看这个函数的返回值,返回值中包含了文件路径以及自定义部分的文件名,在upload函数返回了原始文件名部分。

上传可以用写一个html来进行

三 文件包含

漏洞文件位于ispirit/interface/gateway.php

http://localhost:8081/ispirit/interface/gateway.php?json={%22url%22:%22qqqispirit/../../attach/im/2003/376154918.x.php%22}


文章来源: http://xz.aliyun.com/t/7433
如有侵权请联系:admin#unsafe.sh