PicoCTF 2024のForensicsの問題のWriteupです!
Easy
まずは難易度がEasyのものから!
Secret of the Polyglot
拡張子はPDFなので、開いてみるとFlagの最後の方と思われる文字列があります。
fileコマンドでファイル形式を調べてみると、PNGファイルのよう。。。
└─$ file flag2of2-final.pdf
flag2of2-final.pdf: PNG image data, 50 x 50, 8-bit/color RGBA, non-interlaced
拡張子をPNGにして開いてみると、Flagの前半のような文字列があるので、これをPDFの文字列とマージすれば答えになります
なんで、二つの拡張子で開けたんだろう?と思ったのですが、PNGファイルにbinwalkしてみると、PNGのあとにPDFが埋め込まれていました。。。
だから、FileではPNGとでたけど、PDFファイルとしても開けたのか
$ binwalk flag2of2-final.png -e
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 50 x 50, 8-bit/color RGBA, non-interlaced
914 0x392 PDF document, version: "1.4"
1149 0x47D Zlib compressed data, default compression
CanYouSee
How about some hide and seek?
Download this file here.
問題文からして、Stegseekだろうと思って、やってみる
$ stegseek ukn_reality.jpg
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek
[i] Found passphrase: ""
[i] Original filename: "flag".
[i] Extracting to "ukn_reality.jpg.out".
なんかあからさまな出力ファイルを見てみる
The flag is not here maybe think in simpler terms. Data that explains data.
【訳】旗はここにはない......もっと単純に考えてほしい。 データを説明するデータ。
データを説明するデータということはプロパティのことだと思って、exiftoolで調べてみると、Attribution URLにBASE64と思われる文字列が。。。!
$ exiftool ukn_reality.jpg
ExifTool Version Number : 12.76
File Name : ukn_reality.jpg
Directory : .
File Size : 2.3 MB
File Modification Date/Time : 2024:12:07 21:04:49+09:00
File Access Date/Time : 2024:12:07 21:05:39+09:00
File Inode Change Date/Time : 2024:12:07 21:04:49+09:00
File Permissions : -rwxrwx---
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Resolution Unit : inches
X Resolution : 72
Y Resolution : 72
XMP Toolkit : Image::ExifTool 11.88
Attribution URL : cGljb0NURntNRTc0RDQ3QV9ISUREM05fZGVjYTA2ZmJ9Cg==
Image Width : 4308
Image Height : 2875
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 4308x2875
Megapixels : 12.4
これをもとにもどせばFlagが手に入ります!
Medium
Blast from the past
問題文は以下↓
The judge for these pictures is a real fan of antiques. Can you age this photo to the specifications?
Set the timestamps on this picture to 1970:01:01 00:00:00.001+00:00 with as much precision as possible for each timestamp. In this example, +00:00 is a timezone adjustment. Any timezone is acceptable as long as the time is equivalent. As an example, this timestamp is acceptable as well: 1969:12:31 19:00:00.001-05:00. For timestamps without a timezone adjustment, put them in GMT time (+00:00). The checker program provides the timestamp needed for each.
Use this picture.
Additional details will be available after launching your challenge instance.
これは初めて見る問題だったので、以下のWriteupをみました
https://zenn.dev/tetsurou/articles/fb42527a57d3e6
exiftoolをつかって値の書き換えをしていくみたい!
$ exiftool -alldates='1970:01:01 00:00:00.001+00:00' original_change-timestamp.jpg
1 image files updated
┌──(kali㉿kali)-[/share_host/pico_CTF/Medium/Blast from the past]
└─$ nc -w 2 mimas.picoctf.net 61015 < original_change-timestamp.jpg
┌──(kali㉿kali)-[/share_host/pico_CTF/Medium/Blast from the past]
└─$ nc mimas.picoctf.net 57273
MD5 of your picture:
e7537a20fd614f08232eaa16d4f6587a test.out
Checking tag 1/7
Looking at IFD0: ModifyDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 2/7
Looking at ExifIFD: DateTimeOriginal
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 3/7
Looking at ExifIFD: CreateDate
Looking for '1970:01:01 00:00:00'
Found: 1970:01:01 00:00:00
Great job, you got that one!
Checking tag 4/7
Looking at Composite: SubSecCreateDate
Looking for '1970:01:01 00:00:00.001'
Found: 1970:01:01 00:00:00.703
Oops! That tag isn't right. Please try again.
チェック項目は7つあるみたいで、提出するとexiftoolのどのタイムスタンプが変更されていないか教えてくれます
以下の記事に同様の内容の質問があがっていたので、試してみます
https://stackoverflow.com/questions/78185037/how-to-edit-the-samsung-trailer-tag-timestamp
(質問の時期がpicoCTFとかぶっていますね、、)
exiftool -time:all -v3 original_change-timestamp.jpg
の実行結果でImage_UTC_Data
と関係がありそうなのは以下ですね
SamsungTrailer_0x0a01Name = Image_UTC_Data
- Tag '0x0a01-name' (14 bytes):
2b82f2: 49 6d 61 67 65 5f 55 54 43 5f 44 61 74 61 [Image_UTC_Data]
TimeStamp = 1700513181420
- Tag '0x0a01' (13 bytes):
2b8300: 31 37 30 30 35 31 33 31 38 31 34 32 30 [1700513181420]
上記のstackoverflowのやり方にそって、xxd
コマンドでJPEGファイルを16進数でダンプして、2b82f2
のところを探します。
002b8300
のところが2023年のUNIX時間になっているので、問題で与えられているUnix時間の1(=1970:01:01 00:00:00.001+00:00)にして、バイト文字もそれに合わせて修正します!
あとは、xxdコマンドで再度JPEGに戻せば、Flagが手に入ります!!
Mob psycho
問題文は以下のみ。。
Can you handle APKs?
APKファイルはZipファイルなので、拡張子を.zip
にして解凍してみる
ファイル数が多いので、怪しそうなファイル名が無いか確認してみると、flag.txtがありました!
┌──(kali㉿kali)-[/share_host/pico_CTF/Medium/Mob psycho/mobpsycho]
└─$ find . -name '*picoCTF*'
┌──(kali㉿kali)-[/share_host/pico_CTF/Medium/Mob psycho/mobpsycho]
└─$ find . -name '*flag*'
./res/color/flag.txt
中身を見てみると、なんとも言えない文字列が、、
┌──(kali㉿kali)-[/share_host/pico_CTF/Medium/Mob psycho/mobpsycho]
└─$ cat ./res/color/flag.txt
7069636f4354467b6178386d433052553676655f4e5838356c346178386d436c5f37343664666133397d
Dencodeで復号してみると16進数表記でpicoCTFのフラグが手に入りました!
endianness-v2
問題文は以下です
Here's a file that was recovered from a 32-bits system that organized the bytes a weird way. We're not even sure what type of file it is.
以下の日本語訳から、与えられたファイルはシステムから復元されたファイルの様子
これは、32ビットのシステムから復元されたファイルで、バイトが奇妙な方法で整理されている。 どのようなタイプのファイルなのかもわからない。
エンディアンは以下のサイトでざっくり概要をつかみました
https://wa3.i-3-i.info/word11426.html
一連のデータを格納する方式を定めていて、大きく2つにわけれています
- リトルエンディアン:前に位置するデータから格納する
- ビッグエンディアン:後ろに位置するデータから格納する
fileコマンドで調べようと思いましたが、data
と出力されたので、バイナリファイルということですね
$ file '/share_host/pico_CTF/Medium/endianness-v2/challengefile'
/share_host/pico_CTF/Medium/endianness-v2/challengefile: data
strings
で可読性のある文字列を抽出しましたが、意味のある単語はなかったです。。。
$ strings '/share_host/pico_CTF/Medium/endianness-v2/challengefile'
'.$
#,")7(
410,'
4428=943.<
!2222222222222222222222222222222222222222222222222
)('&654*:987FEDCJIHGVUTSZYXWfedcjihgvutszyxw
5*)(9876EDC:IHGFUTSJYXWVedcZihgfutsjyxwv
dhiX&
V ^8
_D w6|
Ie^8
9{[f
|UeVfr'O
]vIpTw
p4*KQ
Lo,Y
dk~a
t!'6
xrEg
JrDpH
v${4yavE<
[Jp4
__mW
'O"e
K^l/
,lnv
Cgew
=fI~<
(4m)k
EWUc
<a}{q{i
,OW,
16進数ファイルにしてみてみましたが、いくつか特徴的な文字列がありました。書き換えが起きているかもしれない?
exiftoolで見てみると、JPEGという記載もありますね
─$ exiftool '/home/kali/Desktop/share_host/pico_CTF/Medium/endianness-v2/challengefile'
ExifTool Version Number : 12.76
File Name : challengefile
Directory : /home/kali/Desktop/share_host/pico_CTF/Medium/endianness-v2
File Size : 3.4 kB
File Modification Date/Time : 2024:12:08 17:09:49+09:00
File Access Date/Time : 2024:12:08 21:07:12+09:00
File Inode Change Date/Time : 2024:12:08 17:10:02+09:00
File Permissions : -rwxrwx---
Warning : Processing JPEG-like data after unknown 1-byte header
ここからわからなくなったので、以下のWriteupを参考にしました
https://qiita.com/TTsuki/items/654d7928b8e4edb16ace
以下の流れをCyber Chefで行うみたいです
- エンディアンはバイト単位で考えるので、16進数文字列に変換する
- エンディアンを入れ替える(32ビットシステムは4文字を1塊と考える)
- 画像に変換
Cyber Chefはこれまで使ったことはなかったですが、便利ですね!
Dear Diary
Autopsyで読み込ませることはできるが、そこからわからず、以下のWriteupを見ました
正直、分断されたFlagを見つけるのは至難の業。。。
(というより、多分気が付かない。。。)
最後に
今回学んだことは以下4つです
- exiftoolは値の書き換えもできる
- xxdコマンドで16進数にすることで、内容の書き換えが容易
- データ加工においてCyber Chefは便利
- 無理な問題は無理。笑(最後の問題。。。)