该赛题比赛期间共有0支战队解出
题目允许选手上传一个 Java 源码文件和一个 jar 文件,编译并以空的 security manager 策略运行。严格限制的 security manager 很难被绕过,需要利用未受限的编译阶段完成 flag 文件的读取。
Java 提供了 Annotation Processor 机制,能够在编译时和运行时对代码中的注解(Annotation) 处理,可用于实现代码生成,运行时依赖注入等功能。此处我们可以利用 Annotation Processor 在编译时执行 jar 中代码,读取 flag 文件并输出。解题步骤参考如下:
实现一个扩展 javax.annotation.processing.AbstractProcessor 的类,在处理函数或 static 中读取 flag 输出
打包为一个符合要求的 jar (为了能自动加载上一步实现的 Processor,需要把类名加入到 META-INF/services/javax.annotation.processing.Processor 中)
将 Java 源码文件和 jar 文件发送到远程服务,获取 flag
详细步骤可以参考 https://www.kalmarunionen.dk/writeups/2022/rwctf/secured-java/。