W tym poście chciałbym opisać rozwiązania zadania Corrupted file z działu Forensics picoCTF.
Dzięki podpowiedzi odrazu nakierowują nas na nagłówek pliku oraz informują nas, że jest to plik JPEG.
Na stronie można znaleźć informacje jak powinien wyglądać nagłówek pliku JPEG
Gdy plik dostarczony do zadania otworzymy w WinHex można odrazu zobaczyć różnicę miedzy nagłówkami:
Nagłówek jest traktowany jak tzw. file signature. Dzięki temu odrazu wiadomo jaki to jest typ pliku. Jeśli jest on uszkodzony to nie wiadomo jak interpretować pozostałe dane zapisane w pliku.
Poprawiamy nagłówek w programie WinHex na poprawny. Dopisujemy rozszerzenie do pliku, po czym wyświetli nam się flaga:
Można to też lekko zautomatyzować za pomocą Pythona:
- def fix_jpeg_header(input_file, output_file):
- with open(input_file, "rb") as f:
- data = f.read()
- #poprawny nagłówek
- correct_header = b'\xFF\xD8'
- print("Pierwsze 8 bajtów pliku:", data[:8])
- #weryfikacja nagłówka
- if data.startswith(correct_header):
- print("Nagłówek JPEG poprawny.")
- return
- print("Niepoprawny nagłówek")
- #podmien bajty
- fixed_data = correct_header + data[2:]
- with open(output_file, "wb") as f:
- f.write(fixed_data)
- print(f"Plik zapisany: {output_file}")
- fix_jpeg_header("file", "file_repaired.jpg")
W konsoli otrzymamy:
- $ py jpeg.py
- Pierwsze 8 bajtów pliku: b'\\x\xff\xe0\x00\x10JF'
- Niepoprawny nagłówek
- Plik zapisany: file_repaired.jpg
Flage wklejamy do odpowiedzi i zadanie rozwiązane.