Zuck3r’s Study

エンジニアではありません

Google CTF : Beginner Quest : GATEKEEPER

前回と同じ前置きになるが、間違っているところや改善点があったらコメントして欲しい。

環境:VMware,DebianベースのLinuxを使っている

解説

今回は、"Google CTF : Beginner Quest : GATEKEEPER"を解いていく"Attachment"から問題ファイルをダウンロードする。zipファイルなので解凍する。

f:id:Zuck3r:20190120185938p:plain

解凍すると、gatekeeperが出てくる。"file"でどんなものなのか確認する。

$ file gatekeeper
gatekeeper: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a89e770cbffa17111e4fddb346215ca04e794af2, not stripped

elfのようなので実行してみると、以下の様に出力される。

f:id:Zuck3r:20190120191308p:plain


エラーの内容を見るに、 "./gatekeeper ユーザー名 パスワード"の順で入力してログインする必要がありそうだ。なので、適当にやってみる。

$ ./gatekeeper hello 123
/========================================\
| Gatekeeper - Access your PC from everywhere! |
+=======================================+
~> Verifying....
ACCESS DENIED
~> Incorrect username

もちろん、アクセスできなかった。次は"strings"を利用してみる。すると、26行目辺りにヒントになりそうな文字が見える。他にも、11行目のstrcmpから文字列の比較をしている事も分かる。

$ strings ./gatekeeper
usleep
__cxa_finalize
strcmp
__libc_start_main
一部省略
Usage: %s <username> <password>

~> Verifying.
0n3_W4rM
~> Incorrect username
zLl1ks_d4m_T0g_I
Correct!
Welcome back!
CTF{%s}
~> Incorrect password

"0n3_W4rM"と、"zLl1ks_d4m_T0g_I"が怪しい。後者は、"I got mad skillz"を逆にした文字列と推測できる。(前者は"one warm")
0n3_W4rMの下の行に、incorrect usernameとあるので、これがユーザーネームと推測すした。そして、zLl1ks_d4m_T0g_Iがおそらくパスワード。試してみる。

f:id:Zuck3r:20190120225914p:plain

Incorrect passwordと出てきた。ユーザーネームは有っていたようだ。zLl1ks_d4m_T0g_Iは先ほど言ったように、正しく読もうとすれば逆になっているので、逆にして入力してみる。(逆にしたものI_g0T_m4d_sk1lLz)

f:id:Zuck3r:20190120231002p:plain

成功した。CTF{~~}形式の文字が出てきたこれが今回の答えだ。

終わりに

今回の問題は、リバースエンジニアリングが正攻法だと思う。しかし、半分勘みたいな所はあるがstringsだけでも分かった。次はもっとちゃんとしたリバースエンジニアリング出来るように知識を詰めたい。

ちなみに、3はe、4はa、0はo、5はs、etc...といった感じで海外では使われていますよね。leetと言うそうです。
Leet - Wikipedia

参考にしたサイト(Google Capture The Flag 2018 (Quals) / Beginner's Quest - Gatekeeper)