Кодування, шифр зсуву, брут хешів і створення зображення за допомогою PIL python. Рішення задач з г0от-мі Кріто. Частина 1

Дана стаття містить рішень завдань Encoding ASCII і Encoding UU спрямовані на кодування, Hash Message Digest 5 і Hash SHA-2 — на знаходження прообразу хешу, Shift cipher — шифр зсуву, і Pixel Madness — на складання картинки.

Організаційна інформація

Спеціально для тих, хто хоче дізнаватися щось нове і розвиватися у будь-якій із сфер інформаційної та комп’ютерної безпеки, я буду писати і розповідати про наступних категоріях:

  • PWN;
  • криптографія (Crypto);
  • мережеві технології (Network);
  • реверс (Reverse Engineering);
  • стеганографія (Stegano);
  • пошук та експлуатація WEB-вразливостей.

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

Вся інформація представлена виключно в освітніх цілях. Автор цього документа не несе ніякої відповідальності за будь-які збитки, заподіяні кому-небудь в результаті використання знань і методів, отриманих в результаті вивчення даного документа.

Encoding — ASCII

Почнемо з самого першого завдання — Encoding-ASCII.

image

Переходимо до самого завдання. Бачимо послідовність 16-х символів. Саме перше припущення — це звичайний hex (всі символи представлені в 16-му вигляді).

image

s = "4C6520666C6167206465206365206368616C6C656E6765206573743A203261633337363438316165353436636436383964356239313237356433323465"
s.decode("hex")

image

Отримуємо відповідь і йдемо далі.

Encoding — UU

image

Переходимо до самого завдання. Навіть не дивлячись на підказку в назві завдання, відрізнити файли у UUE (кодування для передачі файлів, що містять не текстові дані) форматі легко — вони починаються з рядка:

Ведіп_права-на-файл_название-файлу

image

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()

image

Здаємо прапор.

Hash — Message Digest 5

image

Нас просять знайти прообраз хеш md5. Це можна легко зробити за допомогою цього сайту (https://md5decrypt.net/). Але ми, в цілях навчання звичайно, використовуємо hashcat. Для цього використовуємо наступні параметри і коди:

  • -a 0 — перебір за словником;
  • -m 0 — тип хеш MD5;
  • File.hash — файл з хешем;
  • rockyou.txt — наш словник;
  • –force — ігнорувати помилки.

image

Переходимо до наступного завдання.

Hash — SHA-2

image

В якості відповіді потрібно дати SHA1 хеш від прообразу цього хеша. Справа в тому, що в даній зайвий символ.

image

Видалимо її. Для того, щоб визначити алгоритм хешування використовуємо програму hashid.

image

З представлених алгоритмів найбільш ймовірний SHA-256. Як вирішувати таке завдання з допомогою hashcat показав, тепер зробимо його за допомогою цього
сайту.

image

Залишилося взяти SHA-1 від цього рядка.

from hashlib import *
sha1('4dM1n').hexdigest()

image

Shift cipher

image

Ну з алгоритмом шифровани нам допомагають. Той же самий Шифр Цезаря, тільки зсув відбувається не в діапозоні від нуля до довжини алфавіту, а по всіх можливих 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)

image

Серед рядків знайдемо ту, яка містить відповідь.

image

Pixel Madness

image

Нам дають кілька виразів, а в кінці кажуть, що 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)

image

Тепер створимо картинку з допомогою бібліотеки PIL. Допишемо наступний код, і відкриємо отриману картинку.

from PIL Image import 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')

image

Я наблизив картинку, читаємо слово SOLUTION. Насправді тут більше стеги, ніж крипти. Дана стаття буде цікава, швидше за все, тільки новачкам.

Джерело

Поділитися
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Реклама

327

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Схожі записи

Почніть набирати текст зверху та натисніть "Enter" для пошуку. Натисніть ESC для відміни.

Повернутись вверх