【原創】Arduino制作Badusb實踐


1、U盤構造

     U盤由芯片控制器和閃存兩部分組成。

     芯片控制器負責與PC的通訊和識別,閃存用來做數據存儲;

     閃存中有一部分區域用來存放U盤的固件,它的作用類似於操作系統,控制軟硬件交互;固件無法通過普通手段進行讀取。

     BadUSB就是通過對U盤的固件進行逆向重新編程,相當於改寫了U盤的操作系統而進行攻擊的。

2、協議漏洞

      根據USB標准,設備占有唯一可識別的MAC地址系統驗證,因此具有多個輸入輸出設備的特征。通過重寫U盤固件,偽裝成一個USB鍵盤。虛擬鍵盤進行指令代碼輸入。

     這里通過Arduino內置函數實現模擬鍵盤輸入和鼠標輸入。

3、制作

連接Leonardo板卡到PC串口,這里編程需要用到Auduino自帶的Keyboard庫:

見文知義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 進行后門、木馬的植入,或者一些批處理文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM