CTFのための gdb/gdb-peda 頻出コマンドのメモ

よく使用するgdbコマンド及びgdb-pedaコマンドをまとめておく

gdb-pedaとはgdbの機能を拡張してくれるやつ

CTFでpwn(exploit)系の問題を解く際は、インストールしておいて損はないと思われる

github.com

gdb-peda インストー

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit

gdb コマンド

()内に示した記号で省略可能

helpコマンドで詳しく確認できる

プログラム実行関連

  • run(r)
    プログラムを実行

  • start
    main関数にブレイクポイントを設定し、プログラムを実行

  • break(b) アドレス
    0x08041234にブレイクポイントを設定する場合は b *0x08041234 などと書くことで設定可能
    また、b *main+数字 のように設定もできる

  • quit(q)
    gdbを終了

  • continue(c)
    ブレイクポイントで止まった状態からプログラムを再開する

  • step(s)
    ステップイン実行
    プログラムを1ステップずつ詳細に解析する際はこちら

  • next(n)
    ステップアウト実行
    printfなどの動作が明らかな関数の中身まで追わない場合はこちら

  • kill(k)
    実行中のプログラムを停止させる

メモリ、レジスタ関連

  • info(i) breakpoints(b)
    設定したブレイクポイントを表示する

  • info(i) registers(r)
    レジスタの値を表示する

  • stack
    現在のスタックの状態を表示

  • disas 関数名
    指定した関数をディスアセンブルした結果を表示
    関数名の部分はアドレスで指定もできる
    disas 0xstart 0xendのようにして、指定した範囲のみディスアセンブルもできる

  • x/x アドレス
    アドレスを中身を表示
    x/x 0x08041234なら0x08041234の中身を表示してくれる
    x/x $espのようにレジスタの前に$記号をつけることで、レジスタの中身も表示してくれる
    x/nx 0x08041234では0x08041234からnbyte分表示してくれる
    この辺りは他に詳しくまとまっているので、そちらを参照

  • set アドレス = 値
    アドレスに指定した値を書き込める
    例えばset $eip = 0x08041234とすることでeipレジスタを好きな場所に移動できる

gdb-peda コマンド

peda helpコマンドで詳しく確認できる

公式を見た方が早い説はある

  • pdisas 関数名
    gdbコマンドでいうdisasの強化版 色などがついて見やすい

  • aslr
    ASLRの有効/無向を確認

  • checksec
    プログラムのセキュリティ機構を確認できる
    どの攻撃手法が有効かを調べるにはこれを使おう

  • xinfo アドレス
    アドレスやレジスタの詳しい情報を表示してくれる
    xinfo $eip のように使う

  • telescope n
    スタックの情報を指定した長さだけ取得してくれる
    stackだけだと足りない場合はこちらでたくさん見てみよう

  • dumprop
    プログラム内のROPgadgetを検索してくれる

  • elfheader(readelf)
    その名の通りヘッダ情報を取得してくれる .fini_arrayなどのアドレスも確認できる

  • vmmap
    マッピングされたアドレスの情報を取得する

  • pattern
    簡単に言うと、特定の文字列を扱うコマンド
    pwn系の問題では長い文字列を与えたい場面が多々ある
    そういった場合はpattern create nで長さnの文字列を生成したり、 pattern arg nで長さnの文字列を引数として与えてあげる そうして実行したとき、バッファオーバーフローなどが発生し eipレジスタが特定の文字列(例えば ABAA)に置き換わったとする
    そのような場合はpattern offset ABAAと実行することで、 与えた引数の何byte目からeipレジスタに書き換わるかが容易にわかる

gdb-pedaはこのように、CTFで問題を解く上で、役立つ機能が満載 是非ともインストールしておきたい