争取B站每周更新!文章投稿来自uname 。
Jar Analyzer 是一个分析 Jar 文件的 GUI 工具:
-
支持大 Jar 以及批量 Jars 分析
-
方便地搜索方法之间的调用关系
-
分析 LDC 指令定位 Jar 中的字符串
-
一键分析 Spring Controller/Mapping
-
对于方法字节码和指令的高级分析
-
一键反编译,优化对内部类的处理
-
一键生成方法的 CFG 分析结果
-
一键生成方法的 Stack Frame 分析结果
-
自定义 SQL 语句进行高级分析
漏洞环境Apache Commons Text
CVE-2022-42889 Apache Commons Text 1.5 <= Apache Commons Text <= 1.9
org.apache.commons.text.lookup.StringLookup 的实例。从 1.5 版到 1.9 版,攻击者可构造恶意文本,使得Apache Commons Text 在解析时执行任意恶意代码。
Apache Commons Text 1.9
使用jar-ayalyzer分析
导入后点击start engine。我们知道CVE-2022-42889主要触发点是lookup调用了ScriptEngine的eval方法造成代码执行。
方法一: 在search类别里进行搜索
这里可以得到org.apache.commons.text.lookup$lookup方法调用了scriptEngine.eval。然后key可控, script = keys[1],所以慢慢往上走就可以了。
方法二:b站刚发视频如下
在call界面,有caller,callee两个界面。caller表示哪个方法调用了lookup方法,callee表示lookup里调用了什么方法。
往上来到了StringLookup接口,上面是调用,下面是实现类。
也可以在impl里面查看接口的实现类。
往上来到了 org.apache.commons.text$StringSubstitutor#resolveVariable, 可以看到都可传。
org/apache/commons/text/StringSubstitutor#substitute,之间如果有别的调用,慢慢分析也就有很多其他的触发链,但这个好像并没有
最后可以看⻅replace调用。
都是差不多的处理。
漏洞深度利用参考:https://forum.butian.net/share/1973
Poc
StringSubstitutor stringSubstitutor = StringSubstitutor.createInterpolator();
stringSubstitutor.replace("${script:javascript:2 + 2});
参考:
原文始发于微信公众号(黑伞安全):代码审计:jar-analyzer 分析漏洞 Apache Commons Text RCE