僕の世界観を変えてみる

文系男子が趣味でプログラミングを勉強していくブログです。他にも日常で起きたどうでもいいことや愚痴を書いていきたいです。座右の銘は和を以て貴しとなすです。仲良くやろうよ。

文系男子が初心者むけのCTF、CpawCTFをやってみた

f:id:htmllifehack:20180611153044j:plain

最早男子なんて呼べる年齢でもないんですけど語呂がいいんで使ってます。

さて、君はCTF(キャプチャー・ザ・フラッグ)を知っているか?

僕はCTFって言ったらCODのゲームモードでそんなのあったなーって認識程度だった。

今回言うCTFとはセキュリティ技術を競う競技のこと。

どんな内容かというと脆弱性をついてサーバに攻撃してみたり、暗号解いてみたり、それに伴いプログラム書いてみたり。

つまり、謎解きだ!(笑)

ま一回やってみよう。

百聞は一見に如かず。



CTF(キャプチャー・ザ・フラッグ)とは

この辺がわかりやすいので参考に。
https://www.ospn.jp/osc2015-kyoto/pdf/OSC2015_Kyoto_kyotolocal.pdf

CTFの紹介と始め方

www.slideshare.net

↑これなんでリンクにピンク色の線が入っとると?

いろんな知識が必要なのでCTFの問題を解くことでそれらの知識や経験が得られます。

面白いし勉強にもなるし一石二鳥ですな。

CpawCTFをやってみよう

ちなみに僕の知識としては仕事で、起動しないPCからソフトを使ってデータの取出したり修復かけたりをやってるだけ。

あとは独学でpythonとVBAを勉強してまだ1年経ってないくらいかな?

CpawCTFのLv1はそんな人でもできちゃう簡単な問題を扱っているサイトです。

CpawCTF - Main page

右上のSignUpからアカウントを作る
ScreenName(ランキングに載るときの名前)
UserID(なんだかわからん)
Password(パスワード)
 ↓
LogInする
 ↓
Challengesから問題を解いていく

フラグはcpaw{〇〇}って形で隠されているのでわかりやすい。

Q1.[Misc] Test Problem

これはそのままcpaw{this_is_Cpaw_CTF}をコピペして張り付けるだけ

Q6.[Crypto] Classical Cipher

有名なシーザー暗号ってやつ。

3文字分アルファベットをずらすという単一換字式暗号の一つ。

fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}のアルファベットだけを3文字ずらすプログラムを作るわけです。

pythonでシーザー暗号

pythonには標準でrot13という名前でシーザー暗号が使える。

import codecs

s = 'fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}'

codecs.encode(s, 'rot13')

codecsというエンコードやでコードを行うモジュールが標準ライブラリとして存在します。

codecsにencode関数を、そして引数に暗号文とエンコードの種類を与えるだけです。

ちなみに下のコードでもできるという記事がありますが、これだとエラーがでます。

s = 'fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}'

s.encode('rot13')

Error Code 'rot13' is not a text encoding; use codecs.encode() to handle arbitrary codecs

codecsを使うように怒られるので1番目のように書きました。

python2だと2番目のコードでもできるのかな?


と、長くなりましたがrot13はその名の通り13文字あとにずらす方法です。

なぜ13なのかというと2回行うと1周して元の文字に戻るので暗号化と復号化で便利だから、らしいです。

ということでrot13ではこのフラグの答えはでないので自分で作りましょう。

ASCIIコード

要はアルファベットをASCIIコード化して3を足せばいいわけです。

ASCII文字コード - IT用語辞典

forで文字列を一文字ずつ取出します。

ordでASCIIコード化です。

A~Zは65~90、a~zは97~122というように大文字と小文字の間(91~96)に記号があります。

記号は据え置きでアルファベットだけずらしたいのでif~elif~elseで条件を出します。

chrでASCIIから文字に変換します。

最後にlist_に詰め込んだ一文字一文字をjoinでつなげて完成です。

書いていて気付いたんですけど、もし暗号文にaがあった場合^になっちゃいますね。

まいっか完璧じゃないけど、気が向いたときに直しておきます(笑)


ちなみに僕はずっと+3ずらしてやっていました(笑)

フラグの答えがcpaw{}になるはずなんでfsdzから始まる時点でなんで気付かなかったのか。

fがcになるには前に3つずらす、です。

まとめ

とまあこんな感じの競技みたいで、すごいところは数日かけて開催されるらしいです。

クイズ形式のほかにチームでの攻防もあるらしくてなんだかわけがわからないですね。

こんな競技もあるんだよっていう報告です(笑)

僕はもっと知識が欲しいなっと思ってAmazonで本を見つけたのがきっかけです。

と言っても知ったのはこの記事を書いている前日の話なんですけどね(笑)

ksnctfというサイトを最初にやったんですが難しかったですはい。

ksnctfも初心者向けらしいのですが僕は初心者のレベルすら達していなかったようですはい。

ってことで本当に初心者だけど興味があるって方はCpawCTFをおすすめします。

Lv1はちょっと調べれば解けるのでここから始めてみましょう!

解法をWriteUPというらしいのでサイト名 writeupで検索するとやり方がわかりますよ。

以上!