Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей

Шифрование и дешифрование на основе паролей AES.

Спецификация криптографии для создания ключей, описанная в RFC 8018, может быть использована для шифрования на основе пароля.

Для входа PKCS:

  • Пароль – задается пользователем.
  • Salt – Не менее 64 бит (8 байт) случайных байтов.
  • Количество повторений – Рекомендуется не менее 1000 повторений.

Что означает соль и количествотераций?

  • Соль создает широкий набор ключей для данного пароля. Например, если соль составляет 128 бит, для каждого пароля будет целых 2^128 ключей. Поэтому это увеличивает сложность радужных атак. Кроме того, радужная таблица, которую злоумышленники создают для пароля одного пользователя, стала бесполезной для другого пользователя.
  • Количество итераций увеличивает стоимость получения ключей из пароля, следовательно, увеличивает сложность и замедляет скорость атак.

Поскольку для расшифровки нам нужен тот же VI, мы добавим к тексту 12 байт IV и соль пароля для получения зашифрованного результата. Кроме того, мы преобразуем зашифрованный текст из массива байтов в строковое представление с помощью кодировщика Base64.

Что произойдет, если соль пароля станет широко известной? Допустимо, если пароль является одновременно и секретным, и общеизвестным.

package com.mkyong.crypto.encryptor;

import com.mkyong.crypto.utils.CryptoUtils;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * AES-GCM inputs - 12 bytes IV, need the same IV and secret keys for encryption and decryption.
 * 

Выходные данные имеют формат output = byte[] i i i i s s s s c c c c c c c. и содержат следующую информацию: iv, соль пароля, зашифрованное содержимое и метку auth.

* i = IV bytes * s = Salt bytes * c = content bytes (encrypted content) */ public class EncryptorAesGcmPassword { private static final String ENCRYPT_ALGO = "AES/GCM/NoPadding"; private static final int TAG_LENGTH_BIT = 128; // must be one of {128, 120, 112, 104, 96} private static final int IV_LENGTH_BYTE = 12; private static final int SALT_LENGTH_BYTE = 16; private static final Charset UTF_8 = StandardCharsets.UTF_8; // return a base64 encoded AES encrypted text public static String encrypt(byte[] pText, String password) throws Exception { // 16 bytes salt byte[] salt = CryptoUtils.getRandomNonce(SALT_LENGTH_BYTE); // GCM recommended 12 bytes iv? byte[] iv = CryptoUtils.getRandomNonce(IV_LENGTH_BYTE); // secret key from password SecretKey aesKeyFromPassword = CryptoUtils.getAESKeyFromPassword(password.toCharArray(), salt); Cipher cipher = Cipher.getInstance(ENCRYPT_ALGO); // ASE-GCM needs GCMParameterSpec cipher.init(Cipher.ENCRYPT_MODE, aesKeyFromPassword, new GCMParameterSpec(TAG_LENGTH_BIT, iv)); byte[] cipherText = cipher.doFinal(pText); // prefix IV and Salt to cipher text byte[] cipherTextWithIvSalt = ByteBuffer.allocate(iv.length salt.length cipherText.length) .put(iv) .put(salt) .put(cipherText) .array(); // string representation, base64, send this string to other for decryption. return Base64.getEncoder().encodeToString(cipherTextWithIvSalt); } // we need the same password, salt and iv to decrypt it private static String decrypt(String cText, String password) throws Exception { byte[] decode = Base64.getDecoder().decode(cText.getBytes(UTF_8)); // get back the iv and salt from the cipher text ByteBuffer bb = ByteBuffer.wrap(decode); byte[] iv = new byte[IV_LENGTH_BYTE]; bb.get(iv); byte[] salt = new byte[SALT_LENGTH_BYTE]; bb.get(salt); byte[] cipherText = new byte[bb.remaining()]; bb.get(cipherText); // get back the aes key from the same password and salt SecretKey aesKeyFromPassword = CryptoUtils.getAESKeyFromPassword(password.toCharArray(), salt); Cipher cipher = Cipher.getInstance(ENCRYPT_ALGO); cipher.init(Cipher.DECRYPT_MODE, aesKeyFromPassword, new GCMParameterSpec(TAG_LENGTH_BIT, iv)); byte[] plainText = cipher.doFinal(cipherText); return new String(plainText, UTF_8); } public static void main(String[] args) throws Exception { String OUTPUT_FORMAT = "%-30s:%s"; String PASSWORD = "this is a password"; String pText = "AES-GSM Password-Bases encryption!"; String encryptedTextBase64 = EncryptorAesGcmPassword.encrypt(pText.getBytes(UTF_8), PASSWORD); System.out.println("n------ AES GCM Password-based Encryption ------"); System.out.println(String.format(OUTPUT_FORMAT, "Input (plain text)", pText)); System.out.println(String.format(OUTPUT_FORMAT, "Encrypted (base64) ", encryptedTextBase64)); System.out.println("n------ AES GCM Password-based Decryption ------"); System.out.println(String.format(OUTPUT_FORMAT, "Input (base64)", encryptedTextBase64)); String decryptedText = EncryptorAesGcmPassword.decrypt(encryptedTextBase64, PASSWORD); System.out.println(String.format(OUTPUT_FORMAT, "Decrypted (plain text)", decryptedText)); } }

Выход

3.2 Если пароль не совпадает, Java выдает исключение AEADBadTag Exception: Несоответствие тегов!

Выход

Входные данные шифрования Java и AES.

Для шифрования и дешифрования AES нам нужны следующие исходные данные:

Лучшая практика для AES

1.1 Начальное значение, или начальный вектор, – это случайный байт, который обычно состоит из 12-24 бит. Чтобы создать случайный IV, мы можем использовать SecureRandom.

1.2 Секретный ключ AES, либо AES-128 , либо AES-256 . В Java мы можем использовать Генератор ключей для генерации секретного ключа AES.

Секретный ключ AES, созданный с помощью введенного пароля. Чтобы получить ключ AES в Java, мы можем использовать SecretKeyFactory и PBD F2WithHmacSHA256.

Мы можем использовать случайный Nonce в качестве исходного кода и соли для предотвращения радужных атак.

1.4 Чтобы избежать повторения одного и того же кода, мы объединяем все методы в один класс util.

package com.mkyong.crypto.utils;

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.util.ArrayList;
import java.util.List;

public class CryptoUtils {

    public static byte[] getRandomNonce(int numBytes) {
        byte[] nonce = new byte[numBytes];
        new SecureRandom().nextBytes(nonce);
        return nonce;
    }

    // AES secret key
    public static SecretKey getAESKey(int keysize) throws NoSuchAlgorithmException {
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(keysize, SecureRandom.getInstanceStrong());
        return keyGen.generateKey();
    }

    // Password derived AES 256 bits secret key
    public static SecretKey getAESKeyFromPassword(char[] password, byte[] salt)
            throws NoSuchAlgorithmException, InvalidKeySpecException {

        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
        // iterationCount = 65536
        // keyLength = 256
        KeySpec spec = new PBEKeySpec(password, salt, 65536, 256);
        SecretKey secret = new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES");
        return secret;

    }

    // hex representation
    public static String hex(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte b : bytes) {
            result.append(String.format("x", b));
        }
        return result.toString();
    }

    // print hex with block size split
    public static String hexWithBlockSize(byte[] bytes, int blockSize) {

        String hex = hex(bytes);

        // one hex = 2 chars
        blockSize = blockSize * 2;

        // better idea how to print this?
        List result = new ArrayList<>();
        int index = 0;
        while (index < hex.length()) {
            result.add(hex.substring(index, Math.min(index   blockSize, hex.length())));
            index  = blockSize;
        }

        return result.toString();

    }

}

