web-dev-qa-db-ja.com

エクスプロイトを生成するときにデフォルトの不正な文字を常に宣言することの欠点はありますか?

シェルコードに不良文字を設定する場合、\ x00と\ x0aを不良としてマークする必要があると想定することの欠点はありますか?

3
nyxgeek

シェルコードの場合、潜在的な問題はサイズの制約だけです。しかし、ヌルバイトが悪いと仮定するのは悪い習慣です。実行可能なpoppop ret/ROPアドレスはnullバイトで始まるだけなので、クラッシュは悪用できないと誤解するかもしれません。

正確な不良バイトを特定するのにそれほど時間はかかりません。シェルコードのトラブルシューティングが必要な場合に時間を節約できるため、常にそれを行うことをお勧めします。

5
wireghoul

NULLと改行は常に悪い文字であるため、一般的ではありません。ただし、コードのサイズは大きくなります。私はこれを自動化しません。

たとえば、IA32アセンブラでは、命令を置き換えることができます

B8 01000000    MOV EAX,1          // Set the register EAX to 0x000000001

33C0           XOR EAX,EAX        // Set the register EAX to 0x000000000
40             INC EAX            // Increase EAX to 0x00000001

これにより、エンコードに必要なバイト数はさらに少なくなりますが、一般に、不良文字の数が増えるにつれて、文字を置き換えるのは面倒になります。

1
AdHominem