CTF初挑戦! picoCTFで学ぶセキュリティの基礎
CTF初挑戦! picoCTFで学ぶセキュリティの基礎
はじめに
「CTFって聞いたことあるけど、難しそう…」
「セキュリティエンジニアじゃないと無理なんじゃない?」
そんな風に思っていませんか?実は私もそうでした。
しかし実際にCTFに挑戦してみると、セキュリティの知識がなくても楽しめるパズルのような問題がたくさんあり、何より実務で役立つスキルが自然に身につくことに気づきました。
この記事では、CTF初心者の私が picoCTF で初めて問題を解いた体験をお伝えします。CTFに興味はあるけど、まだやったことがないという方の背中を押せたら嬉しいです。
CTFとは?
CTF = Capture The Flag(旗を奪え)
スポーツのような名前ですが、実際にやることは「コンピュータやプログラムに関する"なぞなぞ"を解いて、正解の合言葉(フラグ)を見つけるゲーム」です。
フラグって何?
フラグとは、問題を正しく解いた証拠となる文字列です。
flag{this_is_the_answer}
このような形式の文字列を見つけて提出すると正解になります。
CTFの問題の流れ
- ファイルが渡される(PDF、画像、ログ、Web画面など)
- 「よく見るとおかしいぞ?」というヒントがある
- 調べたり、解析したり、試したりする
- 隠されていたフラグを見つける
CTFをやる価値は?エンジニアとして得られる3つのスキル
「CTFって、セキュリティエンジニア専用のものでしょ?」と思うかもしれませんが、実はどの分野のエンジニアにも役立つスキルが身につきます。
1. 「調べる力」が身につく
CTFでは、答えはどこにも書いていません。
- 何を疑うか
- どこを調べるか
- どうやって検証するか
これらを自分で考える必要があります。これはそのまま実務でのデバッグ力です。
「エラーが出たけど原因がわからない」というとき、仮説を立てて検証していくプロセスは、CTFで鍛えられるスキルそのものです。
2. セキュリティ意識が自然に高まる
CTFをやると、以下のような感覚が自然に身につきます。
- 「ここに情報を入れたら危ない」
- 「ログやメタデータにも情報が残る」
- 「ユーザー入力は信頼してはいけない」
安全な設計ができるエンジニアになれます。
3. 技術の"つながり"が見える
CTFでは、以下の知識が全部つながって使われます。
- OS
- ファイル形式
- ネットワーク
- プログラミング言語
- エンコーディング
「点の知識」が「線」になる瞬間を体験できます。
picoCTFを選んだ理由
今回私が挑戦したのは picoCTF です。
picoCTFの特徴:
- 常設のCTFサービス(いつでも挑戦できる)
- 無料でサインアップ可能
- 基本的には学生向けだが、誰でも利用できる
- 初心者向けの問題が豊富
「まずは気軽に始めてみたい」という方に最適なプラットフォームです。
実際に解いた問題
問題1: Riddle Registry - PDFのメタデータに隠された秘密
問題文
※以下は問題文を日本語に翻訳したものです。
こんにちは、勇敢な調査員の皆さん!📄🔍
あなたは、一見すると意味不明な文字の羅列しかないように見える、奇妙なPDFファイルにたどり着きました。しかし、注意してください。すべてが見た目どおりとは限りません。
この混沌の中には、隠された宝が存在しています。それは、発見されるのを待っている"フラグ"です。
メタデータの中からフラグを見つけてください。
解き方
問題文からリンクされている confidential.pdf(confidential = 機密の)をダウンロードします。

PDFを開くと、いくつかの記述が見られますが、問題文には「uncover the flag within the metadata」とあります。つまり、ファイルの見た目ではなく**メタデータ(作成日や作者など)**に注目する必要があります。
Macの Finder で confidential.pdf を右クリックし、「情報を見る」を選択すると、作成者欄に怪しげな文字列が…

