大学のコースでスタックオーバーフローを実行しようとしています。私が利用しようとしているバイナリにはカナリアがありますが、そのカナリアを標準出力にリークする方法があります。もちろん、カナリアはいくつかのランダムなバイトで構成されているため、プログラムが標準出力に出力する文字列からそれらを読み取ることはできません。
このため、私は python と pwntools のようなものを使用していp.recv(timeout = 0.01).encode("hex")
ます。
(私が pwntools を使用しているのは、出力を 16 進形式で読み取る別の方法がわからないためです。もちろん、他の方法を使用できる簡単な方法があれば)
これは多かれ少なかれ期待どおりに機能し、カナリアを過ぎたメモリ領域を書き込むことができました。ただし、セグメンテーション違反が発生するため、明らかにスタックオーバーフローに問題があります。スタックオーバーフローを引き起こす入力を提供した後にスタックを確認するなど、これをデバッグする方法が必要です。
そして、これ以上苦労することなく、実際の質問: pwntools (のようなprocess("./myprog")
) で開始したプロセスを GDB またはスタックの内容を表示できる他のプログラムでデバッグできますか?
私はすでにpythonでpidを取得し、gdb attachを使用してそのpidにアタッチしようとしましたが、うまくいきませんでした。
注: 悪用しようとしているバイナリには、guid が設定されています。それが重要かどうかはわかりません。