Web、サーバ、ソフトウェア、バグ・脆弱性 などの情報を何人かで集まって書いていく IT/Web情報系ブログ

そろそろ場阿忍愚CTFについて一言いっとくか

投稿日:   最終更新日:2017/01/15  投稿者:nk.

初めに断っておきますが、ぼくはwrite upは載せません。
当初ここまでやるとは思ってなかったのでいろいろと残ってない&単純に解説を書くのがめんどくさいので。
そういうのはプロニートのxx2zzに任せます
ただ、どうやら検索をかけて来てくれている人がいるようなので何かしら残しておこうという意識です。

さてそもそもこの場阿忍愚CTFの存在を知ったのはxx2zzに紹介されたからなのですが、いろいろとCTFの噂は聞いていたもののCTFなんて自分には向いてないと思っていました。
というのも「どうせ、変態たち(いい意味で)がド変態な問題(いい意味で)を解いてんでしょ」という認識で、気軽に参加できるものではないと思っていたからです。多くはチーム制のようですし速さを競う面もあるようなので、じっくり腰を据えて「とりあえずバイナリエディタで眺めるか」だとか「とりあえずファイルのフォーマット調べるか」なんてことをしてどうにかなる世界ではないという認識でした。つまりそもそも知識が足りてないのは片手落ちだから参加しても仕方ないと思っていました。

ただ、もうずいぶんと前の話ですがGIFのええ感じのパーサがないからって自分でPerlのモジュール組んだり、Flashのローカルファイル(.sol)のええ感じのパーサがないからって仕様書とにらめっこしてPerlでモジュール組んだりということはしていました。ApacheのAPIの使い方が本を読んでもよくわからんからと結局Apacheのソースを追ってみたりもしていました。そういう点では、CTFに対する基礎体力?はあったのでしょう。

しかしどうせ負けるだろうし、めちゃくちゃ難しい問題だと1問も解けずに終わってつまんねーだろーな、ということでCTF自体は敬遠していました。

とはいえ名前からして”何かおかしい”CTFを紹介され、問題は登録しないと見れないうえにスコアを見ると「芸術」とかあるわけです。これは見てみるしかないでしょう。ということで口に出すのも憚れるような適当なIDで登録してとりあえず全体を眺めたわけです。
そしたら先入観にあったようなお堅く淫靡な(言い過ぎか?)ものとは違って、何やら楽しげ。そもそも問題文が程よくキマっちゃってる。
最初に取り掛かったのは「芸術」の「ワットイズディス?」でした。てっきりJPEGのコメント領域に何か仕込まれているのかと思いきや、書かれている読みにくい漢字そのものが答えだったという衝撃。そして詰将棋まである。なんじゃこれ。とやってくうちに最終的にド変態になっていました。
おそらくぼくは運営側の意図にまんまと引っかかった人間なのでしょう。

ここでCTFという企画の機能を考えてみますと、ざっくり言えば「セキュリティを考えさせよう」ということになろうかと思います。とはいえ、「セキュリティを考えさせる」といっても「誰に?」というところがポイントになろうかと思います。
ぼくがCTFに持っていた偏見のように、一般向けではない「なんかすごい人たちの御遊び」という側面ももちろんあるでしょう。しかし、ぼくがそうだったように潜在的にそういうスキルはあるけれどCTFはやらないという人も多くいるかと思います。自己弁護してるようで気持ち悪いですが、今回の場阿忍愚CTFはそういった層にも影響を与えうる、良い企画だったと思います。

特に「芸術」枠は良かったと思います。賛否両論はあるようですが。(尤も、「賛」は僕ぐらいでしょうね)
トップランカーも苦戦しているけれど専門知識は必要ではなく、一種の閃きやとりあえず手を動かす(IMEパッドや漢字辞典を参照して)現場力といいますか、泥臭さが求められているわけです。これなら上位に食い込めるかもしれない、という一種の救済措置になっていたあたりが「初心者向け」を標榜するだけあり、良い点だったと言えるでしょう。歴戦の猛者たちからすれば雑魚に抜かれるのでたまったものじゃないと思いますが。

