ADCTF2014 [09] qrgarden


遂にQRコードの波がADCTFにも!!!

Read a lot, and the flag begins with "ADCTF_".

qrgarden.png

 

QRコードだらけwww

100×100のQRを、ひとまず片っ端から読むだけ

pythonにはqrcodeってのがあるはずなんだけど、Windowsの俺にそんな便利なものは無かったorz

コードが汚いので公開はしませんw

 

どちらにせよ、ADCTF_が出るまで読み続けた。

結果はこちらに(特に見る価値はない)

result_qrgarden.7z

(52, 78)の位置に発見

 

FLAG: ADCTF_re4d1n9_Qrc0de_15_FuN

ADCTF2014 [08] rotate


今日は問題文はございません

以下のファイルだけー

rotate.zip

エンコードに用いられたコードと、flag.jpgがエンコードされたflag.jpg.encが含まれているzipファイルが渡されます。

 

コードを見ると、やっていることは回転行列そのものを用いてますね

だったら、その逆行列にかけてやれば良いことなのだが、生憎何度の回転をかけたのかが分かりません。

とは言っても、keyは整数限定なので360回1度ずつ回すだけで全てです。

 

じゃあブルートフォースで良いよね?

その結果、keyは123°であることが分かりました。

solve_rotate.py

上のプログラムを用いて、『solve_rotate.py decode flag.jpg 123』で走ります。

 

・・・うーん

何この変な絵

flag

 

FLAG: ADCTF_TR0t4T3_f4C3

ADCTF2014 [07] reader


Read 10 times.
nc adctf2014.katsudon.org 43010

今日は連続してバーコードを読み取る問題のようですね

 

ひとまず送られてくるバーを数値に置き換えましょう

『▌』⇒10 『█』⇒10 『▐』⇒01 『 』⇒0

一つ目に来たコードはこんな感じ

▌▌██▐▐ █ ▌█ ▐▐▌▌█ █ ▌▐▐▐ ▐▌▌█▐ ▐▌█ ▌█▐▐ ▐▌▐▌▌█ ▌▐▐ ▐ ▌█ █▐▐▐▐█▌▌
101011110 101001100 101100010 110101100 110010010 101000110 101101000 110110010 110101000 110011010 110010010 100010010 110011010 1010111101

スタートコードが101011110、ストップコードが1010111101のバーコードを調べると・・・

ありました!Code93です

 

対応表と見比べて、実装しましたー

solve_reader.py

実行して待ってれば、10回バーコードを読んでくれて、そのまま最後にフラグが投げられてきます

 

FLAG: ADCTF_4R3_y0U_B4rC0d3_R34D3r

ADCTF2014 [06] paths


うげっ

There are many paths, and search for shortest path from start to goal.

(to, cost)

paths.py

グラフですかー

 

僕は分からないので、ネットの海に落ちてたダイクストラ法の実装をそのまま使いますわ

solve_paths.py
Dijkstra.py

solve_paths.pyを実行すれば最短のルートが算出され、フラグが出てきます

今回はちょっとサボりwriteupでしたw

 

FLAG: ADCTF_G0_go_5hOr7E57_PaTh

ADCTF2014 [05] shooting


助けてJSおじさーん

今回のCTFには、チーム名tuat_mccで登録しているのですが、私ShiftCropsしかやってませんwww

チームメイトのicchyは別垢取ってるし、JSおじさんことモンジサンは不参加です

なので、結局助けを読んでも誰も来てくれないのでした。

 

さてさて、JSのシューティングゲームですね

一回で10000点入るようにしたり、ステージの条件分岐とか書き換えても出来ない。

どうしようかなぁ

・・・あれ、これって弾が当たっても死ななきゃ良いだけじゃない?

 var l = enchant.Class.create(j, {
 initialize: function(e, t) {
  j.call(this, e, t, Math.PI);
  this.addEventListener($UPcs4hr8oKgbbqAesfT(1), function() {
   //(player.within(this, 8)) ? (game.end()) : 0;
  })
 }
})

最後のところで死亡判定をしているようなので、上のようにコメントアウト
これで無敵だぜ!!

shootingしにましぇん

 

FLAG: ADCTF_1mP05518L3_STG

 

ADCTF2014 [04] easyone


