7

通常、私たちは皆、次のような基本的なバッファオーバーフロー形式を目にします:- NOPs + shellcode + return_address

NOPs + return_address + shellcode?リターンアドレスがシェルコードの先頭を指すようにする場合、なぜ使用し ないのですか?

これは、脆弱性がmain()にある場合、スタックセグメントの外部にデータを書き込もうとしている可能性があるためだと推測しています。私は正しいですか?私がそうなら、それが唯一の理由ですか?

そうそう、return-to-libcやptraceなどを使用する他の種類の攻撃については言及していません。最も基本的なバッファオーバーフロー攻撃が最初の方法で示され、2番目の方法では示されない理由を知りたいだけです。

4

1 に答える 1

11

shellcode+nop sled差出人住所は の前または後に来ることができます。たとえば、スタックの一番上にある変数に書き込む場合、nop sled+shell code十分なスペースがない可能性があるため、Return アドレス (EIP) を超えて書き込む必要がある場合があります。

ただし、NOP スレッドは常にシェル コードの隣にあります。その理由は、nop スレッドを使用して、シェル コードのターゲットをできるだけ大きくするためです。EIP がシェル コードから +=100 バイトを指している場合は、100 バイトを超える nop スレッドを使用して、確実にターゲットにヒットするようにする必要があります。したがってNOPs + return_address + shellcode、無効です。一般的なエクスプロイト文字列は次のようになります。

JUNK + return_address + NOPs + shellcode

そしてもちろん、"return-to-libc"スタイル攻撃にはシェルコードや nop そりは必要ありません。

この単純なスタックベースのバッファ オーバーフロー エクスプロイトは、最新のシステムでは機能しません。Alpeh-One の Smashing The Stack For Fun and Profit は、NX ゾーン、スタック カナリア、および ASLR が原因で機能しなくなりました。これらはすべて、Windows および Linux のデフォルトです。

次のコピーを入手する必要があります。

ここに画像の説明を入力

于 2011-03-13T09:42:05.133 に答える