cGljb0NURntwdXp6bDNkX20zdGFkYXRhX2YwdW5kIV9jOTk5ZTJhNH0=
コマンドラインで確認する方法もあります。 exiftool というツールを使うと、より詳細な情報を取得できます。
EXIF(Exchangeable Image File Format) とは、デジタルカメラで撮影した写真などに埋め込まれるメタデータの規格です。撮影日時、カメラの機種、GPS位置情報などが記録されます。exiftool は、EXIF をはじめとする様々なファイル形式のメタデータを読み取ることができるツールで、画像ファイルだけでなくPDFなどにも対応しています。
exiftool confidential.pdf
実行結果:
ExifTool Version Number : 13.44
File Name : confidential.pdf
Directory : .
File Size : 183 kB
File Modification Date/Time : 2026:02:01 18:34:07+09:00
...
Producer : PyPDF2
Author : cGljb0NURntwdXp6bDNkX20zdGFkYXRhX2YwdW5kIV9jOTk5ZTJhNH0=
Author フィールドに同じ文字列が見つかりました!
末尾の = が特徴的です。これはBase64エンコードの可能性が高い!
試しにBase64でデコードしてみると…
echo "cGljb0NURntwdXp6bDNkX20zdGFkYXRhX2YwdW5kIV9jOTk5ZTJhNH0=" | base64 -d
フラグが手に入ります!
学んだこと
- ファイルには見えない情報(メタデータ)が含まれている
-
exiftoolなどのツールでメタデータを詳細に確認できる - Base64エンコーディングの見分け方と使い方
- 情報は必ずしも見える場所にあるとは限らない
問題2: Log Hunt - ログから断片を集めてフラグを復元
問題文
※以下は問題文を日本語に翻訳したものです。
私たちのサーバーは、秘密のフラグの一部をログの中に漏らしてしまっているようです。フラグの断片はあちこちに散らばっており、同じ内容が何度も繰り返し記録されている場合もあります。
これらの断片を手がかりにして、元のフラグを復元してください。
ログファイルをダウンロードし、含まれている断片から完全なフラグを突き止めてください。
解き方
まず、ダウンロードした server.log がどんなファイルか確認します。
file server.log
# server.log: ASCII text
テキストファイルなので、中身を確認してみます。
head -n 5 server.log
[1990-08-09 10:00:10] INFO FLAGPART: picoCTF{us3_
[1990-08-09 10:00:16] WARN Disk space low
[1990-08-09 10:00:19] DEBUG Cache cleared
[1990-08-09 10:00:23] WARN Disk space low
[1990-08-09 10:00:25] INFO Service restarted
1行目に INFO FLAGPART という怪しげなログが!
フラグの断片を探すため、grep で絞り込みます。
grep "INFO FLAGPART" server.log
[1990-08-09 10:00:10] INFO FLAGPART: picoCTF{us3_
[1990-08-09 10:02:55] INFO FLAGPART: y0urlinux_
[1990-08-09 10:05:54] INFO FLAGPART: sk1lls_
[1990-08-09 10:05:55] INFO FLAGPART: sk1lls_
[1990-08-09 10:10:54] INFO FLAGPART: cedfa5fb}
[1990-08-09 10:10:58] INFO FLAGPART: cedfa5fb}
...(繰り返し)
断片が見えてきました!これらを順番につなげればフラグになりそうです。
やるべきことは:
-
FLAGPART:の後の文字列のみ抽出 - 重複している行をまとめる(登場順を保つ)
- 1つの文字列として結合する
これを実現するコマンドを作成しました。
grep -i "FLAGPART" server.log \
| awk -F'FLAGPART: ' '{print $2}' \
| awk '!seen[$0]++' \
| tr -d '\n'
コマンドの解説
① grep -i "FLAGPART" server.log
server.log から「FLAGPART」を含む行だけを抽出します(-i で大文字小文字を区別しない)。
② awk -F'FLAGPART: ' '{print $2}'
各行を FLAGPART: で分割し、後半部分(フラグの断片)だけを取り出します。
[1990-08-09 10:00:10] INFO FLAGPART: picoCTF{us3_
→ picoCTF{us3_
③ awk '!seen[$0]++'
同じ内容がすでに出てきた行は無視し、初めて出てきた行だけを表示します。登場順を保ったまま重複を除去できます。
このコマンドの仕組みを詳しく見てみましょう:
-
seenは連想配列(キーと値のペアを保存するデータ構造) -
$0は現在処理している行全体 -
seen[$0]は、その行をキーとして値を取得(初回は自動的に0) -
++は後置インクリメント演算子で、現在の値を返してから1増やす -
!は論理否定(0なら真、それ以外は偽)
つまり:
- 初めて出てきた行:
seen[$0]は0 →!0は真 → 行が出力される → その後値が1になる - 2回目以降:
seen[$0]は1以上 →!1は偽 → 行は出力されない
④ tr -d '\n'
改行文字を削除して、1行につなげます。
このコマンドを実行すると、完全なフラグが獲得できました!
学んだこと
- ログファイルの解析方法
-
grep,awk,trなどのコマンドラインツールの使い方 - パイプを使った複数コマンドの連携
- 実務でのログ調査にも応用できるスキル
まとめ:CTFは「調べる力」を鍛える最高の教材
今回、初めてCTFに挑戦して感じたことは、CTFは単なる"遊び"ではなく、エンジニアとして必要なスキルを楽しみながら身につけられる最高の教材だということです。
CTFで得られたもの
- 調べる力: どこに情報があるか、どうやって探すか
- 仮説検証力: 「もしかしてこうかも?」を試す習慣
- セキュリティ意識: 情報がどこに残るか、何が危険か
- コマンドラインスキル: grep, awk, base64などの実践的な使い方
次のステップ
picoCTFには他にもたくさんの問題があります。
- Web問題(XSS、SQLインジェクションなど)
- バイナリ解析
- 暗号問題
- ネットワーク問題
興味のある分野から始めてみるのがおすすめです。
「難しそう」と思っていたCTF、実は思ったより気軽に始められます。
この記事を読んで「ちょっとやってみようかな」と思った方は、ぜひ picoCTF に登録して、最初の一問に挑戦してみてください。
あなたの「調べる力」を楽しく鍛える旅が、今日から始まります。
Discussion
CTFを一緒にやってくれるメンバーを募集しています!
CTFが好きで、普段から積極的に参加している方、大歓迎です。
Web / Pwn / Rev / Crypto / Forensics / OSINT など、得意分野は問いません。
一緒にCTFに参加したり、解けた問題を共有したりしながら、楽しく強くなれるチームを目指しています。
海外CTFにも興味がある方、ぜひ気軽に声をかけてください!
Team: RUY
CTFtime: https://ctftime.org/team/444522