Writeup: 247CTF (Web)
「247CTF」は常設CTF で誰でも無料で登録して遊べるようになっています。 難易度は低めで、セキュリティの勉強を始めたばかりの人でも楽しめるのでお薦めです。
あまり知られていないためか、日本語のWriteup(解答例)も皆無なので、記事にまとめておくことにしました。この記事を見て CTF に興味を持ってくれる人が一人でも増えると嬉しいです。
CTF には Crypt (暗号), Network(パケット解析), Web(Webセキュリティ)など、いろいろな分野がありますが、ブラウザ1つあれば取り組むことができる「Web」が一番気軽に取り組めるカテゴリだと思います。
まずは247CTF の遊び方の説明を兼ね「Beginner Tutorial」の問題を解いた後、「Web」カテゴリの問題解説を書くことにします。
1.247 CTF の遊び方
まずはユーザー登録です。
"https://247ctf.com/" をブラウザで開き、「JOIN」をクリックします。
ユーザー名、メールアドレス、パスワードを入力し「SUBMIT」をクリックします。
ダッシュボードが表示されたら、ユーザー登録完了です。
これで問題を解き始めることができます。
ダッシュボードから「BEGINNER TUTORIAL」をクリックすると、このカテゴリの問題が表示されます。
チュートリアルなので、問題というよりも、ほとんどが使い方の説明です。
このカテゴリで唯一、問題らしいものは一番下の「TIPS AND TRICKS」のみです。これを解いてみましょう。
2.TIPS AND TRICKS
「BEGINNER TUTORIAL」の「TIPS AND TRICKS」をクリックすると、画面に問題の概要が表示されます。右側のボタン「START CHALLENGE」をクリックすると、問題サーバーが起動します。
画面右下に表示されるバナーをクリックします。
ブラウザにサーバーのアドレスが表示さます。
ncコマンド でサーバーに接続してみると、足し算の問題が表示されました。
500回連続で足し算に回答すればフラグが貰えるようです。
試みに何か数字を入力して キーボードの [ Enter ] を押してみます。
おや?サーバー側から応答が返ってきません。
おそらく行末の区切り文字が単純な改行( \n )ではない、ということなのでしょう。
とりあえず、Pythonで一度接続してみて、行末の区切り文字をチェックしてみましょう。
サーバーから送信された文字列を見ると、行末の区切り文字は \r\n になっていることが判りました。これで自動応答スクリプトを書くことができます。
送られてきた文字列から「足し算の式」の部分を正規表現で抽出して、回答を自動送信するスクリプトを作成します。
import socket, re
server='53365b9956fe3ba5.247ctf.com'
port=50263
buffer=512
s = socket.create_connection((server,port))
for i in range(1,501):
m = re.search(r' ([0-9]+ \+ [0-9]+)\?',s.recv(buffer).decode())
msg = m.groups()[0]
ans = eval(msg)
print(f'count={i} msg={msg} ans={ans}')
s.send((str(ans)+'\r\n').encode())
print(s.recv(buffer).decode())
実行結果は以下の通り。フラグが表示されました。
入手したフラグ( 247CTF{ ・・・} )を画面右側に入力し、送信します。
これでこの問題はクリアです。
他の問題も同様にして遊ぶことができます。
以後はWeb問題のWriteupです。
Web問題は画面右側の「START CHALLENGE」クリックした後、画面右下に表示されているバナーをクリックすると問題サイトにアクセスすることができます。
3.Web問題のWriteup
この記事では、全16問あるWeb問題のうち、下記4問について解答例 を
初心者向けに判り易く解説しています。
python や curl コマンドの基本的な使い方を知っていることが前提です。
Trusted Client
SECURED SESSION,
COMPAIR THE PAIR
FLAG AUTHORISER
ここから先は
¥ 500
この記事が気に入ったらチップで応援してみませんか?