【Write up】CpawCTF Q1からQ9までのヒントを解説します【答えなし】

eyecatch CpawCTF セキュリティ
この記事は約9分で読めます。
※記事内には広告を含む場合がございます

初心者さんに、CFTの楽しさをアシストする意図でのヒント記事となります。
こうやって解くのか~という雰囲気を味わってもらいたいんです。
そのため過程は解説していますが、直接的な答えは表示しないよう変更いたしました。

CpawCTFとは

CTFってなんぞや?

事前に主催者が用意した、フラッグという文字列を何らかの方法で取得し、回答します。
大抵の場合、主催者が用意したサーバーやWEBサイトがあり、その中にフラッグが隠されています。
フラッグは基本的には隠蔽されていますが、セキュリティ上の不具合があり、それらを利用することで隠蔽されたフラッグを見つけます。
実際に不具合を利用する過程で、コンピューターセキュリティの知識を安全に身につける事ができます。

キャプチャー・ザ・フラッグ(CTF)は、コンピュータセキュリティ技術の競技である。参加者は「フラッグ」と呼ばれる文字列を獲得したり、サーバの権限を奪取したりすることでスコアを得る。CTFは通常、参加者に対しコンピュータを守る経験に加え、現実の世界で発見されたサイバー攻撃への対処を学ぶ教育手法として企画されている。「ハッカーコンテスト」[1]「ハッキング大会」[2]「ハッキング技術コンテスト」[3]などとも訳される。

https://ja.wikipedia.org/wiki/キャプチャー・ザ・フラッグ

CpawCFT

https://ctf.cpaw.site/index.php

上記サイトにて運営されているCFTです。
日本語で問題を解くことができます、
また、問題文にかなりヒントが含まれていて、かなり初心者向けです。

回答方法

回答する練習問題
cpaw{答え}の形式で回答する。
特に記述がなければ、cpawも含めて正解の文字列が存在する。
その場合はそのまま回答する。

問題によっては答えを求めるために計算する必要がある
その場合は計算した結果ををcpaw{ここ}に代入して回答する場合もある。

Q1 [Misc] Test Problem (練習問題)

説明を読んで、実際にやってみましょう!

Q6.[Crypto] Classical Cipher (解説記事サンプル)

暗号には大きく分けて、古典暗号と現代暗号の2種類があります。特に古典暗号では、古代ローマの軍事的指導者ガイウス・ユリウス・カエサル(英語読みでシーザー)が初めて使ったことから、名称がついたシーザー暗号が有名です。これは3文字分アルファベットをずらすという単一換字式暗号の一つです。

次の暗号文は、このシーザー暗号を用いて暗号化しました。暗号文を解読してフラグを手にいれましょう。

暗号文: fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}

シーザー暗号解読機 (外部リンク)

Caesar cipher

Key = ? でcpaw{} の形式に復号化することができました。

Pythonなどで実装してみるもアルゴリズムの勉強になりますね。

Q7 [Reversing] Can you execute ?

拡張子がないファイルを貰ってこのファイルを実行しろと言われたが、どうしたら実行出来るのだろうか。
この場合、UnixやLinuxのとあるコマンドを使ってファイルの種類を調べて、適切なOSで実行するのが一般的らしいが…

https://ctf.cpaw.site/questions.php?qnum=7

模範解答linuxのfileコマンドを使う。

$file ./exec_me
> exec_me: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped

注目すること

  • ELF 64-bit executable
    64ビットの実行ファイルであるということ。
    ELFとは?
    https://www.itmedia.co.jp/help/tips/linux/l0448.html
  • GNU/Linux 2.6.24
    Linux2.6.24でコンパイルされた。

つまりLinuxで動作する実行ファイルの可能性が高い。

linux環境で実行してみる。(答え)

(Linux環境が必要です。何かしらの方法でLinuxを用意してください。)
この後もLinuxは使います。

$ ./exec_me
> 答えが表示されます。(自分で確認してください)

exec_me: command not found

exec_meという名前をコマンドを探してしまってる。
正しくは./exec_me
カレントディレクトリにある、exec_meファイルを指定する。

./exec_me: Permission denied

実行権限がない。
chmodで権限を指定することもできるが、
手っ取り早いのはsudoを付けること。

$ sudo ./exec_me

ゴリ押し別解

バイナリエディタを使って./exec_meを開く
今回はWindows環境でStirlingというソフトを使う(バイナリエディタならなんでもOK)

先頭のバイトに.ELFとある。
まずここで、何かしらの実行ファイルとわかる。