reversing来ましたねー

あんまし得意ではないんですよ(汗

This is very easy crackme.

easyone

どうやら64bitのelfのようですね

objdumpで見てみると、Flagを生成してるらしき部分がscanfの後に続きます

0x0000000000400625 <+56>: callq 0x4004f0 <__isoc99_scanf@plt>
0x000000000040062a <+61>: movb $0x37,-0x2a(%rbp)
0x000000000040062e <+65>: movb $0x33,-0x1e(%rbp)
0x0000000000400632 <+69>: movb $0x31,-0x25(%rbp)
0x0000000000400636 <+73>: movb $0x48,-0x29(%rbp)
0x000000000040063a <+77>: movb $0x37,-0x22(%rbp)
0x000000000040063e <+81>: movb $0x4f,-0x18(%rbp)
0x0000000000400642 <+85>: movb $0x35,-0x1c(%rbp)

以下略

 

生成が終わったところでブレイクポイントを仕掛け、そのままスタックを覗いてやればいい感じですね

(gdb) b *0x4006a2
Breakpoint 1 at 0x4006a2
(gdb) r
Starting program: /home/yutaro/programs/CTF/adctf/easyone
password: aaaa

Breakpoint 1, 0x00000000004006a2 in main ()
(gdb) x/s $rbp-0x30
0x7fffffffded0: "ADCTF_7H15_15_7oO_345y_FOR_M3"

 

FLAG: ADCTF_7H15_15_7oO_345y_FOR_M3

ADCTF2014 [03] listen


今回は壊れたwavファイルが提供されています。

まぁ皆さん、まずはヘキサエディタで開きますよね?

僕もそうです

すると・・・

listen赤く色づけしたところがどうも怪しいです。

ひとまず、ヘッダの構成をみてみませう

0x1C-0x1f: 44100 byte/s

0x22-0x24: 16bit/sampleすなわち2byte/sample

0x18-0x1b: サンプリングレート 1Hz?????

やっぱりサンプリングレート変です

 

44100/2=22050Hzより、本来の値は0x5622であるべきです

なのでそのように書き換えて完成です!(エンディアンに注意)

後は聞くだけー

 

FLAG: ADCTF_SOUNDS_GOOD

ADCTF2014 [02] alert man


こんにちは

二日目がやってまいりました。

本日はweb問題のようですね

Can you alert('XSS')?

alert man

どうやら、打った文字をtweetして、下に列挙するようですね

 

さて、解法です

1.正攻法
<img src=x onerror=alert(/XSS/.source)>
xという画像を読み込もうとしても当然のエラー故、XSSのアラートが発動

alert man

 

2.JS読む
'_'(アンダースコア)っていう変数になにやら文字列を突っ込んでいるようなので、consoleを開いてeval(_)
すると、こんな関数が

f=0;
cs=[5010175210,5010175222,5010175227,5010175166,5010175224,5010175218,5010175231,5010175225,5010175166,5010175223,5010175213,5010175140,5010175166,5010175199,5010175194,5010175197,5010175178,5010175192,5010175169,5010175191,5010175169,5010175146,5010175187,5010175169,5010175146,5010175218,5010175149,5010175180,5010175210,5010175169,5010175187,5010175146,5010175216];
t='';
for(i=0;i<cs.length;i++){
 t+=String.fromCharCode(cs[i]^0x123456789+123456789)
}

主要部分を摘出しました。

まあともかく、これをそのままconsoleにでも突っ込めばおk

 

FLAG:ADCTF_I_4M_4l3Rt_M4n

ADCTF2014 [01] warmup


一年半ぶりの書き込みとなりました。

お久しぶりです。

さて、今日から始まります Advent Calender CTFに挑戦します。

拙いWriteupになるとは思いますが、25日間頑張っていこうと思いますー

 

早速初日の問題です。

Today is warmup.

0x41444354465f57334c43304d335f37305f414443374632303134

これあれだ、文字列16進表記にしただけだ

 

ってなわけで

Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> '41444354465f57334c43304d335f37305f414443374632303134'.decode('hex')
'ADCTF_W3LC0M3_70_ADC7F2014'

でけた

 

FLAG: ADCTF_W3LC0M3_70_ADC7F2014