0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PicoCTF2024 Writeup:Forensics

Posted at

PicoCTF 2024のForensicsの問題のWriteupです!

Easy

まずは難易度がEasyのものから!

Secret of the Polyglot

拡張子はPDFなので、開いてみるとFlagの最後の方と思われる文字列があります。
image.png

fileコマンドでファイル形式を調べてみると、PNGファイルのよう。。。

└─$ file flag2of2-final.pdf 
flag2of2-final.pdf: PNG image data, 50 x 50, 8-bit/color RGBA, non-interlaced

拡張子をPNGにして開いてみると、Flagの前半のような文字列があるので、これをPDFの文字列とマージすれば答えになります
image.png

なんで、二つの拡張子で開けたんだろう?と思ったのですが、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のところを探します。
image.png

002b8300のところが2023年のUNIX時間になっているので、問題で与えられているUnix時間の1(=1970:01:01 00:00:00.001+00:00)にして、バイト文字もそれに合わせて修正します!

image.png

あとは、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進数ファイルにしてみてみましたが、いくつか特徴的な文字列がありました。書き換えが起きているかもしれない?

2が連続している
image.png

(が等間隔に出現。。。
image.png

③ ファイルの最後にEQが等間隔に出現。。。
image.png

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で行うみたいです

  1. エンディアンはバイト単位で考えるので、16進数文字列に変換する
  2. エンディアンを入れ替える(32ビットシステムは4文字を1塊と考える)
  3. 画像に変換

image.png

Cyber Chefはこれまで使ったことはなかったですが、便利ですね!

Dear Diary

Autopsyで読み込ませることはできるが、そこからわからず、以下のWriteupを見ました

正直、分断されたFlagを見つけるのは至難の業。。。
(というより、多分気が付かない。。。)

最後に

今回学んだことは以下4つです

  • exiftoolは値の書き換えもできる
  • xxdコマンドで16進数にすることで、内容の書き換えが容易
  • データ加工においてCyber Chefは便利
  • 無理な問題は無理。笑(最後の問題。。。)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?