nkhrlab~

140字超の記事

HarekazeCTF2018: [Misc 127]Unnormalized-form Data 想定解法

この記事について

本記事は,HarekazeCTF2018に私が出題した問題 [Misc 127]Unnormalized-form Data の想定解法について解説を行うものである.HarekazeCTF2018の期間中に43チームが本問題のフラグを獲得した. harekaze.com

問題文

Unnormalized-form data is troublesome.

解法

配布された unf.zip を展開して,2つのファイルを得る.

  • operation.txt
  • unf.sql

operation.txt の観察

operation.txt は次のような内容である.

$ sudo nano postgresql.conf
$ sudo /etc/init.d/postgresql reload
[ ok ] Reloading postgresql configuration (via systemctl): postgresql.service.
$ psql -U postgres -c "CREATE DATABASE unf"
CREATE DATABASE
$ psql -U postgres -d unf < unf.sql >> /dev/null
$ psql -U postgres -d unf -c "SELECT FLAG()"
             flag
-------------------------------
 HarekazeCTF{****************}
(1 row)

$

この記述はフラグの取得までの手順を示している.

続きを読む

CTFサーバとの自動対話

CTFでは指示されたサーバに接続して問題を解くことがよくある.例えば次のようにnetcatを利用した接続の方法が示される問題はその典型である.

nc 192.168.61.74 6174

しかしながら,このコマンドを実際に端末で実行してサーバと対話的に通信しても問題が解けない場合がある.例えば,サーバとの接続に時間制限があり,しかもその時間が問題を解く人にとってあまりに短い場合がこれに当てはまる.

例えば,サーバから送られてくる2つの整数の掛け算20題を10秒以内に計算する問題が出題されたとしよう.この場合は,人が暗算で問題を解き,キーボードを使って解答を送信するという一連の操作20題分を10秒以内で行うことはほとんど不可能であると考えられる.

このような問題を解くにあたって,サーバとの対話的通信を自動的に行うクライアントを作成することが有効である.また,サーバからのデータの代わりに標準入力のデータをクライアントに与えることができれば,クライアントの動作の検証も容易である.

そこで,この記事では2つの整数の掛け算20題を計算する問題を出題するサーバスクリプト,これに対応したサーバとの自動対話および標準入力による動作確認が行えるクライアントスクリプトを紹介する.

続きを読む

Tokyo Westerns CTF 3rd 2017(2017/9/2 - 2017/9/4) - Writeup

チーム「Harekaze」のメンバーとしてCTF「Tokyo Westerns CTF 3rd 2017」に参加した.チームは940点を獲得し33位となった.個人では2個のフラグを得ることができたので,Writeupを書く.

[PPC 24]Palindromes Pairs - Coding Phase -

空白区切りで与えられる文字列のリストに対して,そのうちの2個を取り出し結合したものが回文となる組み合わせがいくつあるかを答える問題.文字列のリストの大きさは高々50という制約のため,すべての組み合わせをしらみつぶしに調べても高々2500個の組み合わせを調べればよいことが明らかで,これは十分に短い時間で実行可能である.そこで,素朴な方法を実装した次のRubyスクリプトを作成した.

続きを読む

無向グラフに関する頂点数・染色数制約下での辺数の最大化

この記事で扱う問い

無向グラフ G = (V, E)の染色数を \chi(G)と表すとき,グラフ Gに対する頂点数についての制約 |V| = mおよび染色数についての制約 \chi(G) = nを同時に満たす無向グラフのうちで,辺数が最大であるものはいかなるグラフであろうか.ただし, 2 \leq n \leq m.

特殊な m, nに対する答え

まず,特殊な m, nについて考えよう.

 m = 7, n = 2について考える*1.すると,この問題は「頂点数 7,染色数 2である無向グラフ G = (V, E)のうち,辺数最大なるグラフとはどのようなものか?」という問いになる.

染色数が 2であるから,グラフ Gの頂点集合 Vはちょうど 2個の独立集合への分割 S \in 2^{2^V}, S = \{S_1, S_2\}をもつはずである.さらに, |S_1| = x_1, |S_2| = x_2とおくと,制約を満たすグラフのうち辺数が最大となる Gについて,辺数は x_1, x_2のみによって決まる.まずはこのことを確認しよう.

*1:この m, nの組み合わせに対する問題は大学院の入学試験でも出題例がある.

続きを読む

WhiteHat Challenge 01 (2017/02/26) - Writeup

チーム「Harekaze」のメンバーとしてCTF「WhiteHat Challenge 01」に参加した.わずか1個ではあったものの初めてセキュリティの問題でフラグが取れたので,Writeupを書く.

[Mics 25] Mics001

準備

サーバに接続してフラグを取る問題.とりあえず問題文に示されたサーバに接続を試みた.

$ nc 103.237.98.32 3737
< Inject me if you can >
         --------------------
         \   ^__^
          \  (oo)\_______
             (__)\       )\/\
                 ||----w |
                 ||     ||

input name to check pass, ex:linh, trang...:  

cowsayとはなかなかに挑発的.どうやら名前となる文字列を入力すれば良いらしい.

続きを読む

情報処理技術者試験の選択肢の順序は人間が決定しているか?

背景と目的

定期試験や入学試験などの試験中,択一式の問題で解答に迷ったら,あなたはどうするだろうか.おそらく,答えがわからなくてもとりあえずどれか一つを選ぶのではないだろうか.一般的な方式の試験では,白紙のまま提出するよりもまぐれで当たる可能性を狙ってとりあえず何か選んでおくほうが合理的である.

それでは,まぐれ当たりを狙うべくどの選択肢を解答すべきであろうか.計算機によって,すべての問題に対して選択肢の順序が等確率で,しかも問題の間で独立に決定される場合は,どのように解答を決定しても,得点の期待値はランダムに決定した場合と変わらないだろう.一方で,選択肢の順序の決定にある傾向がある場合は,その傾向に合わせた解答の決定を行うことで得点の期待値を改善できると考えられる.例えば,「大学入試センター試験」の対策において,「迷ったら2番か3番だ」*1などの解答に迷った場合の「対策」が(時に冗談として)論じられることがある.これは,あらかじめ解答に迷った場合の行動を決めておくことで,正答できるか不確かな問題につまづいていたずらに時間を消費することを防ぐ意味のほか,「最初や最後の選択肢より中間の選択肢を正答として選びやすいのではないか」という,問題作成者の心理などに関する推測をも含んでいると考えられる.

同種の試験が繰り返し行われ,十分な量のデータが蓄積していれば,統計的手法によって選択肢の決定を人間が行っているかを推測できるだろう.この記事では,人間が「最初や最後の選択肢より中間の選択肢を正答として選びやすい」という仮定のもとで,「情報処理技術者試験」の択一式問題を対象に\chi^2検定を行い,選択肢の決定に偏りがあるかを推測する.

*1:私が高校生だったころ,社会科の先生にこう教わった.

続きを読む