Шифрование и дешифрование AES.

Наиболее популярным аутентифицированным шифром является AES-GCM. В этой демонстрации строка будет зашифрована с помощью режима счетчика Галуа (GCM) и 256-битного AES.

Входные данные AES-GCM:

  • Секретный ключ AES (256 бит)
  • IV – 96 бит (12 байт)
  • Длина метки аутентификации (в битах) – 128 бит (16 байт).

В Java мы используем AES/GCM для представления алгоритма АЕ-ГКМ. Для зашифрованного вывода мы добавляем 16 байт IV к тексту (закодированному текстам), потому что нам нужен тот же самый III для расшифровки.

Что такое широкая известность? IV может стать известным широкой публике.

В этой демонстрации обычный текст шифруется с помощью AES Hello GCM World, после чего снова выводится на печать.

package com.mkyong.crypto.encryptor;

import com.mkyong.crypto.utils.CryptoUtils;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * AES-GCM inputs - 12 bytes IV, need the same IV and secret keys for encryption and decryption.
 * 

Output = byte[] i i i c c c c c c c c. * Выходные данные состоят из iv, зашифрованного содержимого и метки авторизации.

* i = IV bytes * c = content bytes (encrypted content, auth tag) */ public class EncryptorAesGcm { private static final String ENCRYPT_ALGO = "AES/GCM/NoPadding"; private static final int TAG_LENGTH_BIT = 128; private static final int IV_LENGTH_BYTE = 12; private static final int AES_KEY_BIT = 256; private static final Charset UTF_8 = StandardCharsets.UTF_8; // AES-GCM needs GCMParameterSpec public static byte[] encrypt(byte[] pText, SecretKey secret, byte[] iv) throws Exception { Cipher cipher = Cipher.getInstance(ENCRYPT_ALGO); cipher.init(Cipher.ENCRYPT_MODE, secret, new GCMParameterSpec(TAG_LENGTH_BIT, iv)); byte[] encryptedText = cipher.doFinal(pText); return encryptedText; } // prefix IV length IV bytes to cipher text public static byte[] encryptWithPrefixIV(byte[] pText, SecretKey secret, byte[] iv) throws Exception { byte[] cipherText = encrypt(pText, secret, iv); byte[] cipherTextWithIv = ByteBuffer.allocate(iv.length cipherText.length) .put(iv) .put(cipherText) .array(); return cipherTextWithIv; } public static String decrypt(byte[] cText, SecretKey secret, byte[] iv) throws Exception { Cipher cipher = Cipher.getInstance(ENCRYPT_ALGO); cipher.init(Cipher.DECRYPT_MODE, secret, new GCMParameterSpec(TAG_LENGTH_BIT, iv)); byte[] plainText = cipher.doFinal(cText); return new String(plainText, UTF_8); } public static String decryptWithPrefixIV(byte[] cText, SecretKey secret) throws Exception { ByteBuffer bb = ByteBuffer.wrap(cText); byte[] iv = new byte[IV_LENGTH_BYTE]; bb.get(iv); //bb.get(iv, 0, iv.length); byte[] cipherText = new byte[bb.remaining()]; bb.get(cipherText); String plainText = decrypt(cipherText, secret, iv); return plainText; } public static void main(String[] args) throws Exception { String OUTPUT_FORMAT = "%-30s:%s"; String pText = "Hello World AES-GCM, Welcome to Cryptography!"; // encrypt and decrypt need the same key. // get AES 256 bits (32 bytes) key SecretKey secretKey = CryptoUtils.getAESKey(AES_KEY_BIT); // encrypt and decrypt need the same IV. // AES-GCM needs IV 96-bit (12 bytes) byte[] iv = CryptoUtils.getRandomNonce(IV_LENGTH_BYTE); byte[] encryptedText = EncryptorAesGcm.encryptWithPrefixIV(pText.getBytes(UTF_8), secretKey, iv); System.out.println("n------ AES GCM Encryption ------"); System.out.println(String.format(OUTPUT_FORMAT, "Input (plain text)", pText)); System.out.println(String.format(OUTPUT_FORMAT, "Key (hex)", CryptoUtils.hex(secretKey.getEncoded()))); System.out.println(String.format(OUTPUT_FORMAT, "IV (hex)", CryptoUtils.hex(iv))); System.out.println(String.format(OUTPUT_FORMAT, "Encrypted (hex) ", CryptoUtils.hex(encryptedText))); System.out.println(String.format(OUTPUT_FORMAT, "Encrypted (hex) (block = 16)", CryptoUtils.hexWithBlockSize(encryptedText, 16))); System.out.println("n------ AES GCM Decryption ------"); System.out.println(String.format(OUTPUT_FORMAT, "Input (hex)", CryptoUtils.hex(encryptedText))); System.out.println(String.format(OUTPUT_FORMAT, "Input (hex) (block = 16)", CryptoUtils.hexWithBlockSize(encryptedText, 16))); System.out.println(String.format(OUTPUT_FORMAT, "Key (hex)", CryptoUtils.hex(secretKey.getEncoded()))); String decryptedText = EncryptorAesGcm.decryptWithPrefixIV(encryptedText, secretKey); System.out.println(String.format(OUTPUT_FORMAT, "Decrypted (plain text)", decryptedText)); } }

Выход

:/>  Как включить мышку на клавиатуре ноутбука: подробная инструкция

Привет, Мир AES-GCM!

Здравствуй, мир AES-GCM! Вы попали в мир криптографии.

------ AES GCM Encryption ------
Input (plain text)            :Hello World AES-GCM, Welcome to Cryptography!
Key (hex)                     :ddc24663d104e1c2f81f11aef98156503dafdc435f81e3ac3d705015ebab095c
IV  (hex)                     :b05d6aedf023f73b9e1e2d11
Encrypted (hex)               :b05d6aedf023f73b9e1e2d11f6f5137d971aea8c5cdd5b045e0960eb4408e0ee4635cccc2dfeec2c13a89bd400f659be82dc2329e9c36e3b032f38bd42296a8495ac840b0625c097d9
Encrypted (hex) (block = 16)  :[b05d6aedf023f73b9e1e2d11f6f5137d, 971aea8c5cdd5b045e0960eb4408e0ee, 4635cccc2dfeec2c13a89bd400f659be, 82dc2329e9c36e3b032f38bd42296a84, 95ac840b0625c097d9]

------ AES GCM Decryption ------
Input (hex)                   :b05d6aedf023f73b9e1e2d11f6f5137d971aea8c5cdd5b045e0960eb4408e0ee4635cccc2dfeec2c13a89bd400f659be82dc2329e9c36e3b032f38bd42296a8495ac840b0625c097d9
Input (hex) (block = 16)      :[b05d6aedf023f73b9e1e2d11f6f5137d, 971aea8c5cdd5b045e0960eb4408e0ee, 4635cccc2dfeec2c13a89bd400f659be, 82dc2329e9c36e3b032f38bd42296a84, 95ac840b0625c097d9]
Key (hex)                     :ddc24663d104e1c2f81f11aef98156503dafdc435f81e3ac3d705015ebab095c
Decrypted (plain text)        :Hello World AES-GCM, Welcome to Cryptography!

Бойцы облачного фронта

1. Почти восемь лет назад существовал проект Hash Killer. Он помогает взламывать дайджесты MD5, SHA-160 и NNTLM. В настоящее время существует 43,7 миллиона хэшей. Для параллельного анализа можно одновременно загружать несколько хэшей.

Иногда встречаются пароли с кириллическими символами и символами алфавитов, отличных от английского или других языков. Кроме того, существует конкуренция за расшифровку паролей на основе их хэшей, и легко доступны инструменты, облегчающие этот процесс. программы, которые перечисляют все действия, предпринятые злоумышленниками.

HashKiller не дружит с кириллицей, но знает кириллические пароли
HashKiller не дру­жит с кирил­лицей, но зна­ет кирил­личес­кие пароли

2. Одновременно можно загрузить для анализа до десяти хэшей. “Crackstance” поддерживает хэши практически всех реальных. LM, NTLM 4.1.1 и MD5.2-4/6 D4-half: MySql 4.0 и 5.3% = RipeGA-160/224/384/412

«Крэк-станция» находит многие словарные пароли даже по хешам NTLM
«Крэк‑стан­ция» находит мно­гие сло­вар­ные пароли даже по хешам NTLM

База содержит все слова из англоязычной Википедии, а также большое количество популярных паролей, собранных из общих списков. Существует множество вариаций, включая литографию, изменение регистра и другие уловки.

«Крэк-станция» с трудом вскрывает случайные пароли длиной от пяти символов даже по LM-хешам
«Крэк‑стан­ция» с тру­дом вскры­вает слу­чай­ные пароли дли­ной от пяти сим­волов даже по LM-хешам

Замена на символы

Побочное замечание относительно символов Автор предложил заменить буквы в полученном вами пароле на символы, соответствующие вашему планшету.

Если бы пароль повторялся в цикле как часть метода, пунктуация была бы не такой ужасной. Пунктуация изменена автором на латиницу. Это, безусловно, плюс. Вторую таблицу можно расшифровать следующим образом, если мы точно знаем, где в первой таблице начинается слово “pas*worp” (под “x” и ниже).

Теперь хитрость в том, что на (4 8) = 12 позиции та же буква, что и на «4» (пароль-то по кругу идет — это обе буквы «s» в слове «pass(4)wordpass(12)word»), но на 12 месте пунктуация не использовалась!

В результате мы можем расшифровать 12 букв, чтобы определить четвертую букву.

Зная 4 зашифрованную букву и соответвующую ей пунктуацию — мы линейно получили смещение пунктуации. Из этого смещения тут же узнаем 8ую букву и как бонус — 16ую (которая та же). F AIL!.

Поскольку буква повторяется в 4 1=13 местах, даже если бы автор зашифровал 12-ю букву, а пароль состоял из 7 цифр, мы бы все равно ее услышали.

Если есть “голубь”, это не нанесет существенного вреда изображению. Больше всего пострадает общая картина, потому что большая часть “голубя” уже выяснена (мы знаем всю верхнюю линию и почти всю нижнюю линию).

Искать xor вычислять

Популярные алгоритмы хэширования настолько быстры, что все возможные комбинации хэш-пароль для длинной разрядной функции уже созданы. Более того, взлом облегчается тем, что хэш-функции с длиной хэша 128 бит и выше могут обнаружить ошибки в самом алгоритме или в конкретных реализациях.

Рональд Ривз создал алгоритм MD5, который приобрел известность в 1990-х годах. Он часто использовался для подключения к серверам бизнес-приложений и аутентификации пользователей на веб-сайтах. Однако он показал, что алгоритм был недостойным.

Поскольку дайджесты сообщений часто используются в криптографии, использование алгоритма MD5 приводит ко всем известным негативным последствиям. Такая атака, например, позволяет злоумышленникам выдавать доверенный корневой сертификат (CA) за свой поддельный, подделывая цифровой сертификат x.509, включая поддельный сертификат SSL.

Только в случае эффективно сложных паролей (состоящих из множества служебных символов) без серьезного перебора можно обойтись без разрушительной атаки методом перебора. Сегодня для взлома огромного количества длинных и словарных паролей требуется всего несколько секунд.

Можно ли усложнить

Даже если Вы усилите алгоритм тем, что будете использовать русские буквы и символы (которые смещаются независимо), даже если Вы добавите сдвиг таблицы не только по горизонтали, но и по вертикали, и даже отражения по горизонтали и вертикали, то получите: 36*36*36*36*36*2*2 = 240 млн таблиц… Выглядит страшно?

Учитывая, что он требует только простой буквенно-цифровой пароль с минимум пятью символами и всего 27 бит шифрования, его вряд ли можно считать “безопасным”.

128 бит, или 14000000000103030210000001 раз больше количества вариантов, считается надежным шифрованием. (Именно так?) Это то же самое, что буквенно-цифровой пароль из 25 букв.

Единственный реальный способ улучшить это – если:

Сначала пластина будет “скручена”, что усложнит ее повторение и предсказание (теперь вы должны двигаться вертикально, прежде чем двигать пальцем).

Растягивание строк и столбцов предотвратит совпадение латинско-русских символов. Отличайте все друг от друга, чтобы уменьшить повторяемость или предсказуемость (тело таблицы может содержать только полностью случайные числа). Я имею в виду абсолютно случайное число во всей ячейке: никаких сдвигов строк, 5) никакого повторения пароля сайта и 5) никаких “позиционных” замен!

