プロジェクト

全般

プロフィール

CTF Writeup SECCON 2015 » 履歴 » バージョン 1

kanata, 2025/04/13 15:10

1 1 kanata
# CTF Writeup SECCON 2015
2
3
{{toc}}
4
5
6
# 結果&感想
7
8
今回、チームsky3は、某チームに合流してSECCON2015に参加しました。
9
楽しかったです!!
10
ある程度人数がいると、閃きと気づきの総数が増えるので、単独では解けなかった問題が、チームの皆さんの手により、あれよあれよという間に解かれていきました。
11
12
あと相変わらず、メンバーの c@tさん, リリりん♪さんは、スゴかったです。
13
14
チーム名公表していいかわからないので、とりあえず伏せておきますが、ランキングは出場チーム上位3%に入っていることを申し添えておきます。
15
16
いちおう300点分獲得できたので、その問題について、writeup書きました。
17
チームメンバが解いた問題のwriteupも、了解が取れれば合わせて公開するやも。
18
19
# Individual Elebin
20
21
問題
22
23
すべてのELFファイルを実行せよ
24
Individual_Elebin.zip
25
26
中身は、1.bin … 11.bin が入っている。
27
28
----
29
30
とりあえず定番のfileコマンド
31
32
```
33
$ file ./*
34
./1.bin:  ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), statically linked, stripped
35
./10.bin: ELF 32-bit LSB executable, ARM, version 1, statically linked, stripped
36
./11.bin: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped
37
./2.bin:  ELF 32-bit MSB executable, MC68HC11, version 1 (SYSV), statically linked, stripped
38
./3.bin:  ELF 32-bit LSB executable, NEC v850, version 1 (SYSV), statically linked, stripped
39
./4.bin:  ELF 32-bit MSB executable, Renesas M32R, version 1 (SYSV), statically linked, stripped
40
./5.bin:  ELF 64-bit MSB executable, Renesas SH, version 1 (SYSV), statically linked, stripped
41
./6.bin:  ELF 32-bit MSB executable, SPARC, version 1 (SYSV), statically linked, stripped
42
./7.bin:  ELF 32-bit LSB executable, Motorola RCE, version 1 (SYSV), statically linked, stripped
43
./8.bin:  ELF 32-bit LSB executable, Axis cris, version 1 (SYSV), statically linked, stripped
44
./9.bin:  ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, stripped
45
```
46
47
どう見ても、CPUアーキテクチャ別のELFファイルです。本当にありがとうございました。
48
49
・・・がんばって実行するぞ!!
50
51
## 実行するための方法
52
53
以下の4つの方法で実行します。
54
55
### そのまま普通に実行
56
57
1.bin だけは x86 なのでそのまま実行できますね。
58
59
```
60
$ ./1.bin 
61
SECCON{AaA
62
```
63
64
### クロスコンパイル環境 gdb を使う
65
66
自分のPCのCPUアーキテクチャ以外は、クロスコンパイル環境を使って実行するのがよいでしょう。
67
ただし、1からコンパイルを始めると競技時間内に終わりません。
68
予め、コンパイル済みの環境を準備しておくしかありません。
69
70
**そこで!!!1**
71
72
[kozosの坂井さん](http://http://kozos.jp/)の力をお借りします。
73
74
[cross-gcc4-20130826.zip をインストール済みのCentOS6.5イメージ (OVAフォーマット)](http://kozos.jp/vmimage/burning-asm.html)
75
[FreeBSDのVirtualBox用イメージを,OVAフォーマットにしたもの](http://kozos.jp/vmimage/)
76
77
ここの仮想環境を使わせて頂きます。
78
ちなみに[坂井さんの著作](http://kozos.jp/books/index.html)はバイナリアン必見の良書揃いです!
79
80
[ももいろテクノロジー 各種アーキテクチャのクロスコンパイラ環境を構築する](http://inaz2.hatenablog.com/entry/2015/12/01/204201)も大変参考になります。
81
82
83
さて、坂井さんのCentOS6.5を起動して、クロスコンパイルの環境を確認してみます。
84
85
```
86
$ pwd
87
/usr/local/cross-gcc4/bin
88
$ ls *gdb
89
arm-elf-gdb   cris-elf-gdb   m32c-elf-gdb        mips16-elf-gdb   powerpc-elf-gdb  sh64-elf-gdb   v850-elf-gdb
90
avr-elf-gdb   frv-elf-gdb    m32r-elf-gdb        mips-elf-gdb     rl78-elf-gdb     sh-elf-gdb
91
bfin-elf-gdb  h8300-elf-gdb  microblaze-elf-gdb  mn10300-elf-gdb  rx-elf-gdb       sparc-elf-gdb
92
```
93
94
いろんなCPU用に用意されているのがわかります。
95
96
CPUアーキテクチャの違うバイナリでも、staticリンクのバイナリであれば、各CPUアーキテクチャ用のgdbで実行できます。
97
98
gdb起動後は、
99
100
```
101
target sim
102
load 
103
run
104
```
105
106
の順に入力して実行します。
107
108
```
109
$ ./arm-elf-gdb /tmp/Individual_Elebin/10.bin
110
GNU gdb (GDB) 7.5.1
111
Copyright (C) 2012 Free Software Foundation, Inc.
112
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
113
This is free software: you are free to change and redistribute it.
114
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
115
and "show warranty" for details.
116
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf".
117
For bug reporting instructions, please see:
118
<http://www.gnu.org/software/gdb/bugs/>...
119
Reading symbols from /tmp/Individual_Elebin/10.bin...(no debugging symbols found)...done.
120
(gdb) target sim
121
Connected to the simulator.
122
(gdb) load
123
Loading section .text, size 0x848 vma 0x1400
124
Loading section .rodata, size 0xe4 vma 0x1c48
125
Loading section .data, size 0x4 vma 0x2000
126
Start address 0x1400
127
Transfer rate: 18816 bits in <1 sec.
128
(gdb) run
129
Starting program: /tmp/Individual_Elebin/10.bin 
130
8a0d28f[Inferior 1 (process 42000) exited normally]
131
(gdb) quit
132
```
133
134
ちょっと判りにくいかもしれませんが、8a0d28f が表示されてます。
135
136
137
### クロスコンパイル環境 run を使う
138
139
ぶっちゃけ、実行だけならgdbより、こっちの方が楽です。
140
141
```
142
$ pwd
143
/usr/local/cross-gcc4/bin
144
$ ls *run
145
arm-elf-run   cr16-elf-run  h8300-elf-run  microblaze-elf-run  mn10300-elf-run  rx-elf-run    sparc-elf-run
146
avr-elf-run   cris-elf-run  m32c-elf-run   mips16-elf-run      powerpc-elf-run  sh64-elf-run  v850-elf-run
147
bfin-elf-run  frv-elf-run   m32r-elf-run   mips-elf-run        rl78-elf-run     sh-elf-run
148
```
149
150
```
151
$ ./v850-elf-run /tmp/Individual_Elebin/3.bin 
152
i
153
$ ./m32r-elf-run /tmp/Individual_Elebin/4.bin 
154
N
155
$ ./sh64-elf-run /tmp/Individual_Elebin/5.bin 
156
12345678
157
$ ./sparc-elf-run /tmp/Individual_Elebin/6.bin 
158
90abcdef
159
$ ./cris-elf-run /tmp/Individual_Elebin/8.bin 
160
AW
161
$ ./avr-elf-run /tmp/Individual_Elebin/9.bin 
162
3a5d37a3
163
$ ./arm-elf-run /tmp/Individual_Elebin/10.bin 
164
8a0d28f
165
$ ./mips16-elf-run /tmp/Individual_Elebin/11.bin 
166
aAq}
167
```
168
169
2.bin と 7.binが実行できずに残ってしまいましたが、坂井さんが提供してくださっているFreeBSDの方に該当のCPUアーキテクチャのクロスコンパイル環境が入っています。
170
171
```
172
$ ./m6811-elf-run /tmp/Individual_Elebin/2.bin 
173
B
174
$ ./mcore-elf-run /tmp/Individual_Elebin/7.bin 
175
BDFHJLNP
176
```
177
178
179
### qemuを使う
180
181
qemuを使う方法もあります。
182
Ubuntu とか Debian とか Kali Linux で、以下実施してqemuインストール
183
184
```
185
# apt-get install qemu-user-static
186
```
187
188
/usr/bin 配下に qemu-[CPU arch]-static が出来るので、それを実行する。
189
例はこんな感じ。cpuのチップセット(?)を指定するのがコツ。
190
191
```
192
# ./qemu-cris-static -cpu help /tmp/Individual_Elebin/8.bin 
193
Available CPUs:
194
  crisv8
195
  crisv9
196
  crisv10
197
  crisv11
198
  crisv32
199
# ./qemu-cris-static -cpu crisv8 /tmp/Individual_Elebin/8.bin 
200
AW
201
```
202
203
## 答え
204
205
実行結果を全部くっつけるとフラグになります。
206
207
```
208
 1.bin	SECCON{AaA
209
 2.bin	B
210
 3.bin	i
211
 4.bin	N
212
 5.bin	12345678
213
 6.bin	90abcdef
214
 7.bin	BDFHJLNP
215
 8.bin	AW
216
 9.bin	3a5d37a3
217
10.bin	8a0d28f
218
11.bin	aAq}
219
```
220
221
SECCON{AaABiN1234567890abcdefBDFHJLNPAW3a5d37a38a0d28faAq}
222
223
224
225
# Steganography2
226
227
問題
228
229
ファイルからflagをさがせ.
230
sunrise.zip
231
232
中身は、sunrize.pngという画像
233
234
----
235
236
まず、バイナリエディタでゆるーく見てみましょう!
237
238
![20151210_sunrize1.png](20151210_sunrize1.png)
239
240
ファイルの終端付近に、様子の変な領域が見えますね。
241
png画像の終端を表す 00 00 00 00 49 45 4E 44 AE 42 60 82 "IENDョB`" が見えるので、当然この変な領域も画像として出力されていなければいけないはずですが、画像に変な箇所は見られませんでした。綺麗な朝日です。
242
243
それで、「あ、実際の画像サイズより小さくなってるんじゃね?」と思いついて調べてみました。
244
pngの画像サイズは、イメージヘッダ(Image header、IHDR)という場所に書かれています。
245
246
参考:イメージヘッダ(Image header、IHDR)
247
http://www.setsuki.com/hsp/ext/chunk/IHDR.htm
248
249
具体的には、"IHDR"という文字が書かれた後4Byteが画像の幅を表し、その更に後の4byteが画像の高さを表しています。
250
251
![20151210_sunrize2.png](20151210_sunrize2.png)
252
253
画像の高さを修正したいので、00 00 0F C0 の所の数を適当に増やしてみます。
254
画像の下部にフラグが出てきました。
255
256
![20151210_sunrize3.jpg](20151210_sunrize3.jpg)