チームKogCoderとして参加し、3766pt取って23位だった
かつてない好成績なのでちょっと嬉しい
Forensics
0110
I found these files in my friend's system and I think that there is some useful information hidden in it. Can you help in finding it?
- 解法
画像が2枚渡されたのでXORを取ったらいいかんじのQRコードになった - flag
bsides_delhi{X0r1ng_tw0_f1l3s_g1v3s_7h3_r3sul7}
Business Planning Group
My opponents have planned to destroy my business. They are stealing my business secrets with the help of a spy by storing them in the images. I have found one such image. I hope you can find the secret.
- 解法
うさみみハリケーンに投げるとpngの後ろにbpgという形式のファイルが付いてると言われる
調べてみると、どうやら画像形式の一種らしい
https://webencoder.libbpg.org/show.html を使って開いてみるとbase64っぽい文字列が書いてある画像が出てきた
試しにbase64デコーダに投げたらflagだった - flag
bsides_delhi{BPG_i5_b3tt3r_7h4n_JPG}
Web
Weird Calculator
- 解法
渡されたソースコードを読むと、サーバーはnode.jsで動いてるみたい
また、計算処理はevalで行なわれていることも分かる
そのため、容易にInjectionできることに加え、"aaa" + "bbb"
のように、strなどの数値でない型の計算もできる
index.jsの34行目に秘密があるらしいので、まずサーバー側のindex.jsを取得する
node.jsのファイル読み込みはfs.readFileSync(filename, encode)
でできるので、value1にvar fs = require('fs'); fs.readFileSync('index.js', 'utf8')
、value2に""
、Operationに+
を入れてCalculateすれば取得できる
取得した内容からフラグの断片が手に入る
他の断片に関する手がかりが欲しいので、同ディレクトリに存在するファイルの一覧を取得する
ファイルの一覧はvar fs = require('fs'); fs.readDirSync('./')
で取得できる- Filelist
Output: flag.txt,index.js,node_modules,package-lock.json,package.json,views
すると、flag.txtというあからさまなファイルがある
value1をvar fs = require('fs'); fs.readFileSync('flag.txt', 'utf8')
に変更してflag.txtを読む - flag.txt
Output: here's your second part... nd_sh3ll1ng_by_the_Cs1de}
1stと2ndを合わせればflag
- Filelist
- flag
bsides_delhi{Prototype_nd_sh3ll1ng_by_the_Cs1de}
Reversing
reloop
- 解法
正しいパスワードを入力するとファイルが出力バイナリが渡される
パスワードは脳死angrで出せる
出てきたファイルはtar.gzなので展開するとまた同じようなバイナリファイルが出てくる
10回くらい繰り返したところで嫌になってきたので脳死angr自動化スクリプトを書いた
311回同じことを繰り返すとflagを出力するバイナリファイルが手に入る - flag
bsides_delhi{W3ll_tH4t_was_m0r3_of_A_PPC_chall3nge}
Gbrom
-
解法
ゲームボーイのROMファイルが渡される
渡されたROMはmGBAなどのエミュに投げれば普通に起動する
とりあえず近くの民家に入るとおっさんがいる
話しかけるとEnter the cave you might get what you seek
Flip the "variable" to enterと言われる
洞窟に入るといいことがあるらしいので入ろうとすると、謎の振動がおきて入れない
さっきのおっさん曰く"variable"をflipしろとのことなので、game.mapからvariableで検索をかけると_script_variablesというのが0xC528に存在することが分かった
なので、メモリエディタで0xC528番地を1にしたら洞窟に入れるようになった
洞窟の中にはおっさんが5人いてそれぞれアセンブラに関する問題を出してくる
また、矢印を調べると、flagの形式はbsides_delhi{ans1..ans2..ans3..ans4..ans5}であると分かる
あとはニーモニックをggりながら問題を解くだけ- Questions & Answers
-
- question
mov eax, 0x42 mov ebx, 0x56 xor eax, ebx
eax?
- answer
x86のニーモニック
0x42と0x56の排他的論理和なので 0x19
- question
-
- question
mov r0, #6 mov r3, r0, LSL#3 orr r2, r3, r0
r2?
- answer
armのニーモニック
0x6と0x6の左3シフトとの論理和なので 0x36
- question
-
- question
fim p0 0x53 ld r0 xch r1
p0?
- answer
おそらくIntel 4004のニーモニック
0x53の上位4bitを下位4bitに複製する処理なので 0x55
- question
-
- question
LDA #43 ASL A ORA #19
A?
- answer
おそらくMC6800のニーモニック
0x43を左シフトした値と0x19の論理和なので 0x9f
- question
-
- question
Address modified to enter thr cave? - answer
洞窟に入るために弄ったメモリ番地を問われているので 0xc528
- question
-
- Questions & Answers
- flag
bsides_delhi{14_36_55_9f_c528}
Misc
The Legend Part 2
- 解法
strings ubuntu_12.04.vdi | grep bsides_delhi{
こんな嘘みたいな解法で解けてしまった… - flag
bsides_delhi{w0w_fin4LLy_Y0u_G0t_iT!!}
ちなみに最速回答したチームだったみたい
感想
簡単な問題と難しい問題の差がかなり大きいCTFだった
一応難しめな問題もいくつか解けたので楽しかった