解法一
根据解压后的cry-0.0.1-SNAPSHOT.jar可以得到如下目录结构
其中Controller如下
就是一个明显的jndi注入,题目用的是jdk8u111,应该rmi和ldap都可以,不过ldap比较麻烦,题目里的localhost:9999/remoteObj也是一个rmi服务端
所以我们就建一个rmi恶意服务端来lookup我们的恶意代码,lookup里的详细过程本来博客里有写,但是博客倒退了两个月,所以也没了,我自己也忘了。
先写我们要加载的恶意Class文件,我写的是反弹shell的恶意命令,记得要TestRef要放在软件包外面,不然等会客户端加载我们的这个Class文件会出错
把恶意的TestRef.class放到服务器上,用python起个服务,因为题目的客户端会通过这个url进行加载
然后就是写一个恶意的服务端并绑定一个remoteObj,也要放在包外,先创建一个注册中心,然后绑定python服务器下的TestRef.class
其中System.setProperty("java.rmi.server.hostname","124.221.19.214");
这一句很重要。如何不写的话,host会解析错误。(按照我的理解,可能是客户端去lookup服务端的时候,服务端返回的是localhost,而客户端没有解析成你的vps地址而是直接为localhost)具体看这里。
然后我们把这个恶意服务端的Class文件也放到我们的vps上运行
再监听我们反弹shell的端口
然后传evil的值即可
成功去加载我们的TestRef.class
成功弹shell
解法二
不过,其实网上都有现成的工具,直接用就可以了。
先输入要执行的命令,然后一个个试就可以了
用jdk1.8的payload就可以了
成功得到flag
复现环境
源码下载,可以自己在本地搭docker环境