はじめに 概要 今日は祝日なので遅ればせながらAlpacaHack Round 4の問題に挑戦してみます。 今回は最初の問題の「Simple Flag Checker」を解いてみます。 ジャンルとしては「Rev」とのことです。 いわゆるリバースエンジニアリングの問題でバイナリのファイルが与えられるので、 そのファイルを解析してflagを取得するような問題っぽいです。 バイナリとかアセンブラとかよく分かっていないのでいつも通りChatGPTに助けてもらいながらやっていこうと思います。
AlpacaHack Round 4のトップページ
AlpacaHack AlpacaHackへのリンクはこちら
AlpacaHackのサイトへのリンク
私のCTF環境 Windows 11/WSL2 Ubuntu 22.04 LTS Ghidra 前回の記事 2024年10月13日の記事です。
AlpacaHackで始めるCTF入門5:AlpacaHack Round 3 - qrimeに挑戦
問題内容 問題ページを開くとcheckerというファイルをダウンロードできます。 おそらくこのファイルが何かしらの言語で書かれたソフトのソースコードをコンパイルしてできた実行ファイル(バイナリ)みたいなものだと思います。 つまり、このバイナリの実行ファイルをソースコードに戻せたらflagが取得できそうです。
checkerを調べてみる まずはfileコマンドでcheckerファイルの形式を確認してみます。
$ file checker checker: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c2dd390ecbb794a78e20db0151832e9dd5c6359d, for GNU/Linux 3.2.0, not stripped ChatGPTに聞いたところ一般的なバイナリファイルらしいです。また、not strippedだと関数名や変数名の情報が残っていて解析しやすいっぽいです。
次にstringsコマンドで中身を確認してみます。
$ strings checker /lib64/ld-linux-x86-64.so.2 mgUa __cxa_finalize fgets __printf_chk __libc_start_main puts memcmp stdin ... fgetsやstdinがあるのでC/C++言語っぽいです。
...