Но эта табличка не выдержит серьезной атаки, как и все «таблички». Еще раз: использование карточек шифрования не является надежным методом для передачи данных.

Неповторимость — залог надежности

Уни­кальность хеша — одно из его свойств, опре-деляющих криптостойкость сис­темы шифрования. Дело в том, что число возможных паролей теоре­тическнo бесконеч­но и бесконечно; а вот числ хеш — он бесконечен.

Дайджесты любой хэш-функции могут быть полностью оригинальными только до определенной степени. Фантастика во всех отношениях! От алгоритма CRC32 сложно уйти, поскольку он предлагает широкий спектр вариаций. Существует множество дополнительных функций, использующих дайджесты длиной 128 или 160 бит, что значительно увеличивает общее количество хэшей до 2128 и 2060 соответственно.

Коллизии – это когда два хэша из разных источников (например, пароли) совпадают. Оно может быть случайным (происходит на большом количестве данных) или псевдослучайным, что используется для проведения атак. Эффект коллизий лежит в основе различных криптографических систем, в частности, утечки авторизации.

Все они счи­тают хеш от вветренного пароля или ключа, а затем передают его для сравнения.

Я передаю и сравниваю пароли только в дайджестах; я нигде их не храню. После хэширования абсолютно любых паролей одной и той же функцией на выходе всегда будет дайджест одинакового размера.

