Submit Search
Upload
SECCON Beginners CTF 2018 write-up crackme
•
0 likes
•
66 views
smicle
Follow
https://2017.seccon.jp/news/seccon-beginners-ctf-2018.html
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 73
Download now
Download to read offline
Recommended
nadoka さんの m17n 対応のベストプラクティス
nadoka さんの m17n 対応のベストプラクティス
Kazuhiro Nishiyama
ret2dl resolve
ret2dl resolve
sounakano
Stack pivot
Stack pivot
sounakano
RFC7589(NETCONF Protocol over TLS)の勉強資料
RFC7589(NETCONF Protocol over TLS)の勉強資料
Tetsuya Hasegawa
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
inaz2
Return Oriented Programming
Return Oriented Programming
sounakano
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
Masaru Oki
続・SECDマシン
続・SECDマシン
t-sin
Recommended
nadoka さんの m17n 対応のベストプラクティス
nadoka さんの m17n 対応のベストプラクティス
Kazuhiro Nishiyama
ret2dl resolve
ret2dl resolve
sounakano
Stack pivot
Stack pivot
sounakano
RFC7589(NETCONF Protocol over TLS)の勉強資料
RFC7589(NETCONF Protocol over TLS)の勉強資料
Tetsuya Hasegawa
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
inaz2
Return Oriented Programming
Return Oriented Programming
sounakano
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
Masaru Oki
続・SECDマシン
続・SECDマシン
t-sin
Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門
Shinya Takamaeda-Y
Rust-DPDK
Rust-DPDK
Masaru Oki
言語処理系入門10
言語処理系入門10
Kenta Hattori
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
10分で作るクラスライブラリ
10分で作るクラスライブラリ
_norin_
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
inaz2
Inside casper
Inside casper
zigen
ret2libc
ret2libc
sounakano
katagaitaictf7_hw_ysk
katagaitaictf7_hw_ysk
ysk256
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
法政大学情報科学部 2012年度コンピュータネットワーク-第12回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第12回授業-Web公開用
Ruo Ando
ELFの動的リンク
ELFの動的リンク
7shi
Windowsのパケットモニタ作成
Windowsのパケットモニタ作成
Shinichi Hirauchi
Docker入門 OSC 2018 Tokyo/Spring
Docker入門 OSC 2018 Tokyo/Spring
cyberblack28 Ichikawa
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119
metamd
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
slankdev
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテル
tnoda
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
直久 住川
Trema day 1
Trema day 1
ykuga
LLILUM and TinyCLR OS
LLILUM and TinyCLR OS
Atomu Hidaka
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
More Related Content
What's hot
Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門
Shinya Takamaeda-Y
Rust-DPDK
Rust-DPDK
Masaru Oki
言語処理系入門10
言語処理系入門10
Kenta Hattori
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
10分で作るクラスライブラリ
10分で作るクラスライブラリ
_norin_
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
inaz2
Inside casper
Inside casper
zigen
ret2libc
ret2libc
sounakano
katagaitaictf7_hw_ysk
katagaitaictf7_hw_ysk
ysk256
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
法政大学情報科学部 2012年度コンピュータネットワーク-第12回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第12回授業-Web公開用
Ruo Ando
What's hot
(11)
Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門
Rust-DPDK
Rust-DPDK
言語処理系入門10
言語処理系入門10
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
10分で作るクラスライブラリ
10分で作るクラスライブラリ
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Inside casper
Inside casper
ret2libc
ret2libc
katagaitaictf7_hw_ysk
katagaitaictf7_hw_ysk
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
法政大学情報科学部 2012年度コンピュータネットワーク-第12回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第12回授業-Web公開用
Similar to SECCON Beginners CTF 2018 write-up crackme
ELFの動的リンク
ELFの動的リンク
7shi
Windowsのパケットモニタ作成
Windowsのパケットモニタ作成
Shinichi Hirauchi
Docker入門 OSC 2018 Tokyo/Spring
Docker入門 OSC 2018 Tokyo/Spring
cyberblack28 Ichikawa
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119
metamd
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
slankdev
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテル
tnoda
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
直久 住川
Trema day 1
Trema day 1
ykuga
LLILUM and TinyCLR OS
LLILUM and TinyCLR OS
Atomu Hidaka
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
VPP事始め
VPP事始め
npsg
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
4章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 2
mao999
ニコニコを支える Erlang / Elixir
ニコニコを支える Erlang / Elixir
kojingharang
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Yoshiiro Ueno
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
Lxc cf201207-presen
Lxc cf201207-presen
Kouhei Maeda
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
Similar to SECCON Beginners CTF 2018 write-up crackme
(20)
ELFの動的リンク
ELFの動的リンク
Windowsのパケットモニタ作成
Windowsのパケットモニタ作成
Docker入門 OSC 2018 Tokyo/Spring
Docker入門 OSC 2018 Tokyo/Spring
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテル
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
Trema day 1
Trema day 1
LLILUM and TinyCLR OS
LLILUM and TinyCLR OS
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
VPP事始め
VPP事始め
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
4章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 2
ニコニコを支える Erlang / Elixir
ニコニコを支える Erlang / Elixir
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
Lxc cf201207-presen
Lxc cf201207-presen
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
SECCON Beginners CTF 2018 write-up crackme
1.
LightningTalk 2018年08月29日に投稿 4views SECCON Beginners
CTF 2018 write-up crackme 1
2.
LightningTalk [Reversing] crackme crackme という拡張子のないファイルが配られる 2
3.
LightningTalk とりあえず何のファイルか確認 3
4.
LightningTalk 4 64bit ELFファイルでした
5.
LightningTalk とりあえず objdump してみる 5
6.
LightningTalk 6
7.
LightningTalk 7 c言語をコンパイルしたのではなく 直接アセンブリを書いたっぽい
8.
LightningTalk イマイチよくわからないので ida で開けばわかるはず 8
9.
LightningTalk 9
10.
LightningTalk 10 ここにたどり着けば flag
がわかるので、 上から一つづつ命令を見ていく
11.
LightningTalk 11
12.
LightningTalk フラグレジスタの値が 0 なら
jmp する 12
13.
LightningTalk cmp は第一オペランドと第二オペランドの引き算を実行し、 その結果に基づきフラグをセットします 13
14.
LightningTalk [rbp+var_4] - 2
= 0 14
15.
LightningTalk main関数の引数は呼び出し元で次のように レジスタに設定されます argc -> edi argv
-> rsi 15
16.
LightningTalk argc が 2
なら jmp するので、引数を 1つ渡せば良い 16
17.
LightningTalk 17
18.
LightningTalk フラグレジスタの値が 0 以外なら
jmp する、 要するにフラグレジスタが 0 なら flag が出てくる 18
19.
LightningTalk test は 2つのオペランドのAND計算を実行し、 その結果に基づきフラグをセットします 19
20.
LightningTalk eax & eax
= 0 20
21.
LightningTalk つまり eax の値が
0 ならば flag が出てくる 21
22.
LightningTalk 0x601050 を eax
に mov しているので 0x601050 が 0 ならば flag が出てくる 22
23.
LightningTalk 次に 2つの call
命令があるので中身を見てみる 23
24.
LightningTalk 1つ目の call 命令 24
25.
LightningTalk 2つ目の call 命令 25
26.
LightningTalk とりあえず 1つ目の call
から見る 26
27.
LightningTalk 27
28.
LightningTalk 0x601050 に 1
を mov している場所があるので その前の命令を見てみる 28
29.
LightningTalk フラグレジスタが 0 ならば
mov されない 29
30.
LightningTalk edx と eax
を比較して 0 ならば良い 30
31.
LightningTalk 実際に gdb でレジスタの中身を動的に見てみる 31
32.
LightningTalk 32
33.
LightningTalk flag は必ず ctf4b
から始まるので試しに入れてみる 33
34.
LightningTalk c = 0x63 edx
と eax の中身が入力された値 0x63 ではなく 0x9c だったので純粋に比較しているだけではなさそう 34
35.
LightningTalk 次に関係のない文字列を引数として与えて どちらが入力された値で、 どちらが正解の値か見てみる 35
36.
LightningTalk edx が変化していて eax
が変化していないので、 eax に何が入っているかを調べれば答えが見つかりそう 36
37.
LightningTalk 37 値を単純に比較していないのでどこかで ビット操作している可能性が高い
38.
LightningTalk 38 詳しく見ていこう
39.
LightningTalk edx と eax
を xor している場所があるので レジスタの中身を見てみる 39
40.
LightningTalk 40 edx の中身は引数に与えた文字の
0x41 なので、 eax と xor する前は元の文字だった A = 0x41
41.
LightningTalk 41 xor した後のレジスタの中身を見ると cmp
のときの値と一致している
42.
LightningTalk edx は cmp
まで変わっていないのがわかる 42
43.
LightningTalk 次に edx と
xor してる eax の中身を探る 43
44.
LightningTalk 0x601048 の中身を eax
に格納している movzx は 0 拡張して転送だから気にしなくて良い 44
45.
LightningTalk 下位に 2 bitのみにし
edx と xor をしている 45
46.
LightningTalk なので 0x601048 と
edx で xor しているのとほぼ同じになる 46
47.
LightningTalk つまり 0x601048 と
eax で xor した値が flag なのでは? 47
48.
LightningTalk 複雑なので一旦図にします 48
49.
LightningTalk 49 edx eax
50.
LightningTalk 50 edx eax edx
eax
51.
LightningTalk 51 edx eax edx
eax
52.
LightningTalk 52 edx eax edx
eax eax 0x601048
53.
LightningTalk 53 edx eax edx
eax eax 0x601048
54.
LightningTalk 54 edx eax edx
eax eax 0x601048 eax
55.
LightningTalk 0x601048 と eax
を xor した値を gdb で見てみる 55
56.
LightningTalk 予想通り 0x63 と表示されている 56
57.
LightningTalk cmp 命令の場所で 0x601048
と eax を xor した値が flag の1文字なので、全ての cmp 命令のアドレスに ブレイクポイントを指して、出てきた値を 引数に与えれば flag が出るはず 57
58.
LightningTalk 1つ目の call 命令の中から、cmp
命令のアドレスを全て探す 58
59.
LightningTalk 2つ目の call 命令の中から、cmp
命令のアドレスを全て探す 59
60.
LightningTalk gdb-peda$ b *0x400819 gdb-peda$
b *0x400869 gdb-peda$ b *0x4008B9 gdb-peda$ b *0x400909 gdb-peda$ b *0x400649 gdb-peda$ b *0x400699 gdb-peda$ b *0x400703 gdb-peda$ b *0x400753 60 探したアドレス全てにブレイクポイントを指す
61.
LightningTalk gdb-peda$ disp/c *0x601048^$eax 61 disp
で 0x601048 と eax を xor した値を画面に出力
62.
LightningTalk run で実行 62
63.
LightningTalk 63
64.
LightningTalk 64
65.
LightningTalk Tera Term の
log を取ったので実行結果を見る 65
66.
LightningTalk 66
67.
LightningTalk 67
68.
LightningTalk 出てきた値を全てまとめる 68
69.
LightningTalk 69
70.
LightningTalk 出てきた16進数をリトルエンディアンに直し echo で crackme
に投げれば勝利 70 echo -n "x63x74x66x34x62x7bx44x30x5fx79 x30x75x5fx6cx21x6bx33x5fx78x38x36x5fx34 x73x73x65x6dx62x6cx79x3fx7d" | xargs ./crackme
71.
LightningTalk 71
72.
LightningTalk 72 ctf4b{D0_y0u_l!k3_x86_4ssembly?}
73.
LightningTalk 73 ゼオスTTのブログ SECCON
Beginners CTF 2018 write-up Linuxでx86アセンブラ(条件分岐編) x86-64プロセッサのスタックを理解する Linuxでx86アセンブラ(論理演算編)
Download now