PicoCTF Writeup - Easy -

Pico CTFのeasy難易度のwrite up

解き終えたpico ctfのwrite upを随時更新していきます。LLMを一切使わずに通常の検索のみで解いており、最適解とは限りません。

また、既存のwriteupの参照も控えています。

PicoCTFのプロファイルはこちら:picoCTF - re4lity Profile

環境構築

使用するOS;Windows 11 Pro 24H2

ブラウザの操作はwindows上で行い、そのほかの解析はdocker desktopで構築したkali linuxを使って行う。 dockerのよく使うコマンド(インストールは省略)

  • 既存のコンテナ一覧を表示する
1
docker ps -a
  • 既存のコンテナを起動する
1
docker start <コンテナ名またはID>
  • 起動したコンテナに入る
1
docker exec -it <コンテナ名またはID> /bin/bash

windows側からのファイルのやり取りをする場合に備え、別ウィンドウでkaliに入るのがおすすめ

  • Windows→Dockerのファイル転送
1
docker cp <Windoes上のファイルパス> <コンテナ名またはID>:<Docker上のファイルパス>

逆も同様に、ファイルパスの順番が違うだけ

Write Up

解きながらのメモを中心に書いていきます。

Riddle Registry

PDFからFlagを探す問題

PDFはフォントを背景色にあわせたり、黒塗りにするなどして、テキスト情報を入れ込みながらも視覚上からは隠すことができる

PDF Footprint Finder このサイトはPDF上の文字情報を読み取ってくれる

しかし今回は文中にFlagはない。 ただし、著者の欄の文字列が怪しいので解析してみる

Author: cGljb0NURntwdXp6bDNkX20zdGFkYXRhX2YwdW5kIV8wZTJkZTVhMX0=

文字列の暗号化の基本的な方法としてはROT_13、Base64、Asciiコードへの変換などがポピュラーでわかりやすい。

文字列系の解析はCyberChefというサイトが有用である。

今回はfrom base64のメニューを使って復号化に成功し、Flagを取れた。

Log Hunt

ログファイル(server.log)からFlagを探す

普通に Vscodeで開ける

FLAGPARTというラベルのあるINFOにFlagの情報がありそう。 4種類あって、それが繰り返されているので、順番につなげて出してFlagを取れた

Hidden in plainsight

.pngファイルから探す 普通に画像として開ける しかし画像の視覚情報では何もわからない

メタデータを見てみる kaliに送ってfileコマンドで見てみると

1
2
3
┌──(root㉿1bc27362dfb1)-[~]
└─# file plainsight.png
plainsight.png: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9", baseline, precision 8, 640x640, components 3

c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9というコメントが匂うので cybershefでみてみる。rotかな?

base64でデコードすると steghide:cEF6endvcmQ= となった

steghideが使われているっぽい

cEF6endvcmQ= というフレーズも怪しいのでさらにbase64復号してみるとpAzzwordという単語になった。

steghide info <ファイル名>でsteghideを用いてメッセージが埋め込まれているか確認することができる。ただし正しいパスフレーズを入れないと解析できないので、今回のように周辺情報からパスフレーズを推測できる必要があるっぽい

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
┌──(root㉿1bc27362dfb1)-[~]
└─# steghide info plainsight.png
"plainsight.png":
  format: jpeg
  capacity: 4.0 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
  embedded file "flag.txt":
    size: 34.0 Byte
    encrypted: rijndael-128, cbc
    compressed: yes

実際にデータを抽出する場合は

1
steghide extract -sf <ファイル名> [オプション]

でできる。これでFlagを取れた。

Flag in Flame

超大きいログファイルの解析

iVBORw…となっている部分を調べると、base64形式でエンコードされた画像形式であるらしい。 なのでbase64でデコードし、拡張子を.pngとか.jpegにすれば見れるのでは? 見れた

画像の中に

1
7069636F4354467B666F72656E736963735F616E616C797369735F69735F616D617A696E675F62653836303237397D

という文字列アリ。 HEXからのデコードでflagを取れた。結構てこずった

Crack the Gate 1

ソースに ABGR: Wnpx - grzcbenel olcnff: hfr urnqre “K-Qri-Npprff: lrf”

という文字列があり、base13で解読すると NOTE: Jack - temporary bypass: use header “X-Dev-Access: yes” となった

ctf-player@picoctf.org は問題文で与えられているメールアドレス。

検証用の画面を開いた状態で一回素のブラウザでログインを試行してみる。 そうするとネットワークタブに「login」という名前で失敗したログイン試行が記録されている。