一部の「すごい人」を「よりすごく」することも大事でしょう。いわゆるエリート教育ですね。
ただ、初心者層を特にメインターゲットとして全体的なレベルを向上させるという目的の企画があってもよいのではないでしょうか。
すごい人をよりすごくするような企画はすでにたくさんあるようですし、あえて「ユルい」企画を持ってくるのは必要な「兵法術」ではないでしょうか。

というわけで、総括としては「次回またこういう感じのユルくてオモロいCTFがあれば参加したい」ということになります。本業(プロ居眠り士)との兼ね合いもあるので必ず参加できるとは言い切れないですが。
以上です。楽しかった。

スポンサーリンク

2016年02月16日 追記

2016年02月16日 追記
唯一ファイルが残ってた(たまたま消し忘れてた)ので、count number of flag substringだけソースを置いておく。
最初のハッシュ部分とflag={afまでは手動で調べた。

use LWP::Simple q/get/;

my %txts = qw{
	a	8
	d	9
	e	4
	f	7
	g	2
	h	3
	i	7
	j	2
	k	4
	n	6
	o	1
	r	8
	s	8
	u	3
	x	5
	_	6
};

my $txt = "flag={af";
my $flag = 1;

print check(get("http://210.146.64.36:30840/count_number_of_flag_substring/?str=".$txt."&count=count"));

while(nokori(\%txts) && $flag){
	$flag = 0;
	$txts{$_} and print 'check: ',$txt,$_,$/ and check(get("http://210.146.64.36:30840/count_number_of_flag_substring/?str=".$txt.$_."&count=count")) and ++$flag and $txt .= $_ and ($txt{$_}-- xor last) for keys %txts;
	print $txt,$/;
}
<>;

sub nokori{
	my $obj = shift;
	my $ret = 0;
	$ret += $obj->{$_} for keys %{$obj};
	return $ret;
}

sub check{
	my $txt = shift;
	return substr($txt,index($txt,'</p>') - 1, 1) - 0;
}

解説会でのdoubtful filesの「exeファイルを覗くと出てくる怪しい文字列」について

2016年02月16日 追記
自己解凍形式のEXEファイルをバイナリエディタで開くと見える、アドレス2FC00からが実際のRARです。
「怪しい文字列」というのは、それ以降に出てくるUnicode文字列の「Zone Identifier」のことです。紛らわしかったですね。
これらは実際に解凍しても表面的にはファイルに出てこない(直前のMsgBoxとかはほぼそのまま出てきているのに)という点や、7.infと8.vbsのZone Identifier以降が目grep(目diff)で他と異なっている点がヒントとなりました。

calculation

2016年02月16日 追記
普段はWindowsなのでコードが残っていることを忘れていた。
馬鹿正直(?)に1万回計算させた人は少ないみたいなので、Perlコードを載せておく。
インターバルがあれば方針も変えたが、1万回やそこらだと違うことをしていたらすぐなので脳筋プレイでよかろう。
やってることは単純で、入力区切りを「 = 」に変え、その区切りを削除してevalしたあとにintをかけている。(小数には問題プログラムのほうが対応していなかったため、intをかけた)
また、IPC::Open2という同様の双方向通信ができるモジュールもあったのだが、こちらはバッファサイズの関係で使えなかった。

#!/usr/bin/perl

use Expect;
$exp = Expect->spawn('./121-calculation');
$\ = $/;
$/ = " = ";
while($txt = <$exp>){
#	print $txt;
	if($txt =~ /[\n\r]/){
		$txt = substr($txt,index($txt, "\n"));
	}
	my $calc = substr($txt,0,index($txt," = "));
	my $ret = int(eval($calc));
	print $txt,$ret;
	print $exp $ret;
}

- writeup, 感想

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事