18-04-2025
PicoCTF 'hashcrack'
Задание сложности easy
на сайте picoctf.org учит тому, что такое хэши и как их использовать, давайте взглянем на это задание поглубже
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:
Весь смысл этого задания: узнать, какой тип хэша перед нами находится
Совсем коротко про хэши и их длины:
Algorithm | Length (Hex) | Example |
---|---|---|
MD5 | 32 chars | 5f4dcc3b5aa765d61d8327deb882cf99 |
SHA-1 | 40 chars | b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3 |
SHA-256 | 64 chars | cd0894152aa5eec36ec79eb2bcb90ca40f056804530f40732b4957a496b23dc8 |
Глядя на наш хэш: 482c811da5d5b4bc6d497ffa98491e38, если посчитать с помощью Питона
>>> len("482c811da5d5b4bc6d497ffa98491e38")
32
то получится как раз 32 символа!
Далее, ctf'ы на то и ctf'ы, что в описании, как правило, спрятана подсказка
Посмотрим еще разочек на условие и увидим фразу
admin using weakly hashed passwords
Есть такое мнение, что с помощью легендарного листа rockyou.txt
можно узнать, какой же пароль всё-таки использовался, остальное дело техники и питонячего кода
Нам нужно пройтись по всему файлу с самыми популярными паролями, перевести их в Хэш и проверить, совпадает ли этот Хэш с нашим Хэшем
Однако, есть одна постоянная в музыкальном бизнесе... Хит это хит. А это, друг мой, далеко не хит © Хэш Рабкин, "Сопрано"
Из всего выше сказанного делаем скрипт
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{...}
Да ну) Ну наконец-то)
В общем говоря, нашли три хэша, прошлись по списочку, раскодировали и все хорошо и все молодцы.
Теперь все читатели знают про такую табличку и такой интересный факт!
Algorithm | Length (Hex) | Example |
---|---|---|
MD5 | 32 chars | 5f4dcc3b5aa765d61d8327deb882cf99 |
SHA-1 | 40 chars | b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3 |
SHA-256 | 64 chars | cd0894152aa5eec36ec79eb2bcb90ca40f056804530f40732b4957a496b23dc8 |
Last edited on 18-04-2025