captchaBài này thuộc catelogy stego (steganography) và ppc (Professional programming and coding)
We've got a rather strange png file. Very strange png. Something isn't right about it...
png
Sau khi download về ngó phát thấy ảnh có 256x256 pixel mà dung lượng lên tới 1.54MB thì chắc chắn có ẩn tình bên trong file.
Quăng vào HxD ta thấy:
Các ảnh PNG nối tiếp nhau trong cùng 1 file.
Coi ở đây để biết thêm về signature của PNG: http://www.garykessler.net/library/file_sigs.html
PNG signature bắt đầu bằng: 82 89 50 4E 47 0D 0A 1A 0A và kết thúc bằng 49 45 4E 44 AE 42 60 82
OK vậy ta tiến thành cắt các ảnh PNG ra từng file riêng biệt. (có thể sử dụng foremost hoặc binwalk với option -e cũng được)
Theo như hình ta thấy cắt bằng tay thì không khả thi vì có tới 1892 ảnh PNG.
=> Code 1 script nho nhỏ cắt ra. Dựa vào signature ta sẽ cắt được toàn bộ 1892 ảnh :D
Source Code: http://pastebin.com/jsaX1rS8
Theo quan sát 1892 ảnh. Có ảnh cuối cùng có kí tự =
Ta có thể đoán ngay là base64.
Vậy phải lấy từng kí tự trong ảnh ra.
Ý tưởng tiếp theo là dựa vào số bytes nhưng bị thọt vì có 2 kí tự khác nhau nhưng cùng số byte.
Tiếp theo nữa mình thử 2 ảnh cùng kí tự thấy data y hệt nhau.
Vậy dùng MD5 tốt rồi.
Bước tiếp theo code 1 đoạn python lấy danh sách các md5 và tên file tương ứng sau khi unique (k biết ghi tiếng Việt cho từ này sao).
Mình đã cho tất cả các ảnh cắt được vào thư mục Captcha cho tiện lấy file.
Source code: http://pastebin.com/9iev2PXT
Ta được kết quả: http://pastebin.com/Zm9QR5Gj
Vậy ta chỉ cần kiểm tra 65 ảnh và ghi lại các kí tự tương ứng với md5 của ảnh đó
Sau đó với vài thao tác với notepad mình đã tạo được 1 dict của python với key là md5 và value là kí tự. (bước này có thể sử dụng tesaract để tự nhận diện)
Chú ý: kí tự I và l (i hoa và L thường) rất giống nhau.
và
Tiếp theo lấy toàn bộ kí tự theo thứ tự của các ảnh.
Code: http://pastebin.com/hHtzXUeD
Ta được kết quả là 1 base64:
iVBORw0KGgoAAAANSUhEUgAAARAAAACDCAIAAADK7dMbAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAUfSURBVHhe7dhtYtowEEVR1sWCWA+rYTNdTOqRhTSjD6NHEmjSe37Z8kgaGV6T9PQBYBmBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEQmD+XM+n0+l8/ZPvB6zkcss3/53b5TQ4/fSdjMvf7zd9iOk7mw9j7/vzb3w9MOU9piZ6lqRvetf+2JKnJz6lJsDvO30nBOb7NV+ALzjaemAGn283JDe09qVpjr3u6YlPITDvNvxCut+JvuBoPyIwP8T4MATmdYZfyDcGpv37Zdjf5WbD5be0O3t0t8/xIw++OmGjsvym7ajlJq71lou3svP1tg/vlX3/SR0+X691s5V9Xc1msv6ITXTt28x8O1xkbyDfNLuOTBsert8049YfNjOzFW+rrG5qSu3Gyn1ZLdyq3FpW87CVY8uBGe1VX062N507tKf5Mkz2s7oVxmqZreTf5gNu/aPefD/p0p67zkKNa8GPhymzfdsJviZf+/UnbGapKOVhkdTNfmPj9+Gw60Ra576+2yqsU5dZaKaMzoVN3WS7HGw6WbE/3Dbi6/oC1Vpgmm3vuu3D8Wbd+cMuHsCV2eWolzE3cdLb+NXHvtqa7Wm6bcbdpOm+7km9mq0/5SaUS7dlUu5jA21Zb6l+1IG7dGPJ0oncNuNd3apW0K/YTxts/LCXQ8s/YUZH6Mbisf1je+LcOx6tOhDL7C6sMucmTnobdxBHm+YTe9rMdbfuMu7rntSr2fpzNiOdvly0zdT72EBb1pvXN33eX/+gmaYyOdw1bup3nWy61wyG4jbbSH3sO3zWd/wNk2/q43TmMu6b7k84NC6z0QendxMPeusXiRuOa7pxN2m6r93l21ozW//IPtstHlt297GBtqw3qXed57vScr5xE8PjFW7upky3i8mmhXWYRx8ebiuQ2upJgWmb6YbiscvjcGwbLV3bzcIJBntvxu8vcBMnvXXNpctmw1DjWFnuIJWUombfWDWpGax/xKa7HfPA/c515jfaJx3vZM3UijI59JjWce9+uz9fLm6eeqJU37+lw00zq8mjVhEKmjbsVmhq5CWByY3v0v8mlVOVB4fnqCvZVXU4yTQt1PrQuls0j4XHiTuBuT+sw7N/7rfR8h9um/p5xj0m6x/Yuw6F7iDhe1PGQ5MTsSKeJC/TfIibQTPSifZNS5916fGm7qCbunSp9i3Hx8d9PPSpwOCd7NMPsfjJvuCrvOClgXnNkbDqV+XlNwYm7db8qP9K8ads9fCAT0/8xx2f65N5ectLO9j0BYFJu3/66ysEBgCBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBlj28fEX4wPz1G62YicAAAAASUVORK5CYII=Tiến hành decode và ghi vào file thôi :D
Đưa file flag vào HxD ta thấy nó là file PNG (dựa vào signature ta đã biết ở trên)
Vậy đổi tên file flag thành flag.png ta được flag :D
Submit và ăn 150 điểm thôi :D
Không có nhận xét nào:
Đăng nhận xét