2012-02-19 3 views
-1

私は、スタックからコードを実行してバッファオーバーフローを実行する必要があることを示す割り当てがあります。私はそうしようとしてきましたが、スタックの "ret"位置をスタックの位置に置き換えるたびに、コードが常駐するようになります。私が "ret"位置を物理的な.oファイル(物理的なアセンブリコードのような)に存在するアドレスに置き換えると、うまく動作します。スタック上のポジションに戻ることは許されていませんか?スタックアドレスに戻ることができない場合は、自分のアセンブリコードでバッファオーバーフローを実行する方法が混乱しています...(btw、私はIA32リトルエンディアンマシンを使用しています)。バッファオーバーフロー攻撃 - スタック上のアドレスに戻りますか?

マイ手順:

  1. オーバーフロー
  2. が上記 "RET" スポットを上書きし(そこに格納されている実際の値を持つ)場合%ebpの位置を上書き(すべてのFFを入れて)32文字バッファアセンブリファイル内のアドレスではなくスタック上のアドレス
  3. 私のアセンブリバイトコードを埋め込みます(先頭にnop命令を追加して、4バイトの倍数で終わるようにしてください)

それを実行すると、これは

答えて

4

は、スタックページが実行可能としてマークされていることを確認しワンセグ障害につながります。現代のオペレーティングシステムでは通常、スタックが実行不可能に設定されているため、プログラムカウンタを設定すると直ちにセグメンテーションが発生します。

+0

、我々は(そうでない場合、彼らは私たちのような割り当てを与えないだろうスタックを実行可能としてマークされていることを前提としこの)。他のアイデア?ありがとうございました。 – de1337ed

1

これは、さまざまな方法でプラットフォームによって異なります。あなたのメモリのすべてが実行可能なわけではなく、現代のシステムでは通常、その理由のために書き込み可能なメモリと実行可能なメモリの間に排他的なものがあります。 linuxを使用している場合は、mprotectへの追加呼び出しでスタックを構築したいので、スタックを実行可能に変更します。これは、より複雑で構築されたペイロードを必要とするが、実行可能である。

その他のオプションでは、戻りアドレスの後に引数に問題が残っていることがあります。つまり、スタックを破損していないので、他の関数を呼び出すと "運が良かった"コード、あなたはしました。さらに読書のために

:私はこの割り当てのためだと思う

  1. NX bit
  2. mprotect
関連する問題