BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。
Bad-Usb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。
为什么要学习badusb
怎么说呢,听网上的大佬们讲。。。badusb可以绕过杀毒什么的,反正很厉害…社工利器,想想你在夜黑风高的夜晚,去插别人的机子,插谁谁怀孕.
环境搭建
arduino
提取码:48bu
然后还需要我们去某宝买一个回来,输入badusb就可以找到很多卖家,买一个跟普通usb差不多的,可以以假乱真,不懂的人以为是个usb呢
然后进入arduino需要配置一下
工具->编译器选择USBasp
插上我们的usb
工具->端口选择插入的usb名字,我的叫arduino micro
然后再在
工具->开发板,选择我们对应的usb
打开arduino,新建一个项目,会看到如下代码
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
光看这个可能理解的不够彻底,可以看看arduino的主函数
#include
int main(void)
{
init();
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
这就是arduino的大框架,分为setup和loop,解释的也很明显,一个是只执行一次,一个是执行很多次,先执行setup里面代码,再执行loop里面的循环
通过一个简单的例子来了解一下大概的命令
#include
void setup() {
Keyboard.begin();
delay(3000);
Keyboard.press(KEY_LEFT_GUI);
delay(200);
Keyboard.print("r");
delay(200);
Keyboard.release(KEY_LEFT_GUI);
Keyboard.press(KEY_CAPS_LOCK);
Keyboard.release(KEY_CAPS_LOCK);
delay(200);
Keyboard.println("NOTEPAD");
delay(500);
Keyboard.println("hacked!!!");
Keyboard.end();
}
void loop()
{
}
这个例子比较简单,没有loop所以只执行一次
一上来先引用键盘通讯事件的头
#include
一头一尾可以看到begin和end
Keyboard.begin();//键盘事件开始
Keyboard.end(); //键盘事件结束,在此期间的键盘操作才是有效的
接下来是一个延时操作,因为有时候由于系统的原因可能出现卡顿,如果操作后没有停顿可能造成执行错误,所以推荐延时使用,延时的基本单位是毫秒,这里的3000毫秒就是3秒
delay(3000);//延时3秒
接下来是一个press命令,该命令作用是按下一个建并且持续按住,一直按倒结束命令为止,而key_leaf_gui就是键盘上的左边的start键,也就是win键
Keyboard.press(KEY_LEFT_GUI);//按下一个键并持续按住
以下是对应的键
有些比较熟悉的我就没有注释
KEY_LEFT_CTRL
KEY_LEFT_SHIFT
KEY_LEFT_ALT
KEY_LEFT_GUI//win
KEY_RIGHT_CTRL
KEY_RIGHT_SHIFT
KEY_RIGHT_ALT
KEY_RIGHT_GUI//win
KEY_UP_ARROW//上
KEY_DOWN_ARROW//下
KEY_LEFT_ARROW//左
KEY_RIGHT_ARROW//右
KEY_BACKSPACE//回退键,就是+=号右面那个
KEY_TAB
KEY_RETURN//回车键
KEY_ESC
KEY_INSERT//ins键,我的笔记本上是和F12在一起
KEY_DELETE //del键
KEY_PAGE_UP//这个台式机有,我的好像没找到
KEY_PAGE_DOWN//我也没找到
KEY_HOME//home键
KEY_END//end键
KEY_CAPS_LOCK/caps键
KEY_F1
KEY_F2
KEY_F3
KEY_F4
KEY_F5
KEY_F6
KEY_F7
KEY_F8
KEY_F9
KEY_F10
KEY_F11
KEY_F12
大家可以看到,这里面有很多键,但没有看到数字和字母键,那如果我们想要按数字或字母怎么办
Keyboard.print("r");
这个操作本来是输出一个r出来。但在这里我们和之前的key_leaf_gui合在一起就变成了调出“运行”这个命令,因为上一步的按键是持续的,所以有这个效果
当然我们键也不能按时间长了,也需要释放所以就对应着这个命令,释放某个键
Keyboard.release(KEY_LEFT_GUI);
接下来这个操作不知道大家可以理解吗,按住key_caps_lock,就是切换大小写,因为如果此时目标电脑是中文输入模式,那么之后我们的输入可能会因为中文输入的原因产生问题,所以及时切换为大写就可以解决这个问题了,而windows系统不区分大小写
Keyboard.press(KEY_CAPS_LOCK);
Keyboard.release(KEY_CAPS_LOCK);
这个跟刚才的print有些不一样,这个输出完了以后还顺便输出回车,这个效果就是在运行里面输入NOTEPAD在回车,不就是开始运行记事本了吗
Keyboard.println("NOTEPAD");
进入记事本输出一个傻傻的话哈哈
Keyboard.println("hacked!!!");
代码写完了,点一下小勾,是编译的效果,没有错误的话就可以点击→,上传到我们的usb ,上传成功以后这个usb就会自动运行…
因为我在打字,所以没有运行成功,有我人为的干扰
重插一次