このリクエストに’X-Dev-Access: yes’ を付ければよい。 ログイン試行の行を右クリック→Copy as cURL(bash)からコピー。 kali で張り付けるとcurlのリクエストとして張り付けられる。便利。

そこのヘッダー部分に先ほどのx dev accessを付けて再度送信してみると、、

1
2
3
┌──(root㉿1bc27362dfb1)-[~]
└─# curl 'http://amiable-citadel.picoctf.net:57824/login'   -H 'Accept: */*'   -H 'Accept-Language: ja,en;q=0.9'   -H 'Cache-Control: no-cache'   -H 'Connection: keep-alive'   -H 'Content-Type: application/json'   -H 'Origin: http://amiable-citadel.picoctf.net:57824'   -H 'Pragma: no-cache'   -H 'Referer: http://amiable-citadel.picoctf.net:57824/' -H 'X-Dev-Access: yes' \  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36'   --data-raw '{"email":"ctf-player@picoctf.org","password":"sg"}'   --insecure
{"success":true,"email":"ctf-player@picoctf.org","firstName":"pico","lastName":"player","flag":"picoCTF{brut4_f0rc4_hogehoge}"}curl: (3) URL rejected: Malformed input to a URL function

としてレスポンスにフラグがはいっている。

Corrupted file

拡張子なしのファイルの解析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
┌──(root㉿1bc27362dfb1)-[~]
└─# file corruptedfile
corruptedfile: data

┌──(root㉿1bc27362dfb1)-[~]
└─# exiftool corruptedfile
ExifTool Version Number         : 13.25
File Name                       : corruptedfile
Directory                       : .
File Size                       : 8.8 kB
File Modification Date/Time     : 2025:11:19 15:55:25+00:00
File Access Date/Time           : 2025:11:19 15:57:19+00:00
File Inode Change Date/Time     : 2025:11:19 15:57:08+00:00
File Permissions                : -rwxr-xr-x
Error                           : Unknown file type

file , exiftoolは効果なし

1
2
3
4
5
6
7
┌──(root㉿1bc27362dfb1)-[~]
└─# xxd corruptedfile | head -n 5
00000000: 5c78 ffe0 0010 4a46 4946 0001 0100 0001  \x....JFIF......
00000010: 0001 0000 ffdb 0043 0008 0606 0706 0508  .......C........
00000020: 0707 0709 0908 0a0c 140d 0c0b 0b0c 1912  ................
00000030: 130f 141d 1a1f 1e1d 1a1c 1c20 242e 2720  ........... $.'
00000040: 222c 231c 1c28 3729 2c30 3134 3434 1f27  ",#..(7),01444.'

JFIFはjpegファイルの冒頭にあるものらしい。 しかしこの状態でmvを使って.jpegを付けてもファイルを正常に開けなかった。 冒頭の\xの部分はいつも見かけないので、これを取ってみる

JPEG画像の「中身」は一体どうなっているのか? - GIGAZINE によると、ファイル冒頭は

1
ff d8 ff e0 ...

のようになっているらしい。

hexeditをインストールし、そこでバイナリを編集した。

1
2
┌──(root㉿1bc27362dfb1)-[~]
└─# hexedit corruptedfile

編集が完了したら、crtl + xで編集画面から抜けられる

1
2
3
4
5
6
7
8
9
┌──(root㉿1bc27362dfb1)-[~]
└─# xxd corruptedfile | head -n 4
00000000: ffd8 ffe0 0010 4a46 4946 0001 0100 0001  ......JFIF......
00000010: 0001 0000 ffdb 0043 0008 0606 0706 0508  .......C........
00000020: 0707 0709 0908 0a0c 140d 0c0b 0b0c 1912  ................
00000030: 130f 141d 1a1f 1e1d 1a1c 1c20 242e 2720  ........... $.'

┌──(root㉿1bc27362dfb1)-[~]
└─# mv corruptedfile corruptedfile.jpeg

しっかり修正できていた。

1
2
C:\Users\USER>docker cp kali-steg:/root/corruptedfile.jpeg "C:\Users\USER\Desktop\一時用\picoCTF\corruptedfile.png"
Successfully copied 10.8kB to C:\Users\USER\Desktop\一時用\picoCTF\corruptedfile.png

windows側に持っていき、GUIで画像を開くとフラグを取れた

気づきなど

  • 「=」で終わる意味不明なb文字列は大体base64の確率が高い
  • kali linux使いやすい
  • CyberChefの使い勝手が良い。いろんな方式を同一UIでとっかえひっかえ試せるのがいいね
最終更新 12月 08, 2025 11:49 +0900
発言は個人の見解であり、所属組織とは関係ありません。
Hugo で構築されています。
テーマ StackJimmy によって設計されています。