Стиллер паролей на python с отправкой на почту
Стиллер паролей на python
Привет, сейчас будем делать стиллер паролей на ЯП python. Наш стиллер будет воровать пароли браузеров таких как хром, яндекс браузер, амиго, и др., их куки, делать скриншот экрана, узнавать айпи адрес пк на котором открыли стиллер, его место нахождение и его установленная система.
Приступим к делу
Создаем новый файл в IDLE Python или в другой IDE.
Подключаем все нужные библиотеки. В некоторых нужно в cmd скачивать модули.
Собираем с пользователя все его данные.
Собираем пароли с хрома.
Собираем куки с хрома.
Пароли с яндекс браузера.
Данные с FILEZILLA.
Делаем скриншот экрана.
Тут записываем наши тхт в один ZIP — doc.
Вот он наш ZIP по всеми данными.
Тут мы создаем вложение для нашего doc’а ZIP.
Здесь мы собственно производим отправку на емаил с помощью SMTP
Чтобы отправилось сообщение с вашей новой почты gmail нужно проделать это:
На странице «Аккаунт Google» откройте раздел Ненадежные приложения, у которых есть доступ к аккаунту, и включите. Тогда все будет ОК.
Открываете cmd консоль и пишете cd и путь к папке где лежит ваш файл с кодом, ентер.
cd и путь к файлу.
Ссылки
О песочнице
Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.
Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.
Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.
О модерации
Не надо пропускать:
Стиллер паролей на python с отправкой на почту
Стиллер паролей на python
Привет, сейчас будем делать стиллер паролей на ЯП python. Наш стиллер будет воровать пароли браузеров таких как хром, яндекс браузер, амиго, и др., их куки, делать скриншот экрана, узнавать айпи адрес пк на котором открыли стиллер, его место нахождение и его установленная система.
Приступим к делу
Создаем новый файл в IDLE Python или в другой IDE.
Подключаем все нужные библиотеки. В некоторых нужно в cmd скачивать модули.
Собираем с пользователя все его данные.
Собираем пароли с хрома.
Собираем куки с хрома.
Пароли с яндекс браузера.
Данные с FILEZILLA.
Делаем скриншот экрана.
Тут записываем наши тхт в один ZIP — doc.
Вот он наш ZIP по всеми данными.
Тут мы создаем вложение для нашего doc’а ZIP.
Здесь мы собственно производим отправку на емаил с помощью SMTP
Чтобы отправилось сообщение с вашей новой почты gmail нужно проделать это:
На странице «Аккаунт Google» откройте раздел Ненадежные приложения, у которых есть доступ к аккаунту, и включите. Тогда все будет ОК.
Открываете cmd консоль и пишете cd и путь к папке где лежит ваш файл с кодом, ентер.
cd и путь к файлу.
Ссылки
About the sandbox
This is the Sandbox — the part of Habr that accumulates all the debut posts of those who want to become full members of the community.
If you have an invitation send it to the author of the pending publication you like in order to share the post with the rest of Habr community so they can read and comment it.
To avoid any prejudice all the posts here are anonymous and nicknames are generated randomly.
About post’s verification
Don’t pass such stuff:
Крадущийся питон. Создаем простейший троян на Python
Содержание статьи
Конечно, приведенные в статье скрипты никак не годятся для использования в боевых условиях: обфускации в них нет, принципы работы просты как палка, а вредоносные функции отсутствуют напрочь. Тем не менее при некоторой смекалке их возможно использовать для несложных пакостей — например, вырубить чей‑нибудь компьютер в классе (или в офисе, если в классе ты не наигрался).
Теория
Итак, что вообще такое троян? Вирус — это программа, главная задача которой — самокопирование. Червь активно распространяется по сети (типичный пример — «Петя» и WannaCry), а троян — скрытая вредоносная программа, которая маскируется под «хороший» софт.
Логика подобного заражения в том, что пользователь сам скачает себе вредонос на компьютер (например, под видом крякнутой программы), сам отключит защитные механизмы (ведь программа выглядит хорошей) и захочет оставить надолго. Хакеры и тут не дремлют, так что в новостях то и дело мелькают сообщения о новых жертвах пиратского ПО и о шифровальщиках, поражающих любителей халявы. Но мы‑то знаем, что бесплатный сыр бывает только в мусорке, и сегодня научимся очень просто начинять тот самый сыр чем‑то не вполне ожидаемым.
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Несанкционированный доступ к информации и нарушение работы систем могут преследоваться по закону. Помни об этом.
Определяем IP
Сначала нам (то есть нашему трояну) нужно определиться, где он оказался. Важная часть твоей информации — IP-адрес, по которому с зараженной машиной можно будет соединиться в дальнейшем.
Начнем писать код. Сразу импортируем библиотеки:
Если ты видишь ошибку, что у тебя отсутствует pip, сначала нужно установить его с сайта pypi.org. Любопытно, что рекомендуемый способ установки pip — через pip, что, конечно, очень полезно, когда его нет.
Код получения внешнего и внутреннего адресов будет таким. Обрати внимание, что, если у жертвы несколько сетевых интерфейсов (например, Wi-Fi и Ethernet одновременно), этот код может вести себя неправильно.
Если с локальным адресом все более‑менее просто — находим имя устройства в сети и смотрим IP по имени устройства, — то вот с публичным IP все немного сложнее.
Вывести информацию еще проще:
Строковые литералы не только хорошо смотрятся в коде, но и помогают избегать ошибок типа сложения строк и чисел (Python — это тебе на JavaScript!).
Собираем пароли Chrome и отправляем в Telegram. Простейший стилер на Rust
Мы уже рассказывали о написании стилера паролей на C и делали кейлогер и RAT своими руками. С тех пор многое изменилось, например в Chrome появилось шифрование паролей, а многие злоумышленники не стесняются использовать Telegram для сбора ворованных данных. Сегодня я покажу в деталях как написать простейший стилер паролей от Chrome с отправкой в «телегу» на языке Rust. Почему Rust? Это очень перспективный язык, по синтаксису и скорости выполнения кода очень похожий на C. Поэтому для тех, кто имел дело с C освоить Rust не составит труда. Rust, на ряду с С горяче любим создателями различной малвари. И, хотя, C остаётся «олдскульным» выбором, разработка Rust не стоит на месте и некоторые считают, что за ним будущее.
Качаем и устанавливаем Rust
Стилер будет работать из под винды, соответвенно предполагается что ваша среда разработки Windows.
Поэтому начнем с установки Rust для Windows. Сделать это довольно просто, качаем exe отсюда: https://www.rust-lang.org/tools/install
Открываем Windows PowerShell и переходим в терминале на наш Рабочий стол командой:
Если проект необходимо создать в другой папке, а не на рабочем столе, зайдите через PowerShell куда вам необходимо, это не принципиально.
Теперь создаем проект с помощью пакетного менеджера cargo, пишем в терминале:
*strl_chrm_password_rust — название проекта, ваше название может быть другим.
Папка strl_chrm_password_rust должна была появиться на рабочем столе.
Открываем Visual Studio Code (или любой другой удобный редактор) и папку которую только что создали.
Если всё ок, вы увидите следующую структуру:
Открываем терминал в VS Code: CTRL + SHIFT + ` (` — возле клавиши 1, вверху)
Проверим если всё работает выполнив команду:
Если всё ок, в папке проекта появится папка target, а результатом будет выполнение программы из файла src/main.rs, а именно вывод строки “Hello, world!”.
Собираем данные о пользовате
Начнём с того, что соберём данные о пользователе — его ип, юзернейм, имя хост-машины.
Открываем файл main.rs и приступаем.
Для начала создадим необходимые структуру пользователя с опеределением типов:
Теперь наш main.rs должен выглядить примерно так:
В Rust в качестве подключаемых библиотек используются «крейты» от слова crate, ящик. Бывает два типа крейтов: библиотечный и исполняемый. Библиотечные крейты можно подключать в другие крейты, но нельзя исполнять. Исполняемые же крейты — полная противоположность библиотечным — могут исполняться, но их нельзя подключить в другие крейты. Для того, чтобы определить имя хоста и юзернейм воспользуемся крейтом whoami.
Установить крейт можно благодаря уже знакомому нам пакетному менеджеру cargo.
Добавим зависимость в файл Cargo.toml и при следующей сборке зависимость автоматически подтянется.
В файл Cargo.toml в dependencies:
Теперь можно проверить, если все будет работать, как мы хотим.
Для этого в функции main вместо:
В самый верх файла main.rs добавляем:
В итоге теперь наш main.rs должен выглядить следующим образом:
Теперь вместо «Hello, world!» у нас должно отобразиться имя пользователя и хоста.
С этим разобрались, теперь необходимо определить ip. Для этого будем использовать get запрос на httpbin тчк org/ip
Формат ответа у нас будет приходить в json в следующем формате:
Поэтому подготовим структуру для такого ответа:
Добавляем структуру Ip куда-нибудь под структуру User.
Напишем саму функцию, которая поможет нам получить ip.
Т.к. IP мы будем десеарилизовывать при ответе, нам необходимо добавить derive аттрибут из крейта serde — Deserialize к структуре Ip.
Так же мы будем делать запросы, в этом нам поможет крейт ureq.
Для этого в Cargo.toml добавляем новые зависимости под/над whoami:
В самый верх main.rs добавляем:
Теперь к скрутуре Ip можем добавить Deserialize, делаем это таким образом:
Имплементируем структуре User следущую логику:
Ну и давайте снова все проверим, в вывод строки добавим ип:
Теперь в терминале, помимо имени пользователя и хоста должно появиться ещё и значение ip.
Таким образом теперь наш main.rs должен выглядеть примерно так:
Готовим структуру для данных Chrome
С информацией о пользователе мы разобрались. Теперь давайте приступим к основной части, а именно попробуем вытащить сохраненные в Chrome пароли.
Для начала сделаем структуру и разместим её под стурктурой Ip:
Ну и сразу же давайте подготовим блок для имлементации функций типу Chrome, по аналогии как с User, добавляем:
Первое, что нам необходимо будет сделать, это как-то взаимодействовать с файловой системой. Поэтому снова добавим зависимость в наш Cargo.toml:
Этот крейт поможет определить нужные нам пути.
Как обычно добавляем вверху файла main.rs:
Также из стандартной библиотеки нам понадобится PathBuf:
Записываем в таком формате, т.к. список зависимостей из стандартной библиотеки еще будет расширяться.
Ищем локальную БД Chrome и работаем с файлом
И так, теперь давайте приступим к самим паролям. Пароли хрома хранятся в файле Login Data, который обычно находится по такому пути — C:\Users\USERNAME\AppData\Local\Google\Chrome\User Data\Default
Login Data – это самая простая sqlite БД, отсюда нам и необходимо вытащить сокровенное.
Давайте напишем функцию которая найдет нам файл БД и создаст нам копию файла.
Для этого вверху файла main.rs немного расширим используемые нами модули из стандартной библиотеки, добавим к path::PathBuf еще fs, для работы с файловой системой:
Для того, что бы определить папку нашего пользователя воспользуемся библиотекой platform_dirs которую мы ранее добавили. И сразу же найдем файл с БД.
В блоке impl Chrome добавим функцию:
Аргумент open мы передадим уже из функции, которая поможет найти и переместить наш файл.
Теперь мы можем найти наш файл с БД и давайте сразу перенесем его куда-нибудь, чтоб не получилось так, что в момент обращения к БД она будет локнута. Так же в блок impl Chrome добавим функцию find_db:
В переменной local_sqlite_path мы сразу передаем аргументом то, что нам надо найти, а именно: Google\\Chrome\\User Data\\Default\\Login Data, а там уже наша библиотека path_dirs сама определит у какого пользователя искать.
Отлично, теперь у нас есть функции которые определят папку пользователя, найдут и переместят наш файл с БД.
Снова давайте проверим, если всё работает как надо, в main.rs добавим:
Открываем C:\Users\USERNAME\AppData\Local и смотрим, у нас появился файл с именем sqlite_file, значит всё ок.
Наш main.rs постепенно приобретает вид:
Подключение к БД и попытка вытащить информацию
Файл с БД мы нашли и переместили куда нам надо, теперь давайте подключимся к самой БД и посмотрим что там.
Для работы с БД, воспользуемся крейтом rusqlite.
Возвращаемся к нашему файлу Cargo.toml и под блок dependencies, отдельно добавим rusqlite таким образом:
Объяснять почему именно так не буду, если кому интересно, почему с этим пакетом так, то загуглите — «How to build rusqlite on Windows».
Теперь Cargo.toml должен выглядить примерно так:
В main.rs так же как обычно наверх добавляем нашу новую зависимость:
Теперь давайте попобуем вытащить данные из нашего файла с БД, напишем функцию obtain_data_from_db и там же попробуем использовать нашу ранее написанную функцию find_db. Все так же, добавляем функцию в блок imlp Chrome:
В переменной conn, мы аргументом в open передаем файл БД sqlite который мы нашли и переместели ранее с помощью find_db.
Далее пишем простой SQL запрос, который вытащит все, что нам надо из таблицы logins.
Ну и с помощью query_map создаем структуры Chrome и всё это помещаем в вектор, отдав результат.
Как обычно проверяем, в функции main вместо:
И над структурой Chrome, добавим derive Debug, теперь она будет выглядить так:
Скрестим пальцы и надеемся, что сейчас всё выведет в терминал:
Но мимо нас пролетает розовая птица обломинго, что-то не так с типом пароль:
У нас в структуре password это String. Ну ок, давайте себя немного успокоим, мы то знаем, что пароль зашифрован и так совершенно другой тип(Vec ), к этому мы вернемся чуть позже, а так то всё работает?
Давайте в нашей функции obtain_data_from_db, где создается стуктура Chrome попробуем паролю поставить row1, вместо row2.
Где password ставим row.get(1)?, теперь так:
Вот теперь то, что надо, только вместо пароля логин. Хорошо, с этим мы разберемся позже, давайте посмотрим на наш main.rs и пойдем дальше:
Расшифровываем пароль
И так, мы знаем что наш пароль в БД зашифрован.
Вдаваться в подробности я сильно не буду, лишь кратко скажу, что используется AEAD-режим блочного шифрования. Можно загуглить, если интересно.
Первое что необходимо — это вытащить ключ хрома, ну и второе — собственно расшифровать сам пароль.
Как я уже сказал, в детали углубляться не будем, кратко:
1. Вытаскиваем файл Local State
2. Находим там ключ
3. Декодируем его, с помощью winapi расшифровываем и на выходе получаем нужный вектор с байтами. (подробнее тут: docs тчк microsoft тчк com/ru-ru/windows/win32/api/dpapi/nf-dpapi-cryptunprotectdata)
Для всех этих манипуляций нам будет необходим крейт winapi и base64, поэтому в Cargo.toml добавляем:
В main.rs, как обычно наверх добавим:
Так же немного расширим использование стандартной библиотеки, вместо:
Теперь напишем саму функцию получения ключа, в наш блок impl Chrome, под функцию local_app_data_folder добавим:
Проверяем, в функцию main добавим под println!(«<:?>», res.unwrap()):
Запускаем. Уже помнишь как?
Теперь в терминале под вектором из Chrome стуктур должен появится еще и вектор байтов, значит всё ок.
Строку println!(«<:?>», res) из chrome_saved_key теперь можно убрать.
Сейчас main.rs должен выглядеть примерно так:
Ключ мы вытащили, теперь давайте расшифруем сам пароль, который есть в БД.
Для расшифровки пароля нам потребуется крейт aes_gcm.
В Cargo.toml добавим:
Теперь он выглядит вот так:
Как обычно добавим зависимости вверх main.rs:
В блоке impl Chrome в самый низ добавим функцию decrypt_password, входным аргументом будет собственно сам зашифрованный пароль из БД:
Теперь вернемся в функцию obtain_data_from_db и вспомним, как мы вместо пароля ставили логин, теперь попробуем воспользоваться нашей новой функцией расшифровки пароля.
А теперь запускаем:
Хех, теперь у нас есть вектор из Chrome структур с полным набором данных.
Наш main.rs теперь должен иметь следующий вид:
Отправляем полученные данные в телеграм
Пароли мы вытащили, теперь давайте разберемся, что с ними делать. А давайте отправим себе в телеграм, можно придумать и что-то другое, но пусть в данном случае будет творение Дурова.
И так, в нашей функции main стираем всё, что мы ранее писали:
Под ней напишем функцию grabber, которая очень некрасивым кодом превратит все данные в красивую строку:
В main вызваем собственно фунцию grabber:
Добавляем последнию зависимость в Cargo.toml:
Финальная версия Cargo.toml:
Она поможет нам отправить сообщение в телеграм.
Под let res = grabber() добавим в функции main:
Значение токена и chat_id, понятное дело, должно быть ваше.
Если токен и chat_id верные, то в телеграм должно прийти, что-то вроде:
Где поля конечно же не должны быть пустыми.
И так, финальная версия нашего main.rs:
Наконец давайте соберем наш бинарник.
В терминале выполняем cargo run, только с флагом release:
Если всё удачно скомпилировалось, то в папке target/release появится файл strl_chrm_password_rust.exe
Отправляем файл другу — все его пароли у нас. Перенаправьте ему сообщение с паролями и скажите ему чтоб больше так не делал, а заодно сменил все пароли.
Загрузим наш бинарник на вирустотал. В Багдаде всё спокойно (пока).
Получим несколько сообщений от ботов с вирустотал(или нет) в телеграм и удаляем всю папку strl_chrm_password_rust и забываем обо всём.
Совсем не сложно, правда? Конечно же функционал можно доработать, например, добавить кейлогер. И сделать это совсем не сложно.
Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.
Комментарии
Полезная статья, как раз изучаю rust, однако для вирусов мне кажется он не очень хорош. Слишком уж большие бинари на выхлопе.
Добавить комментарий Отменить ответ
Python в ИБ. Часть 3. Основы работы с библиотекой pwntools.
Хочешь написать свой эксплоит? Ты на верном пути. В этом уроке мы рассмотрим специализированную библиотеку для сетевого.
Шифруем свои файлы удалённо через телеграм. Python 3.8
Я уже давно перестал доверять Дурову и его детищу. Слишком много слухов и подозрений витает вокруг. Тем не менее.
Учимся писать JS снифер. Теория и практика для самых маленьких. Часть 2
Наверняка ты не раз слышал о том, что злоумышленники похищают персональные данные форм со взломанных ими ресурсов.
Python в ИБ. Часть 5. Создаём брутфорсер формы
Сегодня мы научимся писать скрипт для брута формы авторизации. Брутить будем форму авторизации, созданную в сервере.
Введение в PEDA и Pwntools. Часть 1
В этой тстатье поёдет разговор про PEDA. Нет, не про тех «педа», не, пугайтесь, а про Python Exploit.
Пациент, укольчик. Фреймворк для автоматизации поиска SQL инъекций на Python
В этой статье мы объясним, что такое SQL-инъекция, опишем некоторые распространенные примеры, объясним, как найти и.
Введение в PEDA и Pwntools. Часть 2
Продолжим наше знакомство с необходимым инструментарием.. Pwntools Pwntools — это python библиотека позволяющая.
Python в ИБ. Часть 8. Парсинг и обработка данных
Сегодня речь пройдёт про парсинг и обработку данных. Практически любой программист или хакер сталкивается с этой.
Стеганография 2020: вещь в себе. Прячем иголку в стоге сена.
В наше время шифрование является краеугольным камнем цифровой безопасности и использование его стойких методов отличный.
Python в ИБ. Часть 4. Создаём продвинутый TCP-сервер
Этот урок будет посвящён созданию более продвинутого и функционального TCP-сервера. Создание базового сервера было в.
Пишем снифер формы для самых маленьких
Предположим, ты заинтересовался, как прочесть информацию из форм передавамых на каком то сайте, но ты не понимаешь.
Пишем 3 SMS бомбера на Python 3.8
Идеальных людей нет, как нет и идеальных сервисов в интернете. В этой статье мы рассмотрим проблемы с известными.