1、U盘构造

     U盘由芯片控制器和闪存两部分组成。

芯片控制器负责与PC的通讯和识别,闪存用来做数据存储;

闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互;固件无法通过普通手段进行读取。

BadUSB就是通过对U盘的固件进行逆向重新编程,相当于改写了U盘的操作系统而进行攻击的。

2、协议漏洞

      根据USB标准,设备占有唯一可识别的MAC地址系统验证,因此具有多个输入输出设备的特征。通过重写U盘固件,伪装成一个USB键盘。虚拟键盘进行指令代码输入。

这里通过Arduino内置函数实现模拟键盘输入和鼠标输入。

3、制作

连接Leonardo板卡到PC串口,这里编程需要用到Auduino自带的Keyboard库:

见文知义keyboard库,功能就是将arduino 模拟成一个usb键盘。
包含Api如下:
  • Keyboard.begin()
  • Keyboard.end()
  • Keyboard.press()
  • Keyboard.print()
  • Keyboard.println()
  • Keyboard.release()
  • Keyboard.releaseAll()
  • Keyboard.write()贴一段网上的测试代码:

    #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()//循环,这里的代码

    {

    //循环体 写入你要循环的代码

    }

  • 实现功能是:插入板卡之后,首先开启大写键 然后打开了运行窗口 然后输入了CMD 回车,命令行会输入 echo first test 并且回车。
  • 进阶玩法:通过自行编程实现插USB之后远程下载木马,或结合Metasploit 进行后门、木马的植入,或者一些批处理文件。

【原创】Arduino制作Badusb实践的更多相关文章

  1. Arduino+Avr libc制作Badusb原理及示例讲解

    一. 前言 2014年美国黑帽大会上研究人员JakobLell和Karsten Nohl展示了badusb的攻击方法后,国内与badusb相关的文章虽然有了一些,但是大部分人把相关文章都阅读后还是会有 ...

  2. 【原创 Hadoop&Spark 动手实践 12】Spark MLLib 基础、应用与信用卡欺诈检测系统动手实践

    [原创 Hadoop&Spark 动手实践 12]Spark MLLib 基础.应用与信用卡欺诈检测系统动手实践

  3. 【原创 Hadoop&Spark 动手实践 13】Spark综合案例:简易电影推荐系统

    [原创 Hadoop&Spark 动手实践 13]Spark综合案例:简易电影推荐系统

  4. 【原创 Hadoop&Spark 动手实践 8】Spark 应用经验、调优与动手实践

    [原创 Hadoop&Spark 动手实践 7]Spark 应用经验.调优与动手实践 目标: 1. 了解Spark 应用经验与调优的理论与方法,如果遇到Spark调优的事情,有理论思考框架. ...

  5. 【原创 Hadoop&Spark 动手实践 9】Spark SQL 程序设计基础与动手实践(上)

    [原创 Hadoop&Spark 动手实践 9]SparkSQL程序设计基础与动手实践(上) 目标: 1. 理解Spark SQL最基础的原理 2. 可以使用Spark SQL完成一些简单的数 ...

  6. 【原创 Hadoop&Spark 动手实践 10】Spark SQL 程序设计基础与动手实践(下)

    [原创 Hadoop&Spark 动手实践 10]Spark SQL 程序设计基础与动手实践(下) 目标: 1. 深入理解Spark SQL 程序设计的原理 2. 通过简单的命令来验证Spar ...

  7. 【原创 Hadoop&Spark 动手实践 11】Spark Streaming 应用与动手实践

    [原创 Hadoop&Spark 动手实践 11]Spark Streaming 应用与动手实践 目标: 1. 掌握Spark Streaming的基本原理 2. 完成Spark Stream ...

  8. 【原创 Hadoop&Spark 动手实践 6】Spark 编程实例与案例演示

     [原创 Hadoop&Spark 动手实践 6]Spark 编程实例与案例演示 Spark 编程实例和简易电影分析系统的编写 目标: 1. 掌握理论:了解Spark编程的理论基础 2. 搭建 ...

  9. 【原创 Hadoop&Spark 动手实践 7】Spark 计算引擎剖析与动手实践

    [原创 Hadoop&Spark 动手实践 7]Spark计算引擎剖析与动手实践 目标: 1. 理解Spark计算引擎的理论知识 2. 动手实践更深入的理解Spark计算引擎的细节 3. 通过 ...

随机推荐

  1. SpringBoot之Java配置

    Java配置也是Spring4.0推荐的配置方式,完全可以取代XML的配置方式,也是SpringBoot推荐的方式. Java配置是通过@Configuation和@Bean来实现的: 1.@Conf ...

  2. python -- 返回函数、匿名函数、装饰器

    返回函数 高阶函数的参数可以是函数,那么其返回值也可以是函数. 闭包 对于高阶函数,内部函数可以引用外部函数的参数和局部变量.当调用外部函数返回内部函数时,相关参数和变量都保存在返回的函数(即内部函数 ...

  3. SQLyog 连接主机的时候出现错误

    这个 连接主机的时候出现: 这个时候打开cmd 找到mysql 的bin目录 输入 mysqld  -nt -remove  即可   直接登录,注意这里的d代表的是服务端 接下来就可以不用输入密码直 ...

  4. JSP 标准标签库JSTL

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这些,它还提供 ...

  5. linux上docker安装centos7.2

    1.安装 docker pull centos:7.2.1511 2.启动镜像 docker run -d -i -t <IMAGE ID> /bin/bash 3.进入容器 docker ...

  6. Echars使用

    声明一个Echars: var myChart = echarts.init(document.getElementById(Id)); 给Echars添加参数: var option = {  参数 ...

  7. rpc概念及nfs的基本应用

    NFS:Network File System NFS监听在TCP/UDP:2049端口: nfs服务器: [root@localhost ~]#yum -y install [root@localh ...

  8. net.js

    var http = require('http'); var https = require('https'); var url=require("url"); var pass ...

  9. java中之内存溢出说明

    java语句是编译型和解释型语言,选通过编译命令javac 把java文件编译为.class字节码文件,然后通过java虚拟机(JVM)加载class文件到内存运行. 而java虚拟机在运行程序时有自 ...

  10. greenplum中to_date函数注意点

    今天协助排查异常数据,发现是如下类似代码产生的: to_date(col_name,'yyyymmdd'),其中col_name是date类型. 这个代码运行后,结果是:2018-11-16的date ...