■ 概要

2015年2月7日(土)〜8日(日)に開催された「SECCON2014全国大会」のサーバ4です.
(実際に利用したイメージではなく,同等の作成方法+部分的な変更(※)を加えて 新たに作り直したものです)

http://www.seccon.jp/

※ MIPSのシミュレータにread()でバッファが余計にクリアされてしまい エラーが出る問題があったので,本番では無かった修正を入れています. (サーバ攻略には影響しない問題&修正ですが,見栄えが悪いので修正しました)
あと,ベースとなったイメージからuser/rootのパスワードを変更していません.

■ 注意!

脆弱性があります!無保証です!自己責任で利用してください!

CTF競技用の,脆弱性のあるプログラムが動作するVMイメージです.
取扱には十分に注意してください.インターネットに直接接続しているような状態で うかつに立ち上げたりしないように注意!

■ 起動・ログイン

書籍「開発ツールを使って学ぶ! C言語プログラミング」のイメージ (progtool-CentOS.ova)をベースに作成しています.

パスワードを変更していないため,同じユーザIDでSSHでログインできます. (ログインはあくまで管理用で,攻略には不要です)

以下のようにポートフォワーディングしています.

注意:ポートフォワーディングのホストのアドレスを127.0.0.1に指定しているので, 外部からネットワーク経由では接続できません.ホストから接続してください.

10022ポートでSSHログイン可能です.(userのみSSHログイン可能)
ユーザIDとパスワードは以下.

ブラウザから以下に接続することで,サーバのホームページを見ることができます.

■ 設定

GDBのシミュレータで6種類のアーキテクチャのプログラムが動作しています.
動作については /etc/rc.local と /home/user 以下にある各種スクリプト類を 参考にしてください.

まずはサーバのホームページに繋いで,説明を読んでください.

以下のポートで脆弱性のあるプログラムが動作しています.
telnet等で繋いでみてください.

■ ファイルについて

脆弱性プログラムのソースファイル,実行ファイル,各種スクリプト, GDBに対するパッチなどはサーバ内の /home/user 等に置いてあります.

必要な場合,SSHで接続して引き上げてください.

■ 競技の概要

以下を行う競技です.得点には2種類があります.(攻撃ポイントと防御ポイント)

■ 競技の設計

size.txtというファイルがあり,脆弱性プログラムはsize.txtに書かれているサイズ までしかread()しません.

なので,Exploitしてsize.txtを小さめの値で上書きすることで, 他チームがExploitしにくくするように妨害することができます.

もちろん無闇に小さな値を書き込むと自分もExploitできなくなるので, 頑張って他チームよりも短いExploitコードを作成して, 自分はExploitできるが他人はできない,というサイズにする必要があります.

つまり競技者は,以下の3種類のExploitを行うことになります.

size.txtに書き込まれている値は定期的にインクリメントされます (サイズゼロが書き込まれても,しばらく待てばサイズは戻ります). またflag.txtには定期的にフラグワードを書き込む必要があります. このため,flag.txtとsize.txtへのExploitは1回だけではなく, 定期的に行う必要があります.

防御ポイントは,どれかひとつのアーキを攻略すれば得られます. (複数のアーキを攻略しても,そのぶん防御ポイントが得られるわけではありません)

あるチームがあるアーキを最小Exploitで攻略してsize.txtにそのサイズを 定期的に書き込んでいけば,そのアーキでの主導権を握ることができます. (そしてflag.txtを上書きすることで,防御ポイントが得られます)

この場合他チームはそれよりも短いExploitを書けば主導権を奪取できるため, 可能な限り短いExploitを書く,という競技になります. もしくは他チームは,別アーキを攻略してそちらで防御ポイントを稼ぐ, という方法もあります.なので様々なアーキのExploitを書く,という競技でも あります.

さらに,あるアーキを攻略したとしても,他チームが防御ポイントを得ることを妨害 するために,別アーキも攻略したほうがいい,ということでもあります. (あるアーキの主導権を得たとしても,別アーキを攻略するモチベーションが無くなる わけではない)

よって様々なアーキを転々として最小Exploitを作成する,という競技になります.

※ size.txtに不正な値(数値でない,とか)が書き込まれた場合には,自動的に 復旧されます.

※ stager防止のために標準入出力をclose()しています. このためword.txtの内容を直接得ることはできません. word.txtを読んだ後,size.txtに書き込むなどして間接的に内容を得る 必要があります.

■ おしまい