CTF入門にあたって知っておきたいLinuxコマンドおよびツールまとめ

CTF

CpawCTFにチャレンジしてみて、最低でもこれだけは知っておいたほうがスムーズに問題に取り組めると感じたLinuxコマンドやツールをまとめました。

その他にも有用なツールはやまほどありますが、多すぎても敷居が高くなってしまうので、入門レベルとして使用するLinuxコマンド、ツール及び外部サイトに絞りました。

なお、インストール方法は以下環境での説明となっています。異なる環境の場合は適宜読み替えてください。

用途名称バージョン
仮想化ソフトウェアVirtualBox6.1.2
端末Kali Linux2020.1

上記環境の構築については本ブログの「ハッキングラボ > 環境構築」カテゴリをご参照ください。

Linuxコマンド

file

ファイル形式を表示するコマンドです。

CTF では拡張子がないファイルを問題として渡されることが多く、そういったファイルの形式を調べるために使用します。

例えば、grepのファイル形式を調べたい場合は以下のように実行します。

root@kali:~# file /bin/grep
/bin/grep: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=f8792588980aa5adc8ddfc38f42703a91606e8d5, for GNU/Linux 3.2.0, stripped

上記の出力結果は、grepが64bitOS向けのELF形式共有ライブラリであることを示しています。

ELFとは、多くのLinuxディストリビューションで採用されているバイナリ形式です。そのため、実行するにはLinux環境が必要になり、通常はWindows環境では実行できません。

ELF形式はCTF のバイナリ解析でよく出題されるようで、Linuxで実行する必要があるということを理解しておく必要があります。

なお、findはファイルの内容からファイル形式を判断するため、拡張子を変更したとしても結果は変わりません。

chmod

ファイルのパーミッション(権限)を変更するコマンドです。

パーミッションの問題でファイルが実行できずFlagが取得できないといった場合には、このコマンドでパーミッションを変更することで実行できるようになる場合があります。

全ユーザに読み取り/書き込み/実行を許可する場合は以下コマンドを実行します。

root@kali:~# chmod 777 <ファイル名>

下図のように「777」は全ユーザに読み取り/書き込み/実行を許可することを指します。

なお、ファイルの権限は以下コマンドで確認が可能です。

root@kali:~# ls -l /bin/grep
-rwxr-xr-x 1 root root 198976  1月 29 04:31 /bin/grep

「-rwxr-xr-x」部が権限を表しており、以下を意味しています。

unzip

zipファイルを解凍するコマンドです。

CTFではzipファイルが問題として渡されることがあり、そのファイルを解凍するために使用します。

以下のように実行することで、カレントディレクトリにファイルを展開します。

root@kali:~/Downloads/test# unzip misc100.zip 
Archive:  misc100.zip
 extracting: mimetype                
 extracting: Thumbnails/thumbnail.png  
  inflating: meta.xml                
  inflating: settings.xml            
  inflating: content.xml             
  inflating: styles.xml              
   creating: Configurations2/popupmenu/
   creating: Configurations2/statusbar/
   creating: Configurations2/menubar/
   creating: Configurations2/toolbar/
   creating: Configurations2/floater/
  inflating: Configurations2/accelerator/current.xml  
   creating: Configurations2/toolpanel/
   creating: Configurations2/progressbar/
   creating: Configurations2/images/Bitmaps/
  inflating: META-INF/manifest.xml 

なお、解凍コマンドは他にもあるため、圧縮ファイルに応じて使い分けてください。以下は例です。

  • tar
  • gunzip
  • xz

grep

ファイル中の文字列を検索し、出力するコマンドです。

ファイルの中身が膨大な場合は時間もかかり見落とす可能性も高いため、grepコマンドで検索条件に合致する行のみを出力させて確認します。

例えば、ファイルの中にFlagが隠れている場合、Flagとして指定されている文字列(CpawCTFでは「Cpaw」)をgrepで指定すれば、その文字列が含まれた行が出力され、確認が容易になります。

以下の書式で実行します。

root@kali:~# grep <検索条件> <ファイルパス>

例えば、以下のようなファイルがあったとします。

root@kali:~# cat pass.lst
user
password
12345678
msfadmin
root
guest
batman
asdfasdf
tomcat

このファイルに対してgrepを実行すると以下の出力となります。

root@kali:~# grep pass pass.lst
password

また、grepはパイプ( | )で使用されることも多くあります。
パイプとは、コマンドの出力結果をパイプで区切られた次のコマンドにわたす処理のことを指します。

例えば、「ls」コマンドでディレクトリの中身を出力した結果をパイプでgrepに渡すことで、検索条件に合致したディレクトリのみを表示させるといったことが可能になります。