Определения типов хэшей при помощи скрипта hash-identifier для расшифровки паролей

Скрипт hash-Identifier для расшифровки паролей

Когда вы имеете дело с неизвестным хэшем, первый шаг – корректная идентификация типа.

Хэш-идентификатор для идентификации различных типов ЭП

Автор: Коди

Чувствительная информация, такая как счета или другие документы, обычно хранится в виде хэшей. Мы можем расшифровать хэши с помощью утилиты Hashcat, но только если нам известен алгоритм, использованный для их генерации. Вы можете быстро определить тип каждого хэша в сценарии, подобном этому shell-идентификатору, или “hashcat”, а затем указать соответствующий режим при работе с хэш-картами.

Он используется для определения алгоритмов при добавлении контрольной суммы к файлам в дополнение к взлому хэшей. Кроме того, скрипт позволяет распознать программу (например, указывается формат хэшированного файла (SL base или другой).

:/>  Включение, отключение и настройка жестов тачпада в Windows 10

Как расшифровать хэш и что он означает?

Как уже упоминалось ранее, хэши обычно используются для хранения паролей для компьютеров и баз данных. Пароли изменяются функцией хэширования в случайную комбинацию букв, цифр и символов, которую невозможно изменить.

Однако при использовании одной и той же функции два или более пароля будут иметь одинаковый хэш. Кроме того, с помощью этой функции можно получить хэши для списка паролей, которые затем можно использовать для поиска правильного пароля. Принцип работы многих инструментов взлома одинаков.

В любом случае, хэширование не дает вам возможности защитить свой пароль от расшифровки открытым текстом.

Если вы много работаете с хэшами, вы легко увидите разницу между различными и часто используемыми типами.

Как вы можете определить, какие хэши в этом списке какого типа?

8743b52063cd84097a65d1633f5c74f5

b89eaac7e61417341b710b727768294d0e6a277b

Хотя вы могли видеть и тот и другой хэш ранее, ответ на вопрос, какой хэш – MD5, а какой – SHA1, не столь очевиден. It’s possible for smaller outbreaks of syphilis to occur in relation to different Hashcat shim types. В случае с хэшами, приведенными выше, этот факт имеет чрезвычайно важное значение.

Чтобы взломать этот хэш с помощью Hashcat, мы должны установить опцию -m, чтобы работать в соответствующем режиме. Мы упомянем режим 0.

~$ sudo hashcat -m 0 -a 0 8743b52063cd84097a65d1633f5c74f5 example.dict --force


hashcat (v4.0.1) starting...


OpenCL Platform #1: The pocl project

====================================

* Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz, 1024/3639 MB allocatable, 2MCU


8743b52063cd84097a65d1633f5c74f5:hashcat

Мы смогли получить слово “хэшкет” в результате использования правильных настроек алгоритма и надежного словаря.

Какие хэши поддерживаются

На данный момент Hashcat в состоянии расшифровать большое количество хэшей. В репозитории на GitHub для утилиты hash-identifier список поддерживаемых хэшей очень внушителен:

ADLER-32
CRC-16
CRC-16-CCITT
CRC-32
CRC-32B
DES (Unix)
Domain Cached Credentials
FCS-16
GHash-32-3
GHash-32-5
GOST R 34.11-94
Haval-128
Haval-160
Haval-192 110080
Haval-224 114080
Haval-256
Lineage II C4
MD2
MD4
MD5
MD5 ($pass.$salt) - Joomla
MD5 (APR)
MD5 (Half)
MD5 (HMAC(WordPress))
MD5 (Middle)
MD5 (phpBB3)
MD5 (Unix)
MD5 (WordPress)
MySQL
MySQL 160bit - SHA-1(SHA-1($pass))
MySQL5 - SHA-1(SHA-1($pass))
NTLM
RAdmin v2.x
RipeMD-128
RipeMD-160
RipeMD-256
RipeMD-320
SAM - (LM_hash:NT_hash)
SHA-1
SHA-1 (Django)
SHA-1 (MaNGOS)
SHA-224
SHA-256
SHA-256 (Django)
SHA-384
SHA-384 (Django)
SHA-512
SNEFRU-128
SNEFRU-256
Tiger-128
Tiger-160
Tiger-192
XOR-32
Whirlpool

и другие…

Что вам нужно

Для начала нужно установить Python3
на вашем компьютере (есть версии для разных платформ). Кроме того, вам понадобится утилита Hashcat, которую можно загрузить, используя команду aptinstallhashcat, после обновления системы при помощи команд aptupdate и aptupgrade.

Вы можете использовать команду echo -nPLAINTEXTE sum для создания собственных хэшей для тестового взлома. Я выполнил команду SHA1!

~$ echo -n nullbyte | sha1sum 32c0ced56f1fe08583bdb079d85a35a81995018c  -

Шаг 1. Загрузка и установка Hash-Identifier

Сценарий Python очень просто установить. Затем введите в терминале следующую команду:

~$ git clone https://github.com/blackploit/hash-identifier.git
 
Cloning into 'hash-identifier'...
remote: Enumerating objects: 21, done.
remote: Total 21 (delta 0), reused 0 (delta 0), pack-reused 21
Unpacking objects: 100% (21/21), done.

Затем проверьте содержимое директории hash-identifier:

~$ cd hash-identifier
~/hash-identifier$ ls
 
hash-id.py  README.md  screenshots

Следующая команда может быть использована для запуска файла hash-id.py, который вы должны были найти:

~/hash-identifier$ python3 hash-id.py
 
   #########################################################################
   #     __  __                     __           ______    _____           #
   #    / /                    /          /__  _  /  _ `         #
   #      _      __      ____   ___     /_/ /    /         #
   #        _    /'__`   / ,__    _ `                      #
   #          / _ _/__, `           _ __   _       #
   #        _ _ ___ _/____/   _ _     /_____  ____/      #
   #        /_//_//__//_//___/    /_//_/     /_____/  /___/  v1.2 #
   #                                                             By Zion3R #
   #                                                    www.Blackploit.com #
   #                                                   Root@Blackploit.com #
   #########################################################################
--------------------------------------------------
 HASH:

Шаг 2: Определение неизвестных паролей

Давайте выберем пять неопознанных хэшей для проведения тестовой идентификации.

Hash 1: 7196759210defdc0
Hash 2: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d (256)
Hash 3: 32c0ced56f1fe08583bdb079d85a35a81995018c (1)
Hash 4: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 (512)
Hash 5: 5f804b61f8dcf70044ad8c1385e946a8 (md5)

Когда мы вводим первую строку в командную строку, мы быстро узнаем, что, скорее всего, имеем дело с хэшем MySel.

HASH: 7196759210defdc0
 
Possible Hashs:
[ ] MySQL
[ ] MD5(Middle)
 
Least Possible Hashs:
[ ] MD5(Half)

Хеш SHA256 на втором изображении ниже идентифицируется. Второй альтернативой является Haval256.

HASH: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d
 
Possible Hashs:
[ ] SHA-256
[ ] Haval-256
 
Least Possible Hashs:
[ ] GOST R 34.11-94
[ ] RipeMD-256
[ ] SNEFRU-256
[ ] SHA-256(HMAC)
[ ] Haval-256(HMAC)
[ ] RipeMD-256(HMAC)
[ ] SNEFRU-256(HMAC)
[ ] SHA-256(md5($pass))
[ ] SHA-256(sha1($pass))

Третий хэш идентифицируется как SHA1:

HASH: 32c0ced56f1fe08583bdb079d85a35a81995018c
 
Possible Hashs:
[ ] SHA-1
[ ] MySQL5 - SHA-1(SHA-1($pass))
 
Least Possible Hashs:
[ ] Tiger-160
[ ] Haval-160
[ ] RipeMD-160
[ ] SHA-1(HMAC)
[ ] Tiger-160(HMAC)
[ ] RipeMD-160(HMAC)
[ ] Haval-160(HMAC)
[ ] SHA-1(MaNGOS)
[ ] SHA-1(MaNGOS2)
[ ] sha1($pass.$salt)
[ ] sha1($salt.$pass)
[ ] sha1($salt.md5($pass))
[ ] sha1($salt.md5($pass).$salt)
[ ] sha1($salt.sha1($pass))
[ ] sha1($salt.sha1($salt.sha1($pass)))
[ ] sha1($username.$pass)
[ ] sha1($username.$pass.$salt)
[ ] sha1(md5($pass))
[ ] sha1(md5($pass).$salt)
[ ] sha1(md5(sha1($pass)))
[ ] sha1(sha1($pass))
[ ] sha1(sha1($pass).$salt)
[ ] sha1(sha1($pass).substr($pass,0,3))
[ ] sha1(sha1($salt.$pass))
[ ] sha1(sha1(sha1($pass)))
[ ] sha1(strtolower($username).$pass)

Четвертый хэш опознается как SHA512

HASH: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10
 
Possible Hashs:
[ ] SHA-512
[ ] Whirlpool
 
Least Possible Hashs:
[ ] SHA-512(HMAC)
[ ] Whirlpool(HMAC)

В пятом хэше опознается MD5:

HASH: 5f804b61f8dcf70044ad8c1385e946a8
 
Possible Hashs:
[ ] MD5
[ ] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))
 
