本次将复现著名的Log4j2远程代码执行漏洞(CVE-2021-44228)
什么是Log4j2及该漏洞原理:
Log4j2是一个功能强大的java日志框架,Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
简单来说就是:因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。利用jndi访问ldap服务后,ldap服务返回了class攻击代码,被攻击的服务器执行了攻击代码。远程代码执行漏洞,是利用了Log4j2可以对日志中的“${}”包裹起来的变量进行解析执行,来进行攻击的。
OK,现在正式开始我们的漏洞复现,本次所需环境: 1.本次实验使用vulhub靶场进行环境的搭建,靶机ip(192.168.17.4) 2.所需:nc监听工具、marshalsec-0.0.3-SNAPSHOT-all.jar包、web服务(代替ldap服务)
1.部署vulhub环境并进行访问测试
2.使用python中的模块进行http服务器的启动并进行访问测试
恶意代码文件Exp.java内容如下:
3.启动jndi服务设置端口为9999,访问该服务时执行远程web的恶意代码文件(使用javac Exp.java 命令进行对java文件的编译,最后编译为Exp.class文件)
4.由于该恶意文件(Exp.class)包含反弹shell指令,因此执行前需要使用nc开启监听端口(这里使用的是9090监听端口,因此恶意代码的端口也要修改为9090)
5.所需环境及恶意代码都部署完之后开始在注入点执行EXP
虽然返回的状态码是400,但是回去查看监听端口:
发现成功反弹,因此本次log4j2远程代码执行漏洞成功复现