使用 goby 检测 log4j 漏洞
一、前言
前段时间的 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
图二: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}
中。
goby 漏洞检测 golang 模板
自定义 POC 函数部分
1、根据官方文档说明
自定义 POC 由一个函数构成,该函数参数分为
jsonvul.JsonVul、httpclient.FixUrl、scanconfig.SingleScanConfig 结构体组成,通过响应 bool 来确认漏洞是否存在。函数模版如下:
需要通过编写检测漏洞是否存在的 golang 代码,检测到漏洞存在则返回 true,不存在返回 false。
图五:自定义 POC 函数部分
RandomHexString 函数:随机生成指定长度的字符串
GetGodCheckURL 函数:生成 DNSLog 地址
漏洞触发点拼接 payload
构建并发送自定义配置的 GET 请求,返回请求结果 HttpResponse
图六:通过代理抓取到 goby 发送 payload 的 get 请求
在一段时间内检测 dnslog 是否有 HTTP 请求成功,如果成功返回 true,否则返回 false。
图七:通过代理抓取到 goby 检测 dnslog 是否有 HTTP 请求成功
图八:漏洞检测成功
注意点:
1、expJson 部分 GobyQuery 查询规则,要保证能匹配到对应目录资产
2、导入 goby,发现加载不出 poc,需要去检查代码的问题
3、使用 goby 官方的函数需通过 import 导入对应的包
当然除了 solr 还有很多框架,希望大家能从文章中学到一点知识,打磨自己的武器。
评论