Least Possible Hashs:
[ ] RAdmin v2.x
[ ] NTLM
[ ] MD4
[ ] MD2
[ ] MD5(HMAC)
[ ] MD4(HMAC)
[ ] MD2(HMAC)
[ ] MD5(HMAC(WordPress))
[ ] Haval-128
[ ] Haval-128(HMAC)
[ ] RipeMD-128
[ ] RipeMD-128(HMAC)
[ ] SNEFRU-128
[ ] SNEFRU-128(HMAC)
[ ] Tiger-128
[ ] Tiger-128(HMAC)
[ ] md5($pass.$salt)
[ ] md5($salt.$pass)
[ ] md5($salt.$pass.$salt)
[ ] md5($salt.$pass.$username)
[ ] md5($salt.md5($pass))
[ ] md5($salt.md5($pass))
[ ] md5($salt.md5($pass.$salt))
[ ] md5($salt.md5($pass.$salt))
[ ] md5($salt.md5($salt.$pass))
[ ] md5($salt.md5(md5($pass).$salt))
[ ] md5($username.0.$pass)
[ ] md5($username.LF.$pass)
[ ] md5($username.md5($pass).$salt)
[ ] md5(md5($pass))
[ ] md5(md5($pass).$salt)
[ ] md5(md5($pass).md5($salt))
[ ] md5(md5($salt).$pass)
[ ] md5(md5($salt).md5($pass))
[ ] md5(md5($username.$pass).$salt)
[ ] md5(md5(md5($pass)))
[ ] md5(md5(md5(md5($pass))))
[ ] md5(md5(md5(md5(md5($pass)))))
[ ] md5(sha1($pass))
[ ] md5(sha1(md5($pass)))
[ ] md5(sha1(md5(sha1($pass))))
[ ] md5(strtoupper(md5($pass)))

