RECT(Return-Oriented Programming)技術を使用してgets()関数の脆弱性を利用しようとしています。ターゲットプログラムは、ある時点で何らかの入力を求めてからgets()を使用して入力をローカルの80文字の長さの配列に格納するWindowsコンソールアプリケーションです。
冒頭に80文字を含むファイルを作成し、古いEIPポインタを上書きするための余分な文字+ 0x5da06c48アドレスを作成しました。
ファイルをテキストエディタで開き、コンテンツを入力としてコンソールにコピーペーストしています。私はgets()関数からの戻りの直後にブレークポイントを設定するためにIDA Pro(またはOllyDbg)を使用し、アドレスが破損していることに気付きました - 0x3fa03f48(2回の3f置換)に設定されていました。
私は他のアドレスも試してみましたが、その一部はうまくいきましたが、ほとんどの場合アドレスが壊れています(文字がないか置換されている、時には切り捨てられることがあります)。
この問題を解決するにはどうすればよいですか?どんな提案も高く評価されます!gets()ROPの悪用を伴うWindowsコンソールアプリケーション
3
A
答えて
-1
まず、お使いのプラットフォームのEndiannessを確認してください。あなたのビットが正しい順序であると思っても、依然として不正な入力がある場合、シェル/テキストエディタはバイナリセーフではないかもしれません。 Subprocessライブラリを使用して、Pythonなどのスクリプト言語でこの欠陥の悪用を行う方がよいでしょう。これにより、任意のプロセスのstdinパイプに直接データを書き込むことができます。
1
バイナリデータのコピーペーストはヒットアンドミスです。入力リダイレクトを使用してファイルから直接入力をテストプログラムに入力しようとしましたか?
関連する問題
- 1. C#のコンソールアプリケーション用Windowsサービス
- 2. ROPを使用してARM内のシェルにアクセスする
- 3. Windowsでのイベントを伴う動的ItemTemplate電話
- 4. WindowsフォームアプリケーションのWindows 7での使用率が悪い
- 5. getsの代わりにfgets
- 6. WCFと傍受を伴うNinject(AOP用)
- 7. 副作用を伴うPythonクロージャ
- 8. aircrack-ngの使用に伴う問題
- 9. WindowsフォームアプリケーションとコンソールアプリケーションのDDEサーバーの登録
- 10. すべてのWindowsコンソールアプリケーションの画面バッファサイズ
- 11. Windowsスケジューラを使用してコンソールアプリケーションを実行
- 12. NullPointerExceptionを伴うリスト
- 13. メモリリークを伴うカスタムコントロール
- 14. Windowsコンソールアプリケーションをstdinパイプで制御する
- 15. Windowsフォームからコンソールアプリケーションを実行する
- 16. Windowsサービスとして実行中のコンソールアプリケーション
- 17. コンソールアプリケーションを使用してWindows Phone 8に接続します
- 18. コンソールアプリケーションをWindowsフォームプロジェクトに追加して使用する
- 19. NSShadowのスローダウンを伴うWebView
- 20. コンソールアプリケーション用ワンクリックインストーラ.NET
- 21. ローカライゼーションを伴うFOSUserバンドルcheck_path
- 22. Winforms:ドッキングを伴うFlowLayoutPanel
- 23. 遅延を伴うjavascriptリダイレクト
- 24. カールを伴うファイルアップロード。 Php
- 25. ボタンクリックイベントを伴うSilverlightプロジェクト
- 26. 日付を伴うトラブルプロットR
- 27. jqgrid重複を伴うカスタムソート
- 28. 遷移を伴うUIModalPresentationCurrentContext?
- 29. 遅延を伴うJavascriptタイムアウト
- 30. 休憩を伴うファイルアップロード
@ NiklasB。 getはどんな境界チェックもしません。 –
ああ、もちろん、あなたは正しいです...あなたが記述した問題を示す最小のCサンプルプログラムを提供できますか?私は自分でデバッガで実行したいと思っています。なぜなら、あなたが説明していることは私にはあまり起こりそうにないからです。私はなぜそれが読まれた後に入力が何らかの方法で妨害されるのはなぜ「得る」かわからない。私が想像できる唯一のことは、ペイロードの中にヌルバイトまたは改行(0x0aまたは0x0d)があることです。 –
私はペイロードにbadバイトが含まれていないことを保証しました。たとえば、[Wikipedia example](http://en.wikipedia.org/wiki/Stack_buffer_overflow#Exploiting_stack_buffer_overflows)をコンパイルすることができます:strcpy呼び出しをget c); –