現在のバージョン

現在のバージョン

私はバッファオーバーフロー攻撃を試してきましたが、それを使ってsystem("/bin/bash")ルートシェルを取得できると思います。

だから私は読んで出荷書類ビーチsystem()

それは言う:

system()実際、/bin/shbashバージョン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から権限を削除するための追加の説明と正確性。
  • -pbashがビルドされたときに権限を維持するオプションを使用できます。

答え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;
      }

関連情報