Данная статья содержит решений заданий Encoding ASCII и Encoding UU направленные на кодировки, Hash Message Digest 5 и Hash SHA-2 — на нахождение прообраза хеша, Shift cipher — шифр сдвига, и Pixel Madness — на составление картинки.
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Encoding — ASCII
Начнем с самого первого задания — Encoding-ASCII.
Переходим к самому заданию. Видим последовательность 16-ых символов. Самое первое предположение — это обычный hex (все символы представлены в 16-м виде).
s = "4C6520666C6167206465206365206368616C6C656E6765206573743A203261633337363438316165353436636436383964356239313237356433323465"
s.decode("hex")
Получаем ответ и идем далее.
Encoding — UU
Переходим к самому заданию. Даже не смотря на подсказку в названии задания, отличить файлы в UUE (кодировка для передачи файлов, содержащих не текстовые данные) формате легко — они начинаются со строки:
Begin_права-на-файл_название-файла
s = '''begin 644 root-me_challenge_uudeview
B5F5R>2!S:6UP;&4@.RD*4$%34R`](%5,5%)!4TE-4$Q%"@``
`
end'''
f = open('./uu.enc', 'w')
f.write(s)
f.close()
import uu
uu.decode('uu.enc', 'uu.dec')
ans = open('uu.dec', 'r').read()
Сдаем флаг.
Hash — Message Digest 5
Нас просят найти прообраз для хеша md5. Это можно легко сделать с помощью этого сайта (https://md5decrypt.net/). Но мы, в целях обучения конечно, используем hashcat. Для этого используем следующие параметры и коды:
- -a 0 — перебор по словарю;
- -m 0 — тип хеша MD5;
- File.hash — файл с хешем;
- rockyou.txt — наш словарь;
- --force — игнорировать ошибки.
Переходим к следующему заданию.
Hash — SHA-2
В качестве ответа нужно дать SHA1 хеш от прообраза этого хэша. Дело в том, что в данной лишний символ.
Удалим его. Для того, чтоюы определить алгоритм хеширования используем программу hashid.
Из представленных алгоритмов наиболее вероятен SHA-256. Как решать такое задание с помощью hashcat показал, теперь сделаем его с помощью этого
сайта.
Осталось взять SHA-1 от этой строки.
from hashlib import *
sha1(‘4dM1n’).hexdigest()
Shift cipher
Ну с алгоритмом шифровани нам помогают. Тот же самый Шифр Цезаря, только сдвиг происходит не в диапозоне от нуля до длины алфавита, а по всем возможным 256 значениям одного байта. Напишем программу, которая сначала сдвинет каждый символ на 1, потом на 2 и т.д. до 255.
s = open(‘ch7.bin’, ‘r’).read()
for x in range(255):
“”.join( chr((ord(y) + x)%256 ) ) for y in s)
Среди строк найдем ту, которая содержит ответ.
Pixel Madness
Нам дают несколько выражений, а в конце говорят, что 0 — это белый цвет, а 1 — черный. Скорее всего в итоге должна получиться картинка. Предполагаю, что в выражении нужно не умножать, а повторять необходимое количество раз определенный символ.
Быстро можно выполнить выражение с помощью функции eval, но сначала нужно изменить формат 0x1 на ‘0’*1.
s = ''''0x3+1x1+0x1+0x1+0x7+1x2+0x15+1x1+0x8+1x1+0x8+1x1+0x1+1x1+0x1+1x1+0x1+1x1+0x1+1x1+0x3+1x1+0x1+1x1+0x3+1x1+0x1+1x4+0x2+1x1+0x25
'0x2+1x1+0x4+1x1+0x4+1x3+0x1+1x2+0x2+1x8+0x11+1x4+0x1+1x3+0x6+1x2+0x4+1x1+0x4+1x2+0x7+1x4+0x4+1x2+0x7+1x2+0x3+1x2+0x3
'0x3+1x1+0x2+1x1+0x2+1x1+0x11+1x2+0x2+1x3+0x7+1x1+0x4+1x2+0x2+1x2+0x7+1x1+0x6+1x1+0x2+1x1+0x4+1x3+0x1+1x1+0x4+1x1+0x2+1x1+0x2+1x1+0x3+1x1+0x2+1x3+0x2+1x2+0x3
'1x1+0x2+1x1+0x4+1x1+0x2+1x1+0x1+1x1+0x2+1x1+0x2+1x1+0x1+1x2+0x2+1x2+0x1+1x2+0x3+1x1+0x3+1x1+0x2+1x2+0x1+1x3+0x3+1x1+0x2+1x1+0x4+1x2+0x1+1x1+0x4+1x1+0x3+1x2+0x12+1x2+0x1+1x1+0x3+1x7+0x3
'0x3+1x1+0x7+1x1+0x1+1x1+0x4+1x1+0x2+1x2+0x2+1x2+0x4+1x1+0x2+1x1+0x1+1x2+0x1+1x8+0x1+1x1+0x4+1x1+0x5+1x1+0x3+1x2+0x2+1x1+0x1+1x2+0x2+1x1+0x3+1x2+0x9+1x1+0x1+1x2+0x2+1x3+0x2+1x1
'0x7+1x1+0x4+1x1+0x4+1x1+0x1+1x1+0x1+1x7+0x3+1x1+0x1+1x2+0x3+1x1+0x1+1x6+0x1+1x1+0x3+1x1+0x2+1x1+0x14+1x2+0x8+1x1+0x10+1x2+0x3+1x2+0x1+1x1+0x1
'0x6+1x5+0x4+1x1+0x7+1x1+0x2+1x1+0x3+1x2+0x4+1x1+0x8+1x1+0x3+1x2+0x1+1x2+0x3+1x1+0x8+1x1+0x2+1x2+0x1+1x1+0x3+1x7+0x5+1x2+0x2+1x1+0x2+1x2+0x3
'0x1+1x1+0x2+1x1+0x1+1x2+0x5+1x1+0x6+1x2+0x3+1x1+0x2+1x1+0x1+1x2+0x20+1x8+0x1+1x1+0x1+1x1+0x4+1x2+0x3+1x1+0x2+1x2+0x3+1x2+0x7+1x2+0x3+1x2+0x4
'0x2+1x1+0x3+1x5+0x5+1x2+0x7+1x1+0x4+1x2+0x2+1x1+0x2+1x2+0x1+1x1+0x3+1x1+0x6+1x2+0x2+1x2+0x3+1x2+0x2+1x3+0x1+1x1+0x6+1x3+0x3+1x5+0x3+1x1+0x4+1x1+0x5
'0x4+1x2+0x3+1x2+0x3+1x1+0x5+1x2+0x2+1x1+0x1+1x1+0x1+1x1+0x1+1x2+0x9+1x1+0x3+1x1+0x2+1x1+0x1+1x1+0x2+1x1+0x1+1x2+0x2+1x1+0x2+1x1+0x1+1x1+0x4+1x3+0x1+1x1+0x2+1x2+0x3+1x2+0x3+1x1+0x5+1x1+0x4+1x1+0x2
'0x6+1x5+0x4+1x1+0x1+1x1+0x2+1x2+0x6+1x1+0x1+1x7+0x4+1x3+0x3+1x1+0x4+1x1+0x2+1x2+0x4+1x1+0x6+1x1+0x6+1x8+0x3+1x1+0x5+1x1+0x7
'0x2+1x1+0x3+1x6+0x4+1x1+0x1+1x3+0x4+1x1+0x2+1x2+0x4+1x1+0x5+1x1+0x2+1x1+0x3+1x2+0x3+1x1+0x2+1x3+0x1+1x1+0x2+1x2+0x3+1x3+0x2+1x3+0x9+1x1+0x4+1x2+0x7+1x2'''
s = s.replace("x", "'*").replace("+","+'")
examp = s.split('\n')
bits = [eval(i) for i in examp]
print(bits)
Теперь создадим картинку с помощью библиотеки PIL. Допишем следующий код, выпоним и откроим получившуюся картинку.
from PIL import Image
width, height = len(bits[0]), len(bits)
pic = Image.new('RGB', (width, height))
pix = pic.load()
for i in range(height):
for j in range(width):
pix[j,i] = ( bits[i][j]=='0' and (255,255,255) or (0,0,0) )
pic.save('pixel.png')
Я приблизил картинку, читаем слово SOLUTION. На самом деле тут больше стеги, чем крипты. Данная статья будет интересна, скорее всего, только новичкам.
Дальше больше и сложнее… Вы можете присоединиться к нам в Telegram. Там можете предлагать свои темы и участвовать в голосовании на выбор темы для следующих статей.