Все прошло успешно. Поиск в Hashcat режима, соответствующего обнаруженному типу, – это первый шаг.

Шаг 3. Во время набора номера в режиме отдыха Hashcat

При поиске нужного режима мы можем взглянуть на огромный список хэшей, поддерживаемых в Hashcat. Сокращенный вариант с наиболее популярными типами приведен ниже:

Hash-Mode   Hash-Name                   Example
0           MD5                         8743b52063cd84097a65d1633f5c74f5
10          md5($pass.$salt)            01dfae6e5d4d90d9892622325959afbe:7050461
20          md5($salt.$pass)            f0fda58630310a6dd91a7d8f0a4ceda2:4225637426
30          md5(utf16le($pass).$salt)   b31d032cfdcf47a399990a71e43c5d2a:144816
40          md5($salt.utf16le($pass))   d63d0e21fdc05f618d55ef306c54af82:13288442151473
50          HMAC-MD5 (key = $pass)      fc741db0a2968c39d9c2a5cc75b05370:1234
60          HMAC-MD5 (key = $salt)      bfd280436f45fa38eaacac3b00518f29:1234
100         SHA1                        b89eaac7e61417341b710b727768294d0e6a277b
110         sha1($pass.$salt)           2fc5a684737ce1bf7b3b239df432416e0dd07357:2022
120         sha1($salt.$pass)           cac35ec206d868b7d7cb0b55f31d9425b075082b:5363620024
130         sha1(utf16le($pass).$salt)  c57f6ac1b71f45a07dbd91a59fa47c23abcd87c2:631225
140         sha1($salt.utf16le($pass))  5db61e4cd8776c7969cfd62456da639a4c87683a:8763434884872
150         HMAC-SHA1 (key = $pass)     c898896f3f70f61bc3fb19bef222aa860e5ea717:1234
160         HMAC-SHA1 (key = $salt)     d89c92b4400b15c39e462a8caa939ab40c3aeeea:1234
200         MySQL323                    1EAFFED54F552AA5
300         MySQL4.1/MySQL5             fcf7c1b8749cf99d88e5f34271d636178fb5d130

Эти два примера совпадают с первым хэшем (7196759210defdc0), который мы рассмотрели ранее. Режим 200 “MySL323” на первый взгляд кажется самым надежным. Мы можем подтвердить эту гипотезу, изучив хэш в хэш-идентификаторе.

HASH: 1EAFFED54F552AA5
 
Possible Hashs:
[ ] MySQL
[ ] MD5(Middle)
 
Least Possible Hashs:
[ ] MD5(Half)
 

Точное совпадение с правильным хэшем:

HASH: 7196759210defdc0
 
Possible Hashs:
[ ] MySQL
[ ] MD5(Middle)
 
Least Possible Hashs:
[ ] MD5(Half)
 

Когда мы пробуем другой тип (300), результаты оказываются несопоставимыми.

