見習いをしてるCTFチームm1z0r3_NSLにて、m1z0r3CTF(身内CTF)があった。
せっかくなので、その時作った問題を自サーバにホスティングした。
問題はここ→http://ctf.ryotosaito.comのSPA。
制作の目安レベルは「頑張れば初心者でも解ける問題」。
そうはいっても8時間もあるCTFなのでどれだけ複雑にするかの調整が難しかった…
DB構成とUIは班員にお願いし、自分はサーバサイドとSPAスクリプト、それからサーバデプロイを担当した。
当日は3班対抗で行い、所属しない2班中1班にフラグを取られた。割と速攻だった…笑
後日談:
m1z0r3CTFの問題サーバとスコアサーバはあらかじめ用意されていたので、実行環境パッケージだけをインストールしてデプロイすればOKだったので、そんなに難しくはなかった。
今回自分のサーバに改めてホスティングしようとした時に
- スコアサーバを作る
- SQLインジェクションされても問題ないようにmysqlインスタンスを分割する
必要があった。
スコアサーバは全力で作れって話でしたね(白目)。
DBインスタンスの分割は以下の手順でできた。
my.cnfに以下の記述を追加
[[email protected]]
datadir=/var/lib/mysql.2017.m1z0r3.ctf
socket=/var/lib/mysql.2017.m1z0r3.ctf/mysql.sock
log-error=/var/log/mysqld.2017.m1z0r3.ctf.log
pid-file=/var/run/mysqld/mysqld.2017.m1z0r3.ctf.pid
skip-networking
以下コマンドを実行
# systemctl start [email protected]
# systemctl enable [email protected]
PDOコンストラクト時のDSNは
mysql:unix_socket=/var/lib/mysql.2017.m1z0r3.ctf/mysql.sock;dbname=hoge;
これでインジェクションされても本当に大事なデータが見られないよ!やったね!
コメント