私はバッファオーバーフロー攻撃を試してきましたが、それを使ってsystem("/bin/bash")
ルートシェルを取得できると思います。
だから私は読んで出荷書類ビーチsystem()
。
それは言う:
system()
実際、/bin/sh
bashバージョン2システムでは、bash 2が起動時に権限を削除するため、set-user-IDまたはset-group-ID権限を持つプログラムは正しく機能しません。
私が攻撃しているシステムにはbashバージョン4.3があり、使用するときにrootsystem("/bin/bash")
権限がありません(もちろん、私が攻撃する初期プログラムはroot権限で始まります)。私の質問は:システムがbashバージョン2の権限のみを削除するのですか、それともバージョン2以上のbashの権限を削除するのですか?
編集:/bin/bash
同時にまた/bin/dash
は/bin/sh
同時に権限を削除します。
@StéphaneChazelasのコメントを読んだ後、EDIT2:
- 確認するこのリンクBashから権限を削除するための追加の説明と正確性。
-p
bashがビルドされたときに権限を維持するオプションを使用できます。
答え1
現在のバージョン
-p
最新バージョンのbashは、次のセクションで使用されていない限り、権限を削除します。大きな打撃(1)特権モードの説明:
シェルの起動時に有効ユーザー(グループ)IDが実際のユーザー(グループ)IDと同じでない場合-血オプションは提供されません。 [...] 実効ユーザ ID は実ユーザ ID に設定されます。もし-血このオプションは起動時に提供され、有効なユーザーIDはリセットされません。このオプションをオフにすると、実効ユーザーとグループ ID が実際のユーザーとグループ ID に設定されます。
歴史的なバージョン
「どんなバージョンで…?」と尋ねます。参照するセクションは、アクティブなGitリポジトリで利用可能な最初のリビジョン以降system()
変更されませんでした。(バージョン1.70)。このファイルは2004年にチェックインされ、コメントによると、2001年に最後に変更されたことが示されています。
Bashバージョン3は2004年にリリースされました。。これは、その時点でbash 2が現在/最新バージョンになることを意味します。したがって、実際には「...bashバージョン2以降/最新」と言うのです。これがその場合~からバージョン2.
自分で確認するには、中間バージョンをビルドしてテストするか、bashに連絡してください。Gitリポジトリ。担当ラインは以下の通りです。
if (running_setuid && privileged_mode == 0)
disable_priv_mode ();
それ以来、周りにいた人々バージョン 2.0。過去を振り返るよりバージョン 1.14.7、bashは次を使用して、特権モードが明示的に無効になっている場合にのみ特権を削除します+p
。
case 'p':
if (on_or_off == '+')
{
setuid (current_user.uid);
setgid (current_user.gid);
current_user.euid = current_user.uid;
current_user.egid = current_user.gid;
}