18-04-2025

PicoCTF 'hashcrack'

Задание сложности easy на сайте picoctf.org учит тому, что такое хэши и как их использовать, давайте взглянем на это задание поглубже

task

A company stored a secret message on a server which got breached due to the admin using weakly hashed passwords. Can you gain access to the secret stored within the server?

Access the server using nc verbal-sleep.picoctf.net 57192

Задание более чем понятно, начнем

Вводим в терминал:

nc verbal-sleep.picoctf.net 57192

И получаем первое сообщение:

Welcome!! Looking For the Secret?

We have identified a hash: 482c811da5d5b4bc6d497ffa98491e38

Enter the password for identified hash:

Весь смысл этого задания: узнать, какой тип хэша перед нами находится

Совсем коротко про хэши и их длины:

AlgorithmLength (Hex)Example
MD532 chars5f4dcc3b5aa765d61d8327deb882cf99
SHA-140 charsb7a875fc1ea228b9061041b7cec4bd3c52ab3ce3
SHA-25664 charscd0894152aa5eec36ec79eb2bcb90ca40f056804530f40732b4957a496b23dc8

Глядя на наш хэш: 482c811da5d5b4bc6d497ffa98491e38, если посчитать с помощью Питона

>>> len("482c811da5d5b4bc6d497ffa98491e38")
32

то получится как раз 32 символа!

Далее, ctf'ы на то и ctf'ы, что в описании, как правило, спрятана подсказка

Посмотрим еще разочек на условие и увидим фразу

admin using weakly hashed passwords

Есть такое мнение, что с помощью легендарного листа rockyou.txt можно узнать, какой же пароль всё-таки использовался, остальное дело техники и питонячего кода

Нам нужно пройтись по всему файлу с самыми популярными паролями, перевести их в Хэш и проверить, совпадает ли этот Хэш с нашим Хэшем

hash

Однако, есть одна постоянная в музыкальном бизнесе... Хит это хит. А это, друг мой, далеко не хит © Хэш Рабкин, "Сопрано"

Из всего выше сказанного делаем скрипт

import hashlib

text = "482c811da5d5b4bc6d497ffa98491e38"

with open('/home/svetsec/ctf/rockyou.txt', 'r', encoding='utf-8', errors='ignore') as f:
    for password in f:
        password = password.rstrip()
        hashed = hashlib.md5(password.encode('utf-8')).hexdigest()
        if hashed == text:
            print('WE GOT A HIT')
            print(password)
            break

К сожалению, пришлось поиграться с кодировками, потому что питон постоянно выкидывал ошибку насчет каких-то символов, но я сказал ему игнорировать это errors=false

WE GOT A HIT
password123

Вводим пароль и...

Correct! You've cracked the MD5 hash with no secret found! Flag is yet to be revealed!! Crack this hash: b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3

Ну ладно, смотрим внимательно на хэш и понимаем, что в нём 40 символов, а это значит... Это значит, что можно его поломать таким же образом, только заменить md5 на sha1

import hashlib

text = "b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3"

with open('/home/svetsec/ctf/rockyou.txt', 'r', encoding='utf-8', errors='ignore') as f:
    for password in f:
        password = password.rstrip()
        hashed = hashlib.sha1(password.encode('utf-8')).hexdigest()
        if hashed == text:
            print('WE GOT A HIT')
            print(password)
            break

Получаем...

WE GOT A HIT
letmein

И НАКОНЕЦ

Correct! You've cracked the SHA-1 hash with no secret found! Almost there!! Crack this hash: 916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745

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

Ладно, вроде похоже на SHA256, попробуем все то же самое

import hashlib

text = "916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745"

with open('/home/svetsec/ctf/rockyou.txt', 'r', encoding='utf-8', errors='ignore') as f:
    for password in f:
        password = password.rstrip()
        hashed = hashlib.sha1(password.encode('utf-8')).hexdigest()
        if hashed == text:
            print('WE GOT A HIT')
            print(password)
            break

Получаем 916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745

WE GOT A HIT
qwerty098

Вводим...

Correct! You've cracked the SHA-256 hash with a secret found. The flag is: picoCTF{...}

Да ну) Ну наконец-то)

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

Теперь все читатели знают про такую табличку и такой интересный факт!

AlgorithmLength (Hex)Example
MD532 chars5f4dcc3b5aa765d61d8327deb882cf99
SHA-140 charsb7a875fc1ea228b9061041b7cec4bd3c52ab3ce3
SHA-25664 charscd0894152aa5eec36ec79eb2bcb90ca40f056804530f40732b4957a496b23dc8

Last edited on 18-04-2025

by Sviatoslav Murzin