UTCTF 2020 Forensics writeup
土, 07 3月 2020, 09:00 JST — 月, 09 3月 2020, 09:00 JST 2020/03/07 9:00 JST - 03/09 9:00に「zer0opsCTF 2020」の裏では、「UTCTF 2020」が行われておりました。ここで出題されたForesics問の話をする。とても易しくて分かりやすいものばかりであった。 ctftime.org
- 1 Frame per Minute
- Spectre
- Observe_Closely
- [basics]_forensics
- The Legend of Hackerman, Pt. 1
- The Legend of Hackerman, Pt. 2
- Zero
1 Frame per Minute
I recently received this signal transmission known as SSTV in a mode called Martian? This technology is all very old so I'm not sure what to do with it. Could you help me out?
与えられたファイルは、
# file signals.wav signals.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 48000 Hz
問題文を素直に受け取って良いのなら、SSTVでしょう。
SSTV
自分の場合は、RX-SSTVに再生した音声を聞かせて解いた。音が再生されると自動で録音してくれるが、雑音の少ないところでやりましょう。
flag: utflag{6bdfeac1e2baa12d6ac5384cdfd166b0}
Spectre
I found this audio file, but I don't think it's any song I've ever heard... Maybe there's something else inside?
与えられたファイルはコレ。
# file song.wav song.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 44100 Hz
おそらく、Spectreというからにはスペクトログラムを見るのではということでaudacityで開く。
メニューを開いて、スペクトログラムに切り替えると。
flag: utflag{sp3tr0gr4m0ph0n3}
一体どうやって作ったのか......
Observe_Closely
A simple image with a couple of twists... 与えられたファイルを見る。
# file Griffith_Observatory.png Griffith_Observatory.png: PNG image data, 320 x 155, 8-bit/color RGBA, non-interlaced root@kali:~/CTF/UTCTF2020/UTCTF2020/Forensic/Observe_Closely# binwalk Griffith_Observatory.png DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 PNG image, 320 x 155, 8-bit/color RGBA, non-interlaced 41 0x29 Zlib compressed data, default compression 127759 0x1F30F Zip archive data, at least v2.0 to extract, compressed size: 2587, uncompressed size: 16664, name: hidden_binary 130500 0x1FDC4 End of Zip archive, footer length: 22
binwalkを使って見たのは、何となく問題文からそんな気がしたからである。ファイルカービングは何でも良いが、今回はbinwalk -e
でいく。
# binwalk -e Griffith_Observatory.png DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 PNG image, 320 x 155, 8-bit/color RGBA, non-interlaced 41 0x29 Zlib compressed data, default compression 127759 0x1F30F Zip archive data, at least v2.0 to extract, compressed size: 2587, uncompressed size: 16664, name: hidden_binary 130500 0x1FDC4 End of Zip archive, footer length: 22 # cd _Griffith_Observatory.png.extracted/ # ls 1F30F.zip 29 29.zlib hidden_binary
zipが暗号化されていなかった所為か、zipの中身も一緒に出ている。
# strings hidden_binary /lib64/ld-linux-x86-64.so.2 (snip) Ah, you H found meH utflag{2H fbe9adc2H ad89c71dH a48cabe9H 0a121c0}H (snip)
動かすのが怖かったので、stringsを走らせた。
flag: utflag{2fbe9adc2ad89c71da48cabe90a121c0}
[basics]_forensics
My friend said they hid a flag in this picture, but it's broken! Now that I think about it, I don't even know if it really is a picture...
彼らの考えるForensicsとは一体何なのか、今明らかになる!
そんなことどうでもいいので、とりあえず与えられたファイルを見ていく。
# file secret.jpeg secret.jpeg: UTF-8 Unicode text, with CRLF line terminators
それはjpegではなかった。
# cat secret.jpeg | head The Project Gutenberg EBook of The History of Don Quixote by Miguel de Cervantes This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net Title: The History of Don Quixote
テキストファイルのようである。
# strings secret.jpeg | grep "utflag" utflag{fil3_ext3nsi0ns_4r3nt_r34l}
flag: utflag{fil3_ext3nsi0ns_4r3nt_r34l}
これが、彼らの考えるForensicsであった......
The Legend of Hackerman, Pt. 1
My friend Hackerman tried to send me a secret transmission, but I think some of it got messed up in transit. Can you fix it?
では、そのHackermanさんから与えられたファイルがこちら。
# file hackerman.png hackerman.png: data
たぶんpngヘッダー直す系問題。
# cp hackerman.png fix.png # hexedit fix.png
自分は「hexedit」派。 間違いない。PNGといえば、
89 50 4E 47 0D 0A 1A 0A
から始まるので、このように書き換える。
# file fix.png fix.png: PNG image data, 1192 x 670, 8-bit/color RGBA, non-interlaced
flag: utflag{3lit3_h4ck3r}
最近はこんなものもあるらしい
# python PCRT.py -v -i fix2.png ____ ____ ____ _____ | _ \ / ___| _ \_ _| | |_) | | | |_) || | | __/| |___| _ < | | |_| \____|_| \_\|_| PNG Check & Repair Tool Project address: https://github.com/sherlly/PCRT Author: sherlly Version: 1.1 [Detected] Wrong PNG header! File header: 000000000D0A1A0A Correct header: 89504E470D0A1A0A [Notice] Auto fixing? (y or n) [default:y] y [Finished] Now header:89504E470D0A1A0A [Finished] Correct IHDR CRC (offset: 0x1D): 812E23AF [Finished] IHDR chunk check complete (offset: 0x8) [Finished] Correct IDAT chunk data length (offset: 0x2A1D length: 2000) [Finished] Correct IDAT CRC (offset: 0x4A25): CB097594 (snip) [Finished] Correct IDAT chunk data length (offset: 0x15F245 length: 1E83) [Finished] Correct IDAT CRC (offset: 0x1610D0): 69353954 [Finished] IDAT chunk check complete (offset: 0x2A1D) [Finished] Correct IEND chunk [Finished] IEND chunk check complete [Finished] PNG check complete [Notice] Show the repaired image? (y or n) [default:n] y
直ったwow......
ヘッダーだけで解決しないときに良いかもしれない。
The Legend of Hackerman, Pt. 2
Ok, I've received another file from Hackerman, but it's just a Word Document He said that he attached a picture of the flag, but I can't find it...
またまたハッカーマンから何か来たようである。与えられたファイルがこちら。
# file Hacker.docx Hacker.docx: Microsoft Word 2007+
このようなOffice系ファイルやオープンドキュメント系ファイルは、とりあえずunzipして色々見てみることが多い。
# cp Hacker.docx Hacker.zip # unzip Hacker.zip Archive: Hacker.zip (snip) inflating: word/media/image97.png inflating: word/media/image102.png inflating: word/media/image96.png inflating: word/media/image101.png inflating: word/media/image95.png inflating: word/media/image100.png inflating: word/media/image88.png inflating: word/media/image58.png (snip) inflating: word/media/image27.png inflating: word/media/image26.png inflating: word/media/image25.png inflating: word/media/image24.png inflating: word/media/image169.jpeg inflating: word/media/image37.png (snip)
大量に出てきた画像ファイルが明らかに怪しい。
# cd word/media/ # ls image1.png image12.png image140.png image161.png image182.png image37.png image58.png image79.png image10.png image120.png image141.png image162.png image183.png image38.png image59.png image8.png image100.png image121.png image142.png image163.png image184.png image39.png image6.png image80.png image101.png image122.png image143.png image164.png image19.png image4.png image60.png image81.png image102.png image123.png image144.png image165.png image2.png image40.png image61.png image82.png image103.png image124.png image145.png image166.png image20.png image41.png image62.png image83.png image104.png image125.png image146.png image167.png image21.png image42.png image63.png image84.png image105.png image126.png image147.png image168.png image22.png image43.png image64.png image85.png image106.png image127.png image148.png image169.jpeg image23.png image44.png image65.png image86.png image107.png image128.png image149.png image17.png image24.png image45.png image66.png image87.png image108.png image129.png image15.png image170.png image25.png image46.png image67.png image88.png image109.png image13.png image150.png image171.png image26.png image47.png image68.png image89.png image11.png image130.png image151.png image172.jpeg image27.png image48.png image69.png image9.png image110.png image131.png image152.png image173.png image28.png image49.png image7.png image90.png image111.png image132.png image153.png image174.png image29.png image5.png image70.png image91.png image112.png image133.png image154.png image175.jpeg image3.png image50.png image71.png image92.png image113.png image134.png image155.png image176.png image30.png image51.png image72.png image93.png image114.png image135.png image156.png image177.png image31.png image52.png image73.png image94.png image115.png image136.png image157.png image178.png image32.png image53.png image74.png image95.png image116.png image137.png image158.png image179.png image33.png image54.png image75.png image96.png image117.png image138.png image159.png image18.png image34.png image55.png image76.png image97.png image118.png image139.png image16.png image180.png image35.png image56.png image77.png image98.png image119.png image14.png image160.png image181.png image36.png image57.png image78.png image99.png
仕方がないので、順番に見ていく。
すると、「image23.png」にてflag発見。
flag: utflag{unz1p_3v3ryth1ng}
Zero
This file seems to be too large given how much text it contains, but I can find zero evidence of the flag. Maybe you'll have better luck than me?
与えられたファイルがこちら。
# file zero.txt zero.txt: UTF-8 Unicode (with BOM) text, with very long lines, with no line terminators # cat zero.txt Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus quis tempus ante, nec vehicula mi. Aliquam nec nisi ut neque interdum auctor. Aliquam felis orci, vestibulum sit amet ante at, consectetur lobortis eros. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In finibus magna mauris, quis auctor libero congue quis. Duis sagittis consequat urna non tristique. Pellentesque eu lorem id quam vestibulum ultricies vel ac purus.
一見普通のテキストファイルだが、「zero evidence」が含まれている?
全然ぜ全然分からず、色々ガンバって辿り着いたのがこれ。
Unicode ゼロ幅スペースを利用して情報を隠して仕込む - A painter and a black cat
そんなんあるんか!早速試してみる。
Unicode Steganography with Zero-Width Characters
すげーです。なぜかLinux環境で表示させたやつのコピペは上手くいかなかった。
flag: utflag{whyNOT@sc11_4927aajbqk14}