❤️博客主页: iknow181
🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP
🎉欢迎大家点赞👍收藏⭐评论✍
在这篇博客中,我将详细介绍如何从零开始使用 ATtiny85 开发板制作一个 BadUSB。通过这个教程,你将学会如何将 Digispark ATtiny85 开发板变成一个恶意 USB 设备,并模仿橡皮鸭(Rubber Ducky)的功能,执行预定义的脚本。
0x01 badusb介绍
BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。
BadUsb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。
恶意代码存在于U盘的固件中,PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法防御BadUSB的攻击。
0x02 所需材料
- USB 版 Attiny85 Digispark 1PCS(从淘宝上购买了一个)
- Arduino IDE(云端或本地)
- DPinst64.exe 驱动
- DigiKeyboard 库(用于模拟键盘输入)
- Windows 或 Linux 系统
0x03 操作步骤
步骤 1:安装 Arduino IDE
如果你还没有安装 Arduino IDE,可以选择以下两种方式:
- 本地安装:从 Arduino 官方网站 下载并安装。
- 云编辑:访问 Arduino Cloud 并创建一个账号,使用在线编辑器。
步骤 2: 下载驱动 DPinst64.exe
步骤 3:安装驱动
如果是 64 位操作系统请选择 DPinst64.exe,否则请选择 DPinst.exe.
步骤 4:配置 Arduino IDE
在你安装好 Arduino IDE 之后,需要对其进行配置,以便支持 ATtiny85 开发板。
- 打开 Arduino IDE,依次点击 文件 > 首选项。
- 在 附加开发板管理器网址 中,添加以下 URL:
https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json
- 设置代理
这里有个坑点,最好开启全局代理,并且 Arduino IDE 也设置代理,不然可能会程序包下载不了的问题。
文件>首选项>网络
- 然后,点击 工具 > 开发板 > 开发板管理器,搜索 Digistump AVR Boards 并点击 安装。
这里我是已经安装好了的页面。
- 选择开发板类型
ps: 注意不要用那个 pro(我之前就用的这个 pro,结果发现可以上传但是插入 usb 后不能执行命令。下面图片截的是 用 pro 时截的。之后就改为没有 pro 的。大家体量的看看,流程差不多,就开发板不一样)
- 新建一个 Keyboard 示例
选择 DigisparkKeyboard>Keyboard
会跳出这个页面
- 选择编程器
工具>编程器>USBtinyISP
这两者的区别:
1. USBtinyISP (ATTinyCore) FAST
- 适用范围: 适用于运行时钟频率 >= 2 MHz 的 ATtiny 微控制器。
- 通信速度: 使用较高的通信速度,这样可以更快地编程和烧录程序到微控制器中。
- 优点: 更快的编程和上传速度,节省时间。
- 要求: 微控制器需要能够稳定工作在较高的时钟频率下,否则可能会遇到编程错误或失败。
2. USBtinyISP (ATTinyCore) SLOW
- 适用范围: 适用于新的或运行时钟频率为 1 MHz 的 ATtiny 微控制器。
- 通信速度: 使用较低的通信速度,这样可以确保更稳定的编程过程。
- 优点: 适用于时钟频率较低的 ATtiny 微控制器,能够避免由于高速度引起的通信问题。
- 要求: 适用于较慢的时钟频率,以确保可靠的编程和通信。
3. 总结
- 选择
FAST
还是SLOW
:
-
- 如果你的 ATtiny 微控制器的时钟频率 >= 2 MHz,并且你希望更快的编程速度,可以选择
FAST
选项。 - 如果你的微控制器运行在较低的时钟频率(例如 1 MHz),或者你遇到编程问题时,建议选择
SLOW
选项,以提高稳定性。
- 如果你的 ATtiny 微控制器的时钟频率 >= 2 MHz,并且你希望更快的编程速度,可以选择
步骤 5:编写 BadUSB 脚本
下面是一段简单的脚本,模仿 USB 键盘输入行为。当 BadUSB 插入电脑时,它会自动打开记事本并输出一些预设信息。
#include "DigiKeyboardBe.h" // 如果你的库是DigiKeyboardBe
void setup() {
DigiKeyboard.sendKeyStroke(0); // 发送一个空按键以唤醒设备
DigiKeyboard.delay(5000); // 延迟5秒,确保系统已经完全准备好
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); // Win + R 打开运行窗口
DigiKeyboard.delay(500);
DigiKeyboard.println("notepad"); // 打开记事本
DigiKeyboard.delay(500);
DigiKeyboard.println("This is a BadUSB attack!"); // 打印信息
}
void loop() {
// 空循环,脚本只执行一次
}
步骤 6:编译和上传代码
- IDE 编译代码
点击这个验证,会编译代码,看有没有代码报错
出现这些告警信息没事, 这些警告大多是代码风格和整数溢出的问题,通常不会影响程序正常工作。它们提示的是一些宏定义缺少空格,以及大整数被隐式截断成无符号类型。
下面白色字体的是存储空间使用情况
- 上传
如果验证无误就可以插入 usb 开发板,进行上传了
注意此时先不要插板
先点击上传按钮,在编译成功后在插板(因为 digispark 需要进行一次热插拔,才会被识别上传成功)
成功后你会在 IDE 窗口中看到 "Upload done" 提示。
步骤 6:测试你的 BadUSB
- 将 usb 开发板 插入目标计算机,等待几秒钟。
- 你应该看到自动打开的记事本,并输入预设的文本。
0x04 免责说明
本文章仅用于学习、工作与兴趣爱好,并立志为网络安全奉献一份力量,凡是利用本博客相关内容的无良hackers造成的安全事故均与本人无关!