root@kali:~# ls | grep pass
kali_passshadow.txt
kalipassword.txt
pass.lst
password.lst
password2.lst

gcc

Linuxで使用できるCLIベースのコンパイラです。

C言語のソースコードのみ渡されてFlagを見つける問題があり、実行形式のファイルを作成するために使用します。

以下コマンドでインストールできます。

root@kali:~# apt install gcc

インストールが完了したら、以下コマンドでソースコードをコンパイルすることができます。

root@kali:~/Downloads/crypt# gcc crypto100.c

なお、生成した実行ファイルでデバッグを行う場合は以下のように「-g」「-O0」オプションを付与します。

root@kali:~/Downloads/crypt# gcc -g -O0 crypto100.c

「-g」でデバッグ情報を付加して、「-O0」で最適化を行わないようにしています。(デバッグしやすくするため)

CTFで動作を見る場合デバッグは有効な手段のため、上記オプションを付与するケースがほとんどかと思います。

gdb

Linuxで使用できるCLIベースのデバッガです。

問題として与えられたソースコードの動作を確認するために使用します。ソースコードから読み解くのが難しい場合は、デバッグにより1つ1つの命令で変数がどう変わっていくかを見ることで読み解けるかもしれません。

以下コマンドでインストールできます。

root@kali:~# apt install gdb

インストールが完了したら、以下コマンドを実行することでgdbプロンプトに移行します。

root@kali:~/Downloads/crypt# gdb a.out
---中略---
Reading symbols from a.out...
(gdb)

このプロンプトが表示されればgdbが起動しています。
ここでは、ブレークポイントの設定から、プログラム実行中の変数を表示する方法まで紹介します。

ブレークポイントの設定は、以下のように「b <行番号>」と入力しEnterを押下することで可能です。

(gdb) b 10
Breakpoint 1 at 0x11a8: file crypto100.c, line 10.

また、行番号だけではなく関数名を指定して関数をブレークポイントとすることも可能です。

ブレークポイントを設定したらプログラムを実行しましょう。
以下のように「run」と入力することで実行が可能です。引数がある場合は半角スペースで区切って入力しましょう。

(gdb) run test 3
Starting program: /root/Downloads/crypt/a.out test 3

ブレークポイントを設定していれば、ブレークポイントで処理が停止します。
この時点での変数の値を確認する場合は、以下のように「p 変数名」と入力することで値を確認することができます。

(gdb) p key
$1 = 3

この他にも様々なオプションが用意されています。
以下サイトでわかりやすくまとめられており、参考にさせていただきました。

gdb の使い方・デバッグ方法まとめ
デバッガにはロードモジュールをそのまま、そのレベルでデバッグするabsolute debugger(adb)とソースレベルのエン

strings

ファイルの可読部分を表示するコマンドです。

バイナリファイル等の「テキストとして読めないファイル」でも、コンパイル時の情報など可読部分は存在する場合があり、この可読部分を文字列として出力させることができます。

バイナリファイルを渡されてFlagを見つける問題では、stringsコマンドで文字列を出力させるとFlagを発見できる場合があります。

以下の書式でコマンドを実行することができます。

root@kali:~# strings <ファイルパス>

上記のようにオプションを付与しない場合は可読部分が4文字以上連続している箇所が表示されます。
「- 文字数」オプションを付与することで、何文字連続した箇所を表示するかを制御できます。

root@kali:~/Downloads/cpaw# strings -10 rev100 
/lib/ld-linux.so.2
_IO_stdin_used
__stack_chk_fail

Linuxの場合デフォルトで使用可能ですが、もしコマンドが見つからない場合は以下コマンドでインストールを行ってください。

root@kali:~# apt install binutils

objdump

オブジェクトファイルの情報を表示するコマンドです。

逆アセンブルを行う場合にこのコマンドを使用します。
「-d」オプションを付与することで逆アセンブルを行います。

root@kali:~/Downloads/cpaw# objdump -d rev100 
---中略---
0804849d <main>:
 804849d:	55                   	push   %ebp
 804849e:	89 e5                	mov    %esp,%ebp
 80484a0:	83 e4 f0             	and    $0xfffffff0,%esp
 80484a3:	83 ec 50             	sub    $0x50,%esp

また、「-S」オプションを付与することで、逆コンパイルも併せて行いソースコードと対応付けて逆アセンブル結果を表示させることもできますが、逆コンパイルが正確に行えないことが多く、あまり使用機会は多くないかと思います。

Linuxの場合デフォルトで使用可能ですが、もしコマンドが見つからない場合は以下コマンドでインストールを行ってください。

root@kali:~# apt install binutils

ツール

Visual Studio Code

Microsoftが提供している無償のコードエディタです。

