Advanced-potion-making

Đề bài

Bước 1: Xác định định dạng thông tin file

0
Hình 1. Nội dung Challenge
1
Hình 2. Tải file về
2
Hình 3. Xem thông tin file
3
Hình 4. Xem các byte bằng xxd

Bước 2: Xác định vấn đề

  • Magic bytes bị sai (4E 47 biến thành 42 11).
  • Chiều dài khối IHDR bị sai (00 00 00 0D biến thành 00 12 13 14).

Script sửa tự động:

with open("advanced-potion-making", "rb") as f:
data = list(f.read())

# Sửa Magic Bytes: 89 50 4E 47
data[2] = 0x4E
data[3] = 0x47

# Sửa IHDR Length: 00 00 00 0D
data[8] = 0x00
data[9] = 0x00
data[10] = 0x00
data[11] = 0x0D

with open("fixed.png", "wb") as f:
f.write(bytes(data))
4
Hình 5. Sửa các byte cho đúng định dạng

Bước 3: Thực hiện sau khi sửa

5
Hình 6. Sau khi sửa
6
Hình 7. Cài zsteg để xem các file bị ẩn

Cụ thể, nó tìm thấy một OpenPGP Secret Key (Khóa bí mật PGP) được giấu ở hai vị trí khác nhau trong cấu trúc pixel:

  1. b2,bgr,msb,xy: Bit thứ 2, kênh màu BGR, quét theo hàng ngang (xy).
  2. b5,g,lsb,xy: Bit thứ 5, kênh màu Green, quét theo hàng ngang. Em đã thử trích xuất mảnh ở b2,bgr,msb,xy trước nhưng chỉ chứa các byte rác và hầu như không thu được kết quả. Sau đó, có repo chứa tool stegsolve, giúp hỗ trợ giải mã
7
Hình 8. Cài đặt môi trường java
7.2
Hình 9. Dùng java stegsolve để giải

Flag

8
Hình 10. Flag

Result

9
Hình 11. Thành công
picoCTF{w1z4rdry}