SECCON 2015 Writeup
初めてのSECCON。某チームで参加しました。
CTF Writeup SECCON 2015¶
結果&感想¶
今回、チームsky3は、某チームに合流してSECCON2015に参加しました。
楽しかったです!!
ある程度人数がいると、閃きと気づきの総数が増えるので、単独では解けなかった問題が、チームの皆さんの手により、あれよあれよという間に解かれていきました。
あと相変わらず、メンバーの c@tさん, リリりん♪さんは、スゴかったです。
チーム名公表していいかわからないので、とりあえず伏せておきますが、ランキングは出場チーム上位3%に入っていることを申し添えておきます。
いちおう300点分獲得できたので、その問題について、writeup書きました。
チームメンバが解いた問題のwriteupも、了解が取れれば合わせて公開するやも。
Individual Elebin¶
問題
すべてのELFファイルを実行せよ
Individual_Elebin.zip
中身は、1.bin … 11.bin が入っている。
とりあえず定番のfileコマンド
$ file ./* ./1.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), statically linked, stripped ./10.bin: ELF 32-bit LSB executable, ARM, version 1, statically linked, stripped ./11.bin: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped ./2.bin: ELF 32-bit MSB executable, MC68HC11, version 1 (SYSV), statically linked, stripped ./3.bin: ELF 32-bit LSB executable, NEC v850, version 1 (SYSV), statically linked, stripped ./4.bin: ELF 32-bit MSB executable, Renesas M32R, version 1 (SYSV), statically linked, stripped ./5.bin: ELF 64-bit MSB executable, Renesas SH, version 1 (SYSV), statically linked, stripped ./6.bin: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), statically linked, stripped ./7.bin: ELF 32-bit LSB executable, Motorola RCE, version 1 (SYSV), statically linked, stripped ./8.bin: ELF 32-bit LSB executable, Axis cris, version 1 (SYSV), statically linked, stripped ./9.bin: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, stripped
どう見ても、CPUアーキテクチャ別のELFファイルです。本当にありがとうございました。
・・・がんばって実行するぞ!!
実行するための方法¶
以下の4つの方法で実行します。
そのまま普通に実行¶
1.bin だけは x86 なのでそのまま実行できますね。
$ ./1.bin SECCON{AaA
クロスコンパイル環境 gdb を使う¶
自分のPCのCPUアーキテクチャ以外は、クロスコンパイル環境を使って実行するのがよいでしょう。
ただし、1からコンパイルを始めると競技時間内に終わりません。
予め、コンパイル済みの環境を準備しておくしかありません。
そこで!!!1
kozosの坂井さんの力をお借りします。
cross-gcc4-20130826.zip をインストール済みのCentOS6.5イメージ (OVAフォーマット)
FreeBSDのVirtualBox用イメージを,OVAフォーマットにしたもの
ここの仮想環境を使わせて頂きます。
ちなみに坂井さんの著作はバイナリアン必見の良書揃いです!
ももいろテクノロジー 各種アーキテクチャのクロスコンパイラ環境を構築するも大変参考になります。
さて、坂井さんのCentOS6.5を起動して、クロスコンパイルの環境を確認してみます。
$ pwd /usr/local/cross-gcc4/bin $ ls *gdb arm-elf-gdb cris-elf-gdb m32c-elf-gdb mips16-elf-gdb powerpc-elf-gdb sh64-elf-gdb v850-elf-gdb avr-elf-gdb frv-elf-gdb m32r-elf-gdb mips-elf-gdb rl78-elf-gdb sh-elf-gdb bfin-elf-gdb h8300-elf-gdb microblaze-elf-gdb mn10300-elf-gdb rx-elf-gdb sparc-elf-gdb
いろんなCPU用に用意されているのがわかります。
CPUアーキテクチャの違うバイナリでも、staticリンクのバイナリであれば、各CPUアーキテクチャ用のgdbで実行できます。
gdb起動後は、
target sim load run
の順に入力して実行します。
$ ./arm-elf-gdb /tmp/Individual_Elebin/10.bin GNU gdb (GDB) 7.5.1 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /tmp/Individual_Elebin/10.bin...(no debugging symbols found)...done. (gdb) target sim Connected to the simulator. (gdb) load Loading section .text, size 0x848 vma 0x1400 Loading section .rodata, size 0xe4 vma 0x1c48 Loading section .data, size 0x4 vma 0x2000 Start address 0x1400 Transfer rate: 18816 bits in <1 sec. (gdb) run Starting program: /tmp/Individual_Elebin/10.bin 8a0d28f[Inferior 1 (process 42000) exited normally] (gdb) quit
ちょっと判りにくいかもしれませんが、8a0d28f が表示されてます。
クロスコンパイル環境 run を使う¶
ぶっちゃけ、実行だけならgdbより、こっちの方が楽です。
$ pwd /usr/local/cross-gcc4/bin $ ls *run arm-elf-run cr16-elf-run h8300-elf-run microblaze-elf-run mn10300-elf-run rx-elf-run sparc-elf-run avr-elf-run cris-elf-run m32c-elf-run mips16-elf-run powerpc-elf-run sh64-elf-run v850-elf-run bfin-elf-run frv-elf-run m32r-elf-run mips-elf-run rl78-elf-run sh-elf-run
$ ./v850-elf-run /tmp/Individual_Elebin/3.bin i $ ./m32r-elf-run /tmp/Individual_Elebin/4.bin N $ ./sh64-elf-run /tmp/Individual_Elebin/5.bin 12345678 $ ./sparc-elf-run /tmp/Individual_Elebin/6.bin 90abcdef $ ./cris-elf-run /tmp/Individual_Elebin/8.bin AW $ ./avr-elf-run /tmp/Individual_Elebin/9.bin 3a5d37a3 $ ./arm-elf-run /tmp/Individual_Elebin/10.bin 8a0d28f $ ./mips16-elf-run /tmp/Individual_Elebin/11.bin aAq}
2.bin と 7.binが実行できずに残ってしまいましたが、坂井さんが提供してくださっているFreeBSDの方に該当のCPUアーキテクチャのクロスコンパイル環境が入っています。
$ ./m6811-elf-run /tmp/Individual_Elebin/2.bin B $ ./mcore-elf-run /tmp/Individual_Elebin/7.bin BDFHJLNP
qemuを使う¶
qemuを使う方法もあります。
Ubuntu とか Debian とか Kali Linux で、以下実施してqemuインストール
# apt-get install qemu-user-static
/usr/bin 配下に qemu-[CPU arch]-static が出来るので、それを実行する。
例はこんな感じ。cpuのチップセット(?)を指定するのがコツ。
# ./qemu-cris-static -cpu help /tmp/Individual_Elebin/8.bin Available CPUs: crisv8 crisv9 crisv10 crisv11 crisv32 # ./qemu-cris-static -cpu crisv8 /tmp/Individual_Elebin/8.bin AW
答え¶
実行結果を全部くっつけるとフラグになります。
1.bin SECCON{AaA 2.bin B 3.bin i 4.bin N 5.bin 12345678 6.bin 90abcdef 7.bin BDFHJLNP 8.bin AW 9.bin 3a5d37a3 10.bin 8a0d28f 11.bin aAq}
SECCON{AaABiN1234567890abcdefBDFHJLNPAW3a5d37a38a0d28faAq}
Steganography2¶
問題
ファイルからflagをさがせ.
sunrise.zip
中身は、sunrize.pngという画像
まず、バイナリエディタでゆるーく見てみましょう!
ファイルの終端付近に、様子の変な領域が見えますね。
png画像の終端を表す 00 00 00 00 49 45 4E 44 AE 42 60 82 "IENDョB`" が見えるので、当然この変な領域も画像として出力されていなければいけないはずですが、画像に変な箇所は見られませんでした。綺麗な朝日です。
それで、「あ、実際の画像サイズより小さくなってるんじゃね?」と思いついて調べてみました。
pngの画像サイズは、イメージヘッダ(Image header、IHDR)という場所に書かれています。
参考:イメージヘッダ(Image header、IHDR)
http://www.setsuki.com/hsp/ext/chunk/IHDR.htm
具体的には、"IHDR"という文字が書かれた後4Byteが画像の幅を表し、その更に後の4byteが画像の高さを表しています。
画像の高さを修正したいので、00 00 0F C0 の所の数を適当に増やしてみます。
画像の下部にフラグが出てきました。
コメント