Pythonのコードを書くのに使用しました。
軽量で、拡張機能によってコード補完(IntelliSense)やデバッグ機能、Lint(コンパイラより厳しい文法チェック)が可能になります。
また、Mircrosoftが提供しているので定期的なアップデートも期待できます。

以下のサイトからパッケージをダウンロードします。

Download Visual Studio Code - Mac, Linux, Windows
Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code edit...

今回はKaliにインストールしたかったので「.deb」のファイルを選択しました。

ダウンロードが完了したら、ファイルが格納されているディレクトリに移動し、以下コマンドを実行します。
※「code_1.44.2-1587059832_amd64.deb」箇所はダウンロードしたファイル名を指定します。
※カレントディレクトリにファイルがある場合「./」をつけないとインストールできないので注意してください。

root@kali:~/Downloads# apt install ./code_1.44.2-1587059832_amd64.deb

完了すると、VS Code を使用できるようになります。

Microsoft Office

Microsoft が提供しているオフィススイートです。

特定のファイル形式(例:Wordファイル)のファイルの中身を確認するために使用します。
CpawCTFではWordファイルの中にFlagが書かれている問題があり、そのファイルを開くために使用しました。

既にインストールされている方も多いと思いますが、インストールされていない場合は以下サイトからO365を購入する必要があります。

家庭向け Microsoft 365 | Office スイートとサブスクリプションの比較
家庭向けの Microsoft 365 Personal サブスクリプションと、Office スイート製品の Office Home & Business 2019、Office Personal 2019 を比較して、ニーズに合った最適なプランを見つけてください。

ファイルによっては、無償のLibreOfficeでも代用できる場合があります。

ホーム | LibreOffice - オフィススイートのルネサンス
LibreOffice Homepage, office suite, download, open standards, open source, free software, LibreOffice

imagemagick

画像加工ツールです。

画像ファイルのExif情報の確認に用います。
Exif情報とは、画像ファイルに埋め込まれているその画像に関する各種情報のことです。例えば、撮影日時や使用カメラ、位置情報を確認することが可能になります。

以下コマンドを実行しインストールします。

root@kali:~/Downloads# apt install imagemagick

インストールが完了すれば、以下コマンドでExif情報を確認することが可能になります。

root@kali:~/Downloads# identify -verbose <ファイルパス>
    exif:ColorSpace: 1
    exif:ComponentsConfiguration: 1, 2, 3, 0
    exif:CustomRendered: 0
    exif:DateTime: 2015:09:14 12:50:38
    exif:DateTimeDigitized: 2015:09:14 12:50:38
    exif:DateTimeOriginal: 2015:09:14 12:50:38
以下略

Wireshark

パケットキャプチャ解析ツールです。このブログでは何度も触れているツールです。

Network分野のCTFで使用しました。
パケットキャプチャを渡されてその中からFlagを見つけるという問題です。

Wiresharkの使い方については以下記事でも紹介しています。

また、[ファイル > オブジェクトをエクスポート]により、通信で使用されたファイルをエクスポートする機能を使って、アクセス先のWEBサイトの各種ファイル(HTMLファイルやスクリプトファイル等)をエクスポートするといったことも行えます。

Kaliの場合デフォルトでインストールされているため別途インストールは必要ありませんでしたが、インストールされていない場合は以下URLからダウンロードします。

Wireshark · Download

FileZilla

FTPクライアントソフトです。

Network分野ではFTPサーバからFlagの書かれたファイルを取得するケースがあります。

ターミナル上でftpコマンドを使用して取得することもできるので必須ではありませんが、GUIのほうが見やすく操作も簡単です。(ftpコマンドだとモード周りが面倒なので)

インストールは以下コマンドで行えます。

root@kali:~# apt install filezilla

インストールが完了すれば使用できるようになります。

なお、隠しファイルは以下箇所で表示させることができます。

外部サイト

hashtoolkit

MD5、SHA1のハッシュ値を復号するサイトです。

以下サイトで「Decrypted SHA1 Hash」タブをクリックし、検索窓にハッシュ値を入力して虫眼鏡マークをクリックすると復号できます。

https://hashtoolkit.com/

モールス信号変換サイト

モールス信号の変換を行えるサイトです。
CpawCTFでは画像に表示されたモールス信号を文字に変換するのに使用しました。

以下サイトにモールス信号を手入力すると、文字が表示されます。

Morse Code Translator by Various Words
Morse code conversion by various words.

参考

本記事は、セキュリティコンテストチャレンジブック(通称:ハリネズミ本)を参考にさせていただきました。
他にも様々なツールが紹介されていたので、CTFを解くにあたって使用した際には紹介できればと思います。

※Amazonアフィリエイトを使用しています。

以上です。

コメント

タイトルとURLをコピーしました