HASH: fcf7c1b8749cf99d88e5f34271d636178fb5d130
 
Possible Hashs:
[ ] SHA-1
[ ] MySQL5 - SHA-1(SHA-1($pass))
 
Least Possible Hashs:
[ ] Tiger-160
[ ] Haval-160
[ ] RipeMD-160
[ ] SHA-1(HMAC)
[ ] Tiger-160(HMAC)
[ ] RipeMD-160(HMAC)
[ ] Haval-160(HMAC)
[ ] SHA-1(MaNGOS)
[ ] SHA-1(MaNGOS2)
[ ] sha1($pass.$salt)
[ ] sha1($salt.$pass)
[ ] sha1($salt.md5($pass))
[ ] sha1($salt.md5($pass).$salt)
[ ] sha1($salt.sha1($pass))
[ ] sha1($salt.sha1($salt.sha1($pass)))
[ ] sha1($username.$pass)
[ ] sha1($username.$pass.$salt)
[ ] sha1(md5($pass))
[ ] sha1(md5($pass).$salt)
[ ] sha1(md5(sha1($pass)))
[ ] sha1(sha1($pass))
[ ] sha1(sha1($pass).$salt)
[ ] sha1(sha1($pass).substr($pass,0,3))
[ ] sha1(sha1($salt.$pass))
[ ] sha1(sha1(sha1($pass)))
[ ] sha1(strtolower($username).$pass)

Таким образом, мы еще раз подтверждаем, что режим 200 является точным.

Шаг 4. Hashcat расшифровывает хэш

После определения типа хэша и подборе нужного режима можно приступать к расшифровке пароля. Чтобы создать словарь с паролями, нужно составить словарь для атаки на хэш. В сети есть множество примеров, например Rock’ou. Мы будем создавать тестовый словарь example dict с несколькими паролями для каждого варианта.

Нажмите Ctrl C и откройте файл в текстовом редакторе nano, если вы все еще находитесь в скрипте hash-идентификатора.

~/hash-identifier$ nano example.dict

After inserting several recommended keyphrases, one of which is “hashcat,” we press Ctrl-X to exit the editor and then press Y to apply changes to the phrase. Теперь мы можем использовать этот файл в качестве словаря вместе с ранее выбранным режимом для взлома хэша. Базовая команда выглядит примерно так:.

sudo hashcat -m MODE_NUMBER -a 0 HASH_VALUE example.dict

Вместо значения HASH_VALUE указываем хэш 7196759210defdc0, вместо режима 200 – выбранный ранее режим 220. Если у вас старая система, то нужно указать параметр force.

~/hash-identifier$ sudo hashcat -m 200 -a 0 7196759210defdc0 example.dict --force
 
hashcat (v5.1.0) starting...
 
OpenCL Platform #1: The pocl project
====================================
* Device #1: pthread-Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz, 1024/3639 MB allocatable, 2MCU
 
/usr/share/hashcat/OpenCL/m00200_a0-optimized.cl: Pure OpenCL kernel not found, falling back to optimized OpenCL kernel
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
 
Applicable optimizers:
* Optimized-Kernel
* Zero-Byte
* Not-Iterated
* Single-Hash
* Single-Salt
 
Password length minimum: 0
Password length maximum: 31
 
Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.
Watchdog: Temperature retain trigger disabled.
 
* Device #1: build_opts '-I /usr/share/hashcat/OpenCL -D VENDOR_ID=64 -D CUDA_ARCH=0 -D AMD_ROCM=0 -D VECT_SIZE=4 -D DEVICE_TYPE=2 -D DGST_R0=0 -D DGST_R1=1 -D DGST_R2=2 -D DGST_R3=3 -D DGST_ELEM=4 -D KERN_TYPE=200 -D _unroll'
* Device #1: Kernel m00200_a0-optimized.44d10a8c.kernel not found in cache! Building may take a while...
Dictionary cache hit:
* Filename..: example.dict
* Passwords.: 17
* Bytes.....: 76
* Keyspace..: 17
 
