ターゲット(ELF/x86_64)にスタックカナリアがあり、NXとPIEが有効になっているバイナリ利用の課題に取り組んでいます。単純な分岐を実装しますTCPサーバー。接続が確立された後、最大0x420バイトをソケットから0x400バイトのバッファに読み取ります。このデータが特定の文字列で始まる場合、送信ソケットを閉じる前に返信。
私の知る限り、上記のバッファオーバーフローがプログラムの唯一の脆弱性です。
これまでのところ、スタックカナリアをブルートフォースにして、rbp
を保存し、アドレスを一度に1バイトずつ上書きして、サーバーが応答を送信するかどうかを確認することでアドレスを返すことができました。
私の問題は、このオーバーフローを悪用する方法を見つけられないことです。スタックレイアウトのため、戻りアドレスはオーバーフローバッファーの最後にあり、通常のROPチェーンを設定することはできません。
rsp
を書き込み可能なバッファの先頭に調整することを考えましたが、それを行うガジェットが見つかりません...
最初のリクエストでかなり大きなパッケージを提供し、それから通常のメモリでそれを探す小さなエクスプロイトを作成できます。「egghunters」を参照してください。