web-dev-qa-db-ja.com

ファジング:正確なバイト数をすばやく見つける

私は現在、バッファオーバーフローを練習しています。そして、ファジングに関してあなたに質問があります。

いくつかのバッファサイズを試してアプリケーションをクラッシュさせるpythonスクリプトを開発できます。これは正常に機能し、アプリケーションがクラッシュしたバッファサイズを返します。

ただし、スクリプトから取得する値は、必ずしもサイズ"EIP書き換えが可能"ではありません。このバッファサイズを見つけるために、私は通常模索しなければなりません...

問題は、正確なバイト数を探すときに、次のことを余儀なくされることです。

  1. Kaliでデバッガー(edb-debugger)を起動します。
  2. アプリケーションを起動します
  3. バッファサイズで+1または-1を指定してスクリプトを起動します
  4. EIPが上書きされていないか確認してください

そうでない場合、私は何度も何度もやり直します...

時間がかかりすぎる操作です。このステップを速くすることはできますか? EIPが上書きされない限り、アプリケーションを自動的に再起動するデバッガーの追加設定がありますか?または、スクリプトの特定の設定で?

私の場合、アプリケーション(クロスファイア)は最初に4377バイトでクラッシュします。ただし、EIPは上書きされません。

4378バイト、それは同じことです。

そして4379バイト、それは良いです! EIPは上書きされます!

しかし、4380(またはそれ以上)を試しても、EIPは上書きされません...そしてその理由がわかりません。

1
3r4inZ

誤解しているかもしれませんが、通常は上書きしすぎても問題ありません。

したがって、一般的なアプローチは、必要以上に上書きしますが、特定のパターンを使用することです。 EIPで終わるものを見て、パターンでそれを検索すると、EIPで終わるデータの正確な位置がわかります。

悪用ツールには通常これがあります。たとえば [〜#〜] peda [〜#〜] にはpattern機能があります。

2
Elias