楽しく解くCpawCTF Level1

目的

  • ネットワークやセキュリティなどの勉強はしたいが実際に何から手をつけたら良いのか分からない・・・

  • 無料でコンテスト形式の何かに取り組みたい

といった人におすすめなのがCTF!
基本的にはチーム形式でセキュリティやネットワークの問題を解く、というコンテストで頻繁に開催されているため、楽しく学べます。

僕も最近始めたばかりで、ひとまず基本的なことを学ぶために一人で簡単なものから解いています。

環境

MacOS Catalina 10.15.4
Ubuntu 64-bit(VM)

CpawCTF Level1

現在解いているのはこちらのCpawCTFで、初学者でも楽しくクイズ形式で学ぶことができます。

今回はLevel1を全て埋めたので内容について触れていきたいと思います。

なお、解答については触れません。
どういう風に解いたかに焦点を当てていきたいと思います。

Q1.[Misc] Test Problem

この問題の答え(FLAG)は、cpaw{this_is_Cpaw_CTF} です。
下の入力欄にFLAGを入力してSubmitボタンを押して、答えを送信しましょう!

記念すべき第一問。どういった形式で解答すればよいかを教えてくれます。

このコンテストでは基本的に
cpaw{flag}
といった形式で、cpawの部分は固定で、それ以降の{}の中にそれぞれの問題を解いた時に得られるflagを入れることで正解かどうかを判定します。

これがCTFがCatch the flagと呼ばれる所以ですね。

とにもかくにも解答の方法は基本的にこういった形なので理解するにはうってつけの問題です。

Q6.[Crypto] Classical Cipher

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

暗号文: fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}

問題文の通り、それぞれアルファベットを3文字分ずらすと答えが現れます。

元々暗号の成り立ちはこういった単純だけれども仕組みを知らない人には意味が分からない、というところから始まったということが分かります。

Q7.[Reversing] Can you execute ?

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

とあるコマンド、というのが何かを知るためのものです。
これはfileコマンドのことで、そしてLinux環境で実行しなければならない、ということでVirtualBox上でUbuntuを使ってSSH接続をし、その上でchmodコマンドを777で権限を与え、実行すれば答えが出ます。

この問題でLinuxに触れたり、権限周りについて勉強できるので非常に面白いです。
Level1で一番好きです。

Q8.[Misc] Can you open this file ?

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

これもfileコマンドでファイルの種類を調べ、そのファイルに応じた拡張子をつけてあげた上で開いてあげると解答が分かります。

Q9.[Web] HTML Page

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

このページに行ってみると分かりますが、ページ上にはフラグはありません。
特定の方法でしかみることができません。ソースコードの中に記述されているそのページの要約についての要素について調べると分かるかも・・・?

Q10.[Forensics] River

JPEGという画像ファイルのフォーマットでは、撮影時の日時、使われたカメラ、位置情報など様々な情報(Exif情報)が付加されることがあるらしい。
この情報から、写真に写っている川の名前を特定して欲しい。
問題ファイル: [river.jpg]

FLAGの形式は、“cpaw{river_name}”
例:隅田川 → cpaw{sumidagawa}

Exif情報を調べる、という問題です。
Macの場合はプレビューから位置情報が分かるのでそれをマップに落とし込んで川の名前を確認→打ち込みでOKです。

昔rebuid:fmというPodcastのメインパーソナリティである宮川さんという方がこの情報を元にどの芸能人が何のカメラを使っているかを割り出した、というのを聞いたことがあったので、ああ!あの時の!という感じで探偵気分で調べました。

Q11.[Network]pcap

ネットワークを流れているデータはパケットというデータの塊です。
それを保存したのがpcapファイルです。
pcapファイルを開いて、ネットワークにふれてみましょう!
[pcapファイル]

pcapファイルに触れてみましょう!というのは簡単ですが、多くの人はpcapファイルに触れたことすらないと思います。僕もそうでした。

なので実際に見てみるためにWiresharkをインストールし、pcapファイルをインポートして中身を見てみましょう。
答えはすぐに分かると思います。

Q12.[Crypto]HashHashHash!

ハッシュ関数とは、値を入れたら絶対にもとに戻せないハッシュ値と呼ばれる値が返ってくる関数です。
ですが、レインボーテーブルなどでいくつかのハッシュ関数は元に戻せてしまう時代になってしまいました。
以下のSHA1というハッシュ関数で作られたハッシュ値を元に戻してみてください!(ヒント:googleで検索)

e4c6bced9edff99746401bd077afa92860f83de3

フラグは
cpaw{ハッシュを戻した値}
です。

ググると答えが出てきます。
調べてみて知ったのですが、このSHA-1という暗号的ハッシュ関数はTLS/SSLなどに使われていたのですが、2017年にGoogleとオランダのとある研究所が脆弱性を発見してしまったため、現段階では後継であるSHA-2へと多くの企業が移行しつつあります。

耳寄りな情報を知ることができたのでよかったです(小学生並の感想)。

Q14.[PPC]並べ替えろ!

下にある配列の中身を大きい順に並べ替えて、くっつけてcpaw{並べ替えた後の値}をフラグとして提出してください。
例:もし配列{1,5,3,2}っていう配列があったら、大きい順に並べ替えると{5,3,2,1}となります。
そして、フラグはcpaw{5321}となります。
同じようにやってみましょう(ただし量が多いので、ソートするプログラムを書いたほうがいいですよ!)

[15,1,93,52,66,31,87,0,42,77,46,24,99,10,19,36,27,4,58,76,2,81,50,102,33,94,20,14,80,82,49,41,12,143,121,7,111,100,60,55,108,34,150,103,109,130,25,54,57,159,136,110,3,167,119,72,18,151,105,171,160,144,85,201,193,188,190,146,210,211,63,207]

ひとまずソートして逆順に並び替え、文字列化して連結するプログラムをPythonで書いて実行しました。

listに上記の値を入れて、sortreverseをしてjoinでくっつければ解けます。

まとめ

こんなところです。
まとめ記事を書くとあ〜、こんなことやったなぁ!って気持ちになれるし復習にもなるのでオススメです。

この記事を見たそこのあなたもレッツCTF!

コメント

このブログの人気の投稿

Braveブラウザの同期機能をiPhoneで設定した話。

failed: unable to get local issuer certificate (_ssl.c:1123)と出たので解決した話

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した