kubo39's blog

ただの雑記です。

SECCON CTF 2015 write up

pingというチームで参戦しました。自分はbinaryの300しか解けず。。

Reverse-Engineering Android APK 1

apkの中身を見る必要がありそうな問題。

apktools入れたりしていじる。

http://ibotpeaches.github.io/Apktool/install/

( ՞ਊ ՞) :~/dev/ctf/rps $ ./apktool d rps.apk
I: Using Apktool 2.0.2 on rps.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /home/kubo39/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

なんかいろいろ /rps 以下にできた。

lib/libcalc.so がなんか怪しそう?

https://github.com/pxb1988/dex2jar

d2j-dex2jar: Convert .dex file to .class files (zipped as jar)

適当にダウンロードしてきて全.shに +xして実行。

$ sudo ./dex2jar-2.0/d2j-dex2jar.sh classes.dex rps.apk --force

コンパイラ(jd-gui)がなんか動いてくれないのでもう一人のバイナリアンに任せて解いてもらった。

Exec dmesg

$ file core-current.iso
core-current.iso: # ISO 9660 CD-ROM filesystem data 'TC-Core' (bootable)
$ qemu-system-x86_64 -cdrom core-current.iso

dmesgとかいってるんでdmesgみるか。

$ dmesg
dmsg: applet not found
$which dmesg
/bin/dmesg
$ls -ll /bin/dmesg
/bin/dmesg -> busybox

BusyBoxかー。

これは dmesg が exec >/dev/kmsg 2&>1 であることを知ってるかの知識問題。

cat /dev/kmsg | grep SECCON でてきとーにやったらフラグGET。

どうでもいいが busybox のシェルはashを使っているらしい。

Individual Elebin

最初と最後のバイナリはstringsでいける。

1.bin は FreeBSDバイナリで SECCON{AaA

11.bin は eAaAq} とあったので、まあこれだろう。

2~10の文字列をつなげるかんじ?

雑に qemu-arm-static とかかけてみたけど実行できず。

そういえばgdbをビルドしたときの成果物にはエミュレートして実行するするための *-run が生成されるのでそれ使ってやってみる。

おもむろにgdbのクロスコンパイルをはじめる.

wget http://ftp.gnu.org/gnu/gdb/gdb-7.7.1.tar.bz2

以下に各binary向けのクロスコンパイルの手順をのせておく。


2.bin

$ ./configure --target=m6811-elf --prefix="$HOME/opt/cross"
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/m6811-elf-run 2.bin
B( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

2.bin => B


3.bin

( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/v850-nec-elf-run ./3.bin
i( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

3.bin => i


4.bin

( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/m32r-renesas-elf-run 4.bin
N( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

4.bin => N


5.bin (Renesas SH)

$ ./configure --target=sh-elf --prefix="$HOME/opt/cross"

( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/sh-elf-run  5.bin
program stopped with signal 7.
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

BUS Error. アライメントっぽい?

これgdbとかじゃ無理なのかな.

これ64bitじゃん...

$ ./configure --target=sh64-elf --prefix="$HOME/opt/cross"

( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/sh64-elf-run  5.bin
12345678( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

5.bin => 12345678


6.bin

$ ./configure --target=sparc-elf --prefix="$HOME/opt/cross"

( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/sparc-elf-run 6.bin
90abcdef( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

6.bin => 90abcdef


7.bin (Motorola RCE)

これアーキテクチャよくわからなかったので --target=mcore.. にしたりいろいろためしたけどダメ。。


8.bin

$ ./configure --target=cris-axis-elf --prefix="$HOME/opt/cross"

( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/cris-axis-elf-run 8.bin
AW( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

8.bin => AW


9.bin

$ ./configure --target=avr-elf --prefix="$HOME/opt/cross"

( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/avr-elf-run 9.bin
3a5d37a3( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

9.bin => 3a5d37a3


10.bin

$ ./configure --target=arm-elf --prefix="$HOME/opt/cross"

( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/arm-elf-run 10.bin
8a0d28f( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $

10.bin => 8a0d28f


SECCON{AaABiN1234567890abcdef AW3a5d37a38a0d28feAaAq} まではいけたんだけどな。

5.binが64bitじゃんてのきづくのが遅くて sh-elf-runとかでBUS ERRORになってなんでじゃー、というので時間浪費したのがでかかった。。まあ7.bin解けなかったわけですが。。

解答みるとやりかたは正しかったぽいので悔いが残る。

雑感とか流れとか

CTFは2回目だったけど、前回はだいぶだれてたというかtirviaくらいしか挑戦してないので、まあ今回はじめてみたいなものだった。

流れとしては、当日うちの会議室に集まって、自分はbinaryのapkの問題をもう一人のバイナリアンととりかかった。途中でExec dmesgが出てきたので自分はそっちを解いた。

途中チャンピオンシップで広島の優勝見届けたりごちうさとアスタリスク観たしたあと、飲みに行くぞ!となったので再度合流して、飲みから帰ってそのまま終了まで Individual Elebin やってみたけど、まあダメ。。みたいなかんじ。

集まってごにょごにょなんかやるのは楽しいのでまたやりたいですね。