像电影里黑客一样的BadUSB



  • 漏洞背景

    2014年的美国黑帽大会两位安全研究人员亚当·考蒂尔(Adam Caudill)布兰顿·威尔森(Brandon Wilson)称,他们已对BadUSB进行了“反向工程”(reverse-engineered)。他们在全球最大的男性交友程序员交流网站GitHub上发布了相关代码,并演示了多种用途,包括攻击并控制目标用户的键盘输入。

    BadUSB互动百科

    参考资料有点多就不水字数了就只发一个,百度还是有很多的
    http://www.baike.com/wiki/BadUSB

    准备工具

    电脑一台、操作系统推荐windows(作者用win垃圾10)、某宝买的几十块钱BadUSB一个(长得像U盘的那个东东)、Arduino(Arduino基于c/c++,可以用其他的控制器)

    软件下载

    官网地址https://www.arduino.cc/en/Main/Software
    ruanjianguangwang.png

    软件代码

     #include<Keyboard.h>    //引用键盘通讯库,这个一定要在void setup() {前面。
    
     delay()    //延迟执行下一条代码,(按毫秒计算)
    
       Keyboard.begin()    //开始键盘通讯
    
       Keyboard.end()    //结束键盘通讯
    
      上面这个两个是成对使用的。
    
       Keyboard.press()    //按下一个键
    
       Keyboard.release()    //松开一个键
    
    这两个成对使用如果按下不放会一直按着。
    
     Keyboard.print()    //输入字符
    
     Keyboard.println()    //输入字符并换行
    
     Keyboard.releaseAll()    //松开所有按键
    
     void setup() {这里写代码}    //初始化,只执行一次代码这个括号也是成对的
    
     void loop(){这里写代码}    //循环执行代码,括号成对。
    

    键值表:

          【from keyboard.h/keyboard.cpp】
    一,宏定义部分
       【输入宏定义】
    #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
    

    二,ascii 码部分
    【输入注释里的字符的ascii码】

    0x2a,                  // BS    Backspace
    0x2b,                  // TAB    Tab
    0x28,                  // LF    Enter
    0x2c,                  //  ' '
    0x1e|SHIFT,       // !
    0x34|SHIFT,       // "
    0x20|SHIFT,       // #
    0x21|SHIFT,       // $
    0x22|SHIFT,       // %
    0x24|SHIFT,       // &
    0x34,                 // '
    0x26|SHIFT,       // (
    0x27|SHIFT,       // )
    0x25|SHIFT,       // *
    0x2e|SHIFT,       // +
    0x36,                 // ,
    0x2d,                // –
    0x37,                // .
    0x38,                // /
    0x27,                // 0
    0x1e,                // 1
    0x1f,                 // 2
    0x20,                // 3
    0x21,                // 4
    0x22,                // 5
    0x23,                // 6
    0x24,                // 7
    0x25,                // 8
    0x26,                // 9
    0x33|SHIFT,      // :
    0x33,                // ;
    0x36|SHIFT,      // <
    0x2e,                // =
    0x37|SHIFT,      // >
    0x38|SHIFT,      // ?
    0x1f|SHIFT,       // @
    0x04|SHIFT,      // A
    0x05|SHIFT,      // B
    0x06|SHIFT,      // C
    0x07|SHIFT,      // D
    0x08|SHIFT,      // E
    0x09|SHIFT,      // F
    0x0a|SHIFT,      // G
    0x0b|SHIFT,      // H
    0x0c|SHIFT,      // I
    0x0d|SHIFT,      // J
    0x0e|SHIFT,      // K
    0x0f|SHIFT,       // L
    0x10|SHIFT,      // M
    0x11|SHIFT,      // N
    0x12|SHIFT,      // O
    0x13|SHIFT,      // P
    0x14|SHIFT,      // Q
    0x15|SHIFT,      // R
    0x16|SHIFT,      // S
    0x17|SHIFT,      // T
    0x18|SHIFT,      // U
    0x19|SHIFT,      // V
    0x1a|SHIFT,      // W
    0x1b|SHIFT,      // X
    0x1c|SHIFT,      // Y
    0x1d|SHIFT,      // Z
    0x2f,                 // [
    0x31,                // bslash
    0x30,                // ]
    0x23|SHIFT,      // ^
    0x2d|SHIFT,      // _
    0x35,                // `
    0x04,                // a
    0x05,                // b
    0x06,                // c
    0x07,                // d
    0x08,                // e
    0x09,                // f
    0x0a,                // g
    0x0b,                // h
    0x0c,                 // i
    0x0d,                // j
    0x0e,                // k
    0x0f,                 // l
    0x10,                // m
    0x11,                // n
    0x12,                // o
    0x13,                // p
    0x14,                // q
    0x15,                // r
    0x16,                // s
    0x17,                // t
    0x18,                // u
    0x19,                // v
    0x1a,                // w
    0x1b,                // x
    0x1c,                // y
    0x1d,               // z
    0x2f|SHIFT,      // {
    0x31|SHIFT,     // |
    0x30|SHIFT,     // }
    0x35|SHIFT,     // ~
    

    开始操作

    软件界面emmm,看着还行,颜色像极了爱情.
    ruanjjiemian.png
    编写代码前需要设置一下

    工具——开发板——Aeduino Leonardo
    工具——端口——选择你的板子
    如果不知道你的板子名称
    我的电脑——属性——设备管理器——端口
    

    shezhi1.png
    shezhi2.png
    shebeiguanliqi.png

    开始写代码,过程记得保存
    daima.png

    #include <Keyboard.h>   //引用键盘通讯库一定要写最前面
    void setup() {      //初始化
      Keyboard.begin();     //开始键盘通讯
      delay(2000);     //延迟执行下一条代码,(按毫秒计算),数值设置成为2秒因电脑不同,设置太短了可能没加载好
      Keyboard.press(KEY_LEFT_GUI);    //按下win键
      delay(50);    //延时50毫秒
      Keyboard.press('r');  //按下r键
      delay(50);    //延时50毫秒
      Keyboard.release(KEY_LEFT_GUI);  //结束win键
      Keyboard.release('r');  //结束r键
      Keyboard.press(KEY_CAPS_LOCK);  //开启大写来绕过输入法,滑稽
      Keyboard.release(KEY_CAPS_LOCK);  //结束按大写键
      delay(100);    //延时100毫秒
      Keyboard.println("CMD");   //输入cmd
      delay(130);    //延时130毫秒
      Keyboard.press(KEY_RETURN);    //按下回车键
      Keyboard.release(KEY_RETURN);  //结束回车键
      Keyboard.end();  //结束键盘通讯
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
    }
    

    代码可以自由发挥,比如 ·········· 咳咳咳,此处删除10万字.
    写完后确保没有问题后点击验证,编译完成,点击上传就ok了
    yanzheng.png
    shangchuan.png

    效果视频

    由于我是一个有良心没胆子的菜鸡(菜鸡出来挨打/滑稽),所以我就不亲自示范,从网上找了一个视频
    https://v.qq.com/x/page/l01425u2igw.html
    视频源于腾讯安全平台部
    https://www.freebuf.com/articles/terminal/53886.html


Log in to reply