0

バッファオーバーフローの問題に取り組んでいます。この問題では、入力文字列がRETを(明らかに)入力文字列にも含まれているシェルコードのアドレスで上書きする必要があります。

調べてみたところ、実行時にそのようなバッファのメモリアドレスを特定するのは簡単ではありません。

相対ジャンプについても学びました。シェルコードが始まるスタックの前の部分(および私の文字列)への相対ジャンプでRETを上書きすることは可能ですか?それがうまくいくかどうかはわかりません。

基本的には次のようになります:./ program 90909090909090 / bin / sh / 00RELATIVE_JUMP_HERE

明らかに、それはすべてマシンコードに含まれます。これは、私が達成しようとしていることを理解するためだけのものです。

ありがとう

4

1 に答える 1

0

スタックオーバーフローで上書きするのはRET命令ではなく、リターンアドレスです。したがって、マシンコードを上書きするのではなく、マシンコードへのポインタを上書きします。確かに、興味深いコードにジャンプし続けるためのテクニックがあります。グーグルでret-into-libcとリターン指向のプログラミングを行います。

同様に、有名な手法は「トランポリン」手法です。この手法では、オーバーフローしたバッファにジャンプして戻る「JMPESP」命令を差出人アドレスにポイントさせます。

于 2011-11-14T19:23:11.123 に答える