- Device #1: autotuned kernel-accel to 1024
- Device #1: autotuned kernel-loops to 1
[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => The wordlist or mask that you are using is too small.
This means that hashcat cannot use the full parallel power of your device(s).
Unless you supply more work, your cracking speed will drop.
For tips on supplying more work, see: https://hashcat.net/faq/morework
 
Approaching final keyspace - workload adjusted.
 
7196759210defdc0:hashcat
 
Session..........: hashcat
Status...........: Cracked
Hash.Type........: MySQL323
Hash.Target......: 7196759210defdc0
Time.Started.....: Mon Dec  9 17:00:25 2022 (0 secs)
Time.Estimated...: Mon Dec  9 17:00:25 2022 (0 secs)
Guess.Base.......: File (example.dict)
Guess.Queue......: 1/1 (100.00%)
Speed.Dev.#1.....:        0 H/s (0.03ms)
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 17/17 (100.00%)
Rejected.........: 0/17 (0.00%)
Restore.Point....: 0/17 (0.00%)
Candidates.#1....: wow -> again
HWMon.Dev.#1.....: N/A
 
Started: Mon Dec  9 17:00:17 2022
Stopped: Mon Dec  9 17:00:27 2022

В результате мы получили 7196759210defdc0:hashcat и смогли
расшифровать хэш посредством сравнения с элементами словаря из файла example.dict.

:/>  Как отключить в windows 10 ненужные службы

Заключение

Правильное определение типа хэша – это первый шаг к его пониманию. Хотя скрипт hash-identifier далек от совершенства, он позволяет четко определить наиболее типичные хэши и отделить их от других. Даже если вы не уверены, с каким типом имеете дело, вы все равно сможете определить его, сравнив результаты Hashcat с примерами.

Желаю вам весело провести время, учась распознавать неизвестные хэши.

Псевдореверс

Если хэша нет, то теоретически невозможно получить пароль – даже если предварительно подмешать к нему соль. Если вы изучите полученный дайджест, ни объемные данные, ни их тип не будут вам понятны.

Однако подобную проблему можно решить, создав пароль с использованием того же хэша. Задача упрощается благодаря эффекту коллизии, поскольку даже если вы не знаете слова, вы все равно найдете другой пароль и получите нужную цифру.

Для этого требуется всего 2128 пар кодов хэш-типа, или на порядок больше. Однако только если учесть ограниченные возможности машины, все эти двойки действительно ужасают.

Хорошей новостью является то, что современные методы хэширования не зависят от скорости обработки данных на компьютере злоумышленника для быстрого подбора пароля. До нас уже многое было сделано.

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

Во время простоя администраторы заполняли свои серверы расчетами в электронных таблицах, а кто-то предлагал продать им настоящий кластер Amazon EC2.

Сложность и параметры

Всего существует такая методика

36 таблиц

Что не менее сложно, чем пароль, состоящий из одной буквы или одной цифры. Что отличает одну таблицу от другой?

Один параметр

: количество столбцов, равное диапазону “a-z1-9”, смещенное влево на [0-35]

В таблице 1 z = (i j-1)%36, а в таблице 2 z = (iij 9)%36. Несмотря на то, что первая строка первой таблицы начинается с буквы S (“с”), с точки зрения математики разница составляет всего одну константу: “a”=10 или “b “+1.

первая:
a   b   -1 = a  (0   1   -1 = 0)
a   c   -1 = b  (0   2   -1 = 1)
b   a   -1 = a  (1   0   -1 = 0)

вторая:
a   j   9 = s  (0   9   9 = 18)
a   k   9 = t  (0   10   9 = 19)
b   i   9 = s  (1   8   9 = 18)

 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17
 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
 s  t  u  v  w  x  y  z  0  1  2  3  4  5  6  7  8  9

Таким образом, у нас есть 36 уникальных паролей, если мы знаем и пароль, и имя ресурса.

Последняя иллюстрация из оригинального текста приведена ниже и вместе с ней:

Кстати, вот сразу и минус виден — пользоваться табличками людям сложно, ошибки — неизбежны. Это зашифрованный автором той статьи пароль. В нем ошибка — «a-a» на второй позиции — это «9» по первой табличке, а не «b».

Правильно расшифруйте комбинированный пароль. “Искаженная” константа сдвига таблицы 5 j4mmqil7j 4 k5nnrJm8k 3 l6ooskn9l 2 m 7pptloam 1 n 8rrvNXco-1 passwordp-2, bbtsxptsee-3 rcuuycfr-4 sdw0sVhT1 и содержит только пароли от различных сайтов-клонеров на русском языке, вместе с их именами или

Фактически, это программа. НО пароль повторного использования пароля пишется после “p”!

Для одной переменной (offset) нам достаточно одной буквы из пароля и той же буквы из названия сайта.

Какие буквы являются гласными в зашифрованном пароле?

Однако если мы не знаем названия сайта, но знаем, где находится или присутствует в зашифрованном пароле крошечная буква (A), то у нас есть 36 бумаг, умноженных на шесть гласных, что равно ae, i, o.u.y216! ). Не много, но на практике это будет единица.

Большие буквы усложняют ситуацию, но ничего не меняют.

Добавление усложняет задачу, но не в вышеописанном сценарии. Зная зашифрованные пароли и имена ресурсов, оказывается, что, расшифровав короткий псевдоним, мы можем легко восстановить, поскольку имя ресурса длиннее пароля.

В худшем случае злоумышленнику придется ввести 36 различных паролей, чтобы получить доступ к другому сайту.

На самом деле, только один пароль из 36 будет полезен (!). (не дожидаясь перебора), который вы запомнили. Точный универсальный пароль будет известен.

Универсальный подход

Хотя SHA-1 и MD5 являются наиболее широко используемыми хэш-функциями, другие алгоритмы можно использовать точно так же. Например, по умолчанию в реестре SAM хранятся два хэша дайджеста (отсутствующий тип алгоритма DES).

Хотя оба вида хэшей со временем будут заменены более надежными вариантами авторизации, эта система все еще будет широко использоваться. Список локальных учетных записей или сохраненных для них инстанций HESH может быть получен злоумышленником путем копирования файла SAM и расшифровки его с помощью легкого ключа из файла STEM.

Да­лее взломщик может найти последовательности символов, которые соотвс. Он получит полный дос­туп к ОС и останется в ней меньше следов, чем при гру­бом взломе. Напоминаю, что из-за эффекта кол­лизии подходящий пароль не обязательно будет таким же (как у реального) владельца компьюте­ра. Для Windows разница между ними отсутствует до конца их жизни — для нее это просто смешение паролей и разниц межу них нет никогдно! «Cause to you I’m just a number and an clever screen name».

Подобный сбор существует и в других областях авторизации. Например, при использовании WPA/WAP2 и других протоколов для создания защищенного доступа к Wi-Fi. Чтобы изменить начальные данные для рукопожатия, необходимо использовать неподключенное устройство с прямой линией связи.

Вместо того чтобы передавать пароль в открытом виде во время “рукопожатия”, он передается хэш-функции. Используя модифицированный драйвер вместо Wi-Fi приемника в режиме монитора, можно переключить нужное количество пакетов.

Более того, в ряде слу­чаев мож­но не ждать момен­та сле­дующе­го под­клю­чения, а ини­циали­зиро­вать эту про­цеду­ру при­нуди­тель­но, отпра­вив широко­веща­тель­ный зап­рос deauth всем под­клю­чен­ным кли­ентам. Уже в сле­дующую секун­ду они попыта­ются вос­ста­новить связь и нач­нут серию «рукопо­жатий».

Вы можете обнаружить пароль и сам пароль точно таким же образом, сохранив хэш-файл или файл с хэш-именем. Анализ файла с записанным в нем кендшейком, а также чистым хэшем позволяет провести множество онлайн исследований новой серы.

Оставьте комментарий

Adblock
detector