先頭

00000310付近
libc.so.6.putchar
libcはlinuxでのC言語のライブラリ実装。
また.soという拡張子はlinuxのC言語関連で用いられている、動的リンクライブラリ。
(Windowsでの.dllに近い)

さらにスクロールしていくと、00001040付近に何やら平文が、
GCC (ubuntu)
このファイルがubuntu上のgccでコンパイルされたと思われる。

以上の情報からでもlinuxで動く実行ファイルと判別することができる。
fileコマンドを手動で行っているのに近い。
バイナリエディタはCTFでは何かと役に立ちます。

この問題から学べること

ファイル拡張子というのは飾りに過ぎない。
linuxでは、ファイル名で判別する以外の意味はない。
しかし、.exe .jpg .png等は仕様で認識できるように、
決められたバイト列が存在している。
それらを確認することで本当のファイルの拡張子がわかる。

表示上は.jpgなのに実際はマルウェアの.exe
といった悪質な例も見破れる様になるはず。

Q8.[Misc] Can you open this file ?

問題文

このファイルを開きたいが拡張子がないので、どのような種類のファイルで、どのアプリケーションで開けば良いかわからない。
どうにかして、この拡張子がないこのファイルの種類を特定し、どのアプリケーションで開くか調べてくれ。

https://ctf.cpaw.site/questions.php?qnum=8

バイナリエディタで見てみる。

とりあえず開いてみる。

序盤は謎の文字列たち。
何かしらのデータか?

かなりスクロールして、0006380付近
Word Docment の文字

Microsoft Word 97-2003の文字

このファイルは恐らくwordのファイルでしょう。
ですがwordはバージョンによって拡張子が違います。

そこでヒントになるのが97-2003の文字。
調べてみるとちょうど2003まで.docという拡張子が使われていたそうです。
後方互換があるとのことで、現在のwordでも読み込めるそう。

参照
https://ja.wikipedia.org/wiki/Microsoft_Word

Word持ってないんだけど?

安心してください。Googleドキュメントでも開けます。
open_meファイルをopen_me.docに変更。
そしてGoogleドキュメントにアップロードします。
すると…

この問題から学べること

バイナリエディタは便利です。
これで間違えてファイルの拡張子を消してしまって、なんのファイルだか分からなくなっても安心ですね!

Q9.[Web] HTML Page

HTML(Hyper Text Markup Language)は、Webサイトを記述するための言語です。
ページに表示されている部分以外にも、ページをより良くみせるためのデータが含まれています。
次のWebサイトからフラグを探して下さい。
http://q9.ctf.cpaw.site

※この問題のサーバへの攻撃はお止めください。

とりあえずアクセス

リンクをアクセスしてみると…CTFについて解説されているページです。
普通にわかりやすいですね。

デベロッパーツール

大抵のブラウザではF12キーを押すと開発者向けのデベロッパーツールを開くことができます。
今回はChormeを使います。

(使い込んでるのでデフォルトの配置じゃないかも)

EdgeもChromium系統ですので、ほぼ同じ画面かと思います。
Firefoxでも似たようなデザインですね。

分析

ここからは多少HTMLの知識が必要になります。
デベロッパーツールの要素(Element)タブでは、HTMLを階層構造で見ることができます。
上から見ていきましょう。
HTMLでは最初に<head>タグがあります。
ページに関する情報を入力するところです。

さっそくですが、フラグありましたね。

本来ページの説明を書く <meta name=”description”>の中にフラグが潜んでいました。
答えのフラグを知りたい人は↓↓をクリックすると答えが表示されます

(余談)他に隠せそうな場所

<body>内は基本的に画面に描画されます。
そのためフラグの文字列はないように思えますが、<!– –>の形式でコメントを書くことができるので
フラグを隠すことも可能です。

検索機能を使おう

Ctrl + Shift + Fもしくは、
右上のマークから検索を選び

検索タブが開けたら、cpawと入力

すると…

一発で出てきましたね。
大きいサイトだと人力で探すのは大変です。
検索機能を使いましょう。

この問題から学べること

CTFでは必ずフラグの形式が決まっています。
Cpawならcpaw{}

これを検索することで、一発で隠されているフラグが発見できることがあります。
ただしcpaw{フラグを代入}のパターンや、暗号化されている場合は使えないですが…

簡単なCTFではとりあえずフラグの形式で検索してみるのはアリだと思います。
また今回のHTMLでは平文でしたが、バイナリの場合も多いです。(後の問題ででてきます)

コメント

タイトルとURLをコピーしました