2

バッファ オーバーフローを再現しようとしています。渡そうとしているアドレスには 2 つのヌル 16 進文字 (つまり 0x00547e00) が含まれています。さらに 4 バイトが続きます (つまり、0x11111111 と 0x22222222)。gdb を使用してこれらを渡すと、必要なメモリに書き込むときに null 文字をスキップします (つまり、1111547e 22221111 2222####)。null 文字ではなく、アドレスに影響しない、渡すことができる文字はありますか?

私が考えた1つの解決策は、すでにゼロになっているメモリを見つけ、最初のアドレスがそれを指すようにし、そのゼロになったメモリに到達するまでガベージで上書きし、そこで上書きすることでした。ただし、これは 2 バイトのメモリがあり、6 を渡そうとする場合にのみ機能します。

4

1 に答える 1

3

シェルコードでゼロを回避しようとしている場合は、ほとんどすべてのシェルコード作成チュートリアルでカバーされている方法があります。

これで、使用されるバッファオーバーフローの種類によっては、アドレスを上書きする最後の部分が扱いにくくなります。

memcpyベースのものでは、\ 0文字は問題ありませんが(そしてあなたの質問は私がこれを書かなければならないほど曖昧です)、キーボード/コマンドラインでstdinにこれらを入力できない可能性が高いので、あなたは他のソースからデータを入力する必要があります。たとえば、パイプを使用します./buffercrash < exploit.txt 。strcpyを使用する、最後の文字を除いて\ 0文字を使用することはできません。これは、宛先文字列も終了するためです。つまり、最上位バイトを完全に\0に設定できます。これで、問題は最下位バイトのままになります。スタックアドレスの場合は、環境変数を追加して、それに応じてターゲットアドレスを変更することで幸運になる可能性があります。シェルコードのアドレスだけの場合は、アドレスに+1を追加して、シェルコードの前に別の塗りつぶし文字を挿入できます。

したがって、すべてはコンテキストと何をしようとしているのかによって異なりますが、バッファオーバーフローの脆弱性があると、\ 0は単純なアプローチを停止する可能性がありますが、ある程度の創造性があれば、達成できることがあるでしょう。 \0文字なし。

于 2012-06-18T13:31:14.600 に答える