はじめに
常設CTFサイト「CpawCTF」のLevel 2を解いた際の備忘録です。
Flagそのものは掲載していませんが、解法について触れています。自力で解きたい方はご注意ください。
Level 1のWriteUPはこちら
Level 3のWriteUPはこちら
実行環境・使用ツール
- OS: Windows 11 (WSL2)
-
使用ソフト:
- WSL (Linuxコマンド全般)
- Wireshark (パケット解析)
- WinSCP (FTP接続・ファイル転送)
Q13. [Stego] 隠されたフラグ
【概要】画像内の記号からFlagを導き出す問題。
画像を開くと、左上と右下に「.(ドット)」と「-(ダッシュ)」の羅列があります。
- これらをモールス信号として読み取ります。
- オンラインのモールス信号変換サイトでデコードします。
- 左上と右下の文字列を繋げるとFlagになります。
Q15. [Web] Redirect
【概要】リダイレクト時のHTTPヘッダーを確認する問題。
ブラウザでは一瞬で遷移してしまいますが、curlコマンドの-v(verbose)オプションを使うと通信の詳細を確認できます。
curl -v http://q15.ctf.cpaw.site/
出力結果のレスポンスヘッダー内にある X-FLAG 項目にFlagが記載されています。
Q16. [Network+Forensic] HTTP Traffic
【概要】パケットキャプチャ(pcap)からファイルを抽出し、Webページを再現する問題。
-
ファイルの抽出: Wiresharkで開き、
File→Export Objects→HTTP...から全ファイルを保存します。 -
ソースの確認:
network100(1)をHTMLとして開くと「このボタンを押すんだ」というメッセージが表示されます。 -
環境の再現: デベロッパーツール(F12)で確認すると、画像は
./img/、スクリプトは./js/を参照しています。 -
ディレクトリ構成の作成:
以下のようにフォルダを作成し、抽出したファイルを配置します。-
network100(1).html(本体) img/image.jpgjs/button2.js
-
- 実行: HTMLを開き、ボタンをクリックすると画像からFlagが読み取れます。
Q17. [Recon] Who am I ?
【概要】OSINT(公開情報調査)の問題。
問題文にあるヒント「twitter:@porisuteru」「スペシャルフォース2」でWeb検索を行います。
ヒットしたX(Twitter)の投稿画像内に、ゲームのアカウント名としてFlagが記載されています。
Q18. [Forensic] leaf in forest
【概要】膨大な文字列から特定のパターンを抽出する問題。
-
stringsコマンドでファイル内の文字列を確認すると、大量の「lovelive!」が表示されます。 -
sedで「lovelive!」を除去し、trで大文字と括弧のみを抽出します。
# 大文字とフラグ形式の記号のみを抽出
strings misc100 | tr -dc 'A-Z{}'
「CCCPPPAAAWWW{{{...」のように重複して出力されるため、1文字ずつ拾い上げるとFlagになります。
Q19. [Misc] Image!
【概要】OpenDocument Drawing(.odg)ファイルから情報を探す問題。
-
fileコマンドで正体を確認。file misc100.zip # 実行結果: OpenDocument Drawing -
ファイルの展開:
.zipとして展開し、中のcontent.xmlを解析します。 -
タグの除去: XMLタグが邪魔で読みづらいため、
sedでタグを取り除いてテキストのみを抽出します。sed 's/<[^>]*>//g' content.xml
表示されたテキストの中からFlagを見つけます。
Q20. [Crypto] Block Cipher
【概要】ブロック暗号の並び替え問題。
暗号文:cpaw{ruoYced_ehpigniriks_i_llrg_stae}
この文字列を4文字ずつに区切り、それぞれのブロック内を逆順に並び替えると意味の通る英文(Flag)になります。
Q21. [Reversing] reversing easy!
【概要】バイナリを逆コンパイルして解析する問題。
objdumpコマンドでアセンブリを表示します。
objdump -d rev100 | less
解析を進めると、movl(4バイト転送)やmovb(1バイト転送)命令でメモリに値を格納している箇所があります。
- 例:
movl $0x77617063, 0x46(%esp) -
0x77617063をリトルエンディアン(逆順)で読み、16進数をASCII文字に変換します。-
63→c,70→p,61→a,77→w⇒cpaw
-
同様に続く命令の値を変換していくとFlagが完成します。
Q9. [Web] Baby's SQLi - Stage 1-
【概要】基本的なSQLインジェクションの問題。
「palloc_homeテーブルの2番目に先生がいる」というヒントがあります。
フォームにテーブル全件を表示させるSQLを入力します。
SELECT * FROM palloc_home
表示された結果の2行目にFlagがあります。
Q28. [Network] Can you login?
【概要】通信ログから認証情報を盗み出し、FTPサーバーへ侵入する問題。
-
パケット解析: Wiresharkで
ftpフィルタをかけ、TCP Streamを追跡します。ログインに成功しているパケットから「IPアドレス」「ユーザーID」「パスワード」を特定します。 - FTP接続: WinSCPを用い、特定した情報でログインします。
-
隠しファイルの表示: ディレクトリ内には
Dummyしか見えませんが、設定で「隠しファイルを表示」にするとFlagファイルが出現します。
まとめ
AIにヒントをもらいながらの挑戦でしたが、ツール(WiresharkやLinuxコマンド)の使い方など、非常に学びが多いレベルでした。
次はLevel 3に挑戦します!