web-dev-qa-db-ja.com

libcに戻る攻撃の謎

私はReturn-to-libc攻撃を研究していて、その概念を理解しています。しかし、それでも意味がありません。攻撃を行うには、system()および"/ bin/sh"のメモリアドレスが必要です。これはdifferentすべてのシステムで。そして、このトピックについて私が見たすべての例は、ダミーのCコードを作成してgdbでデバッグし、これらのアドレスをtheir Host systemで確認することです。

シェルアクセスがまだない場合、targetシステムでこれらのメモリアドレスを取得するにはどうすればよいですか?私が持っているのは、ファジングで見つけたEIPアドレスと、何も実行できない非実行スタックだけでしょうか?

4
Spring

これは、ホストが採用する緩和策に少し依存します。ターゲットにALSRがなく(最新のシステムではまれ)、それらが実行しているOSがわかっている場合(Ubuntu 16.04など)、同じバージョンのシステムをセットアップして、その方法でアドレスを見つけることができます。多くのMetasploitエクスプロイトを見ると、それらには指定できるTARGETバージョンのテーブルがあり、通常は異なるターゲットアドレスが使用されます。

(ASLRを使用した)より近代的なセットアップでは、次のいずれかを行う必要があります。

  1. 固定アドレスでロードされたモジュールを見つけます。これはかなり一般的でしたが、より多くのセキュリティ認識によりますます珍しくなっています。
  2. 一部のアドレスをリークする方法を見つけて、libc(またはその他の有用なライブラリ)がどこにあるかを見つけ、次にオフセットを追加/減算して、攻撃に必要なアドレスを見つけます。
5
David