前言
最近有些朋友問我一些免殺問題,由于個人技術有限,對靜態免殺有些了解(動態免殺真的不會,太菜了),所以就總結了一些Windows中cmd的命令混淆思路,靜態免殺無非就是對安全設備檢測到代碼(命令)中的特征字符進行查殺、過濾,首先做的就是對于特征字符的處理,隨后就是對環境中限制的字符替換或混淆,從而達到免殺效果,
【查看資料】
一、選項字符替換
CMD命令中可以執行ping 命令,該命令是由unix系統移植過來的,幫助頁面建議命令列選項應使用連字符作為選項字符,例如ping -n 1 127.0.0.1. 這與大多數其他使用正斜杠的 Windows 原生命令列工具不一致,大概是為了幫助有疑問的用戶,該程式還接受正斜杠作為選項比如 ping /n 1 127.0.0.1也能運行的,
大多數使用連字符的內置 Windows 可執行檔案也接受正斜杠,但有的命令卻不可以,例如find /i keyword,該命令將顯示包含單詞“keyword”的所有檔案,但find -i keyword會提示陳述句錯誤,
二、字符替換
Unicode修飾符替換
另一種方法是用類似的字符替換命令列中的其他字符(即除了選項字符之外),特別是當你考慮整個 Unicode 范圍時,在某些行程可能接受的 ASCII 范圍中還發現了許多字母變體,
涉及到的 Unicode 字符? ? ? ? ? ? ? ? ?
? 修飾字母小寫 W
? 修飾字母小寫 Y
? 修飾字母小寫 H
? 帶鉤的修飾字母小寫 H
? 修飾字母小寫 J
? 修飾字母小寫 R
? 修飾字母小寫 L
? 修飾字母小寫 S
? 修飾字母小寫 X
Unicode 包含一個間距修飾字母范圍(0x02B0 - 0x02FF) [ 4 ],其中包括 ?、? 和 ? 等字符,一些命令列決議器將它們識別為字母并將它們分別轉換回 l、x 和 s,這方面的一個例子是reg,它將reg export HKCU out.reg和reg e?port HKCU out.reg視為平等,
因為編碼問題顯示 ? 為方框

逗號、分號替換空格
使用 ; (分號) 和 , (逗號)替換合法空格,但是在某些命令中無法替換,例如:net user會提示語法錯誤,

三、 字符插入
同樣,有時可以在命令列中插入額外的字符,這些字符將被執行程式忽略,例如,某些可執行檔案可能會洗掉不可列印的字符,同時也可能會過濾掉某些可列印的字符,
例如,Windows 事件日志工具wevtutil似乎接受在隨機位置插入某些范圍內的 Unicode 字符(?)的命令列,因此執行wevtutil gli hardwareeventsandwevtutil g?li hardwareevents將產生完全相同的輸出,盡管后者在第一個引數的中間包含一個阿拉、伯字母,

還有常見的 ^ 轉義字符插入

插入多個(),也不會影響命令運行

四、 行情插入
在保持流程完整的同時操縱命令列的另一種方法是插入引號,盡管這聽起來像是先前技術的一個子集,但這里的要求是引號成對出現,
您可能熟悉在引數周圍加上引號的概念,就拿dir "c:\windows"例如,這是有效的一樣dir c:\windows\,由于缺乏空間,大多數程式都接受這個約定,鮮為人知的是,大多數程式在任意位置接受引號:該命令dir c:“win"d”"ow"s"也可以作業,只要每個引數的引號數是偶數并且后面的引號不超過兩個,大多數程式似乎都接受這一點,

五、環境變數
在cmd命令列中支持設定環境變數和自定義變數,使用環境變數中的值或字串可以拼接成想要的命令,例如whoami,將am 設定變數為 t,將命令拼接成who%t%i,執行成功,

利用@在cmd中的特性,@表示后面的命令不顯示執行

六、引數縮寫
插入和替換字符后,我們還需要嘗試洗掉字符,一些應用程式允許為其他冗長的命令列選項提供“速記”,從而更容易記住這些命令,或者縮短命令字符個數,
這是基于 Unix 的工具(例如grep -i keywordvs grep --ignore-case keyword)中的一個眾所周知的概念,但在 Windows 上則不然,然而,一些程式接受縮短的版本,有些程式采用與 Unix 類似的方法并接受單字母版本(例如cmdkey /lvs cmdkey /list),有些程式接受其他縮寫版本(例如wevtutil glivs wevtutil get-loginfo),而其他程式則采用“通配符方法”,這方面的一個例子是 PowerShell,它的許多關鍵字允許您在關鍵字 [ 5 ]的末尾省略一個或多個字符,

需要注意的是有些命令的縮寫會出現一些沖突,可以查看powershell相關檔案,
免殺的方法有很多,只要思路靈活,靜態免殺很容易的,
命令混淆工具已經有好多大佬開發出來了,詳細用法大家可以自己研究(網上已經有很多了),命令混淆過靜態免殺很簡單,在這里提供一個簡單的樣例供大家參考,
下載地址:https://github.com/danielbohannon/Invoke-DOSfuscation

大概使用方法也很簡單,
下載檔案后再當前目錄運行powershell,匯入使用的模塊 Import-Module .\Invoke-DOSfuscation.psd1 ;

再運行程式Invoke-DOSfuscation ;

可以查看工具的基本使用方法TUTORIAL

Set command //設定需要混淆的命令

Set FINALBINARY//設定命令運行的環境

加載混淆模塊,(可以查看下當前目錄下的檔案夾,不同檔案有不同的混淆效果)

使用show命令查看當前命令設定的引數情況

\5. 可以使用test命令再當前視窗進行測驗混肴過后的命令;

復測下再cmd 中運行的結果;

其中有很多混淆方法,可以自己看下教程,在這里就不一一舉例了,混淆只是可以過一些靜態面紗,靜態免殺無非就是針對特征字符的處理,靜態免殺的方法千千萬,基本原理不會變,這里只是提供一種思路,供大家參考,參考文獻
關注我,持續更新!!!
私我獲取【網路安全學習資料·攻略】
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342119.html
標籤:其他
上一篇:Pikachu靶場-xss詳解
