GNU/Linux >> Linux の 問題 >  >> Linux

Bash 関数の操作の説明

setresuid() とは と setresgid()

この例をよりよく理解するために、これら 2 つの関数とそれらが取る 3 つのパラメーターを確認する必要があります。

この回答 (および credentials(7) のマニュアル ページ) から:

<ブロック引用>

Linux では、各プロセスに次のユーザー ID とグループ ID があります:

  • 実ユーザー ID と実グループ ID。これらの ID によって、プロセスの所有者が決まります。要約すると、これがあなたです .

  • 有効なユーザー ID と有効なグループ ID。これらの ID は、メッセージ キュー、共有メモリ、セマフォなどの共有リソースにアクセスするときにプロセスが持つアクセス許可を決定するために、カーネルによって使用されます。ほとんどの UNIX システムでは、これらの ID によって、ファイルにアクセスするときの権限も決定されます。ただし、Linux はこのタスクにファイル システム ID を使用します。要約すると、これができることです .

  • 保存された set-user-ID と保存された set-group-ID。これらの ID は、set-user-ID および set-group-ID プログラムで使用され、プログラムの実行時に設定された、対応する実効 ID のコピーを保存します。 set-user-ID プログラムは、実際のユーザー ID と保存された set-user-ID の値の間で有効なユーザー ID を切り替えることにより、特権を引き受けたり削除したりできます。要約すると、これが以前のあなたです .

さらに、SetUID-Bit を理解することが重要です。これが何をするかというと、それを呼び出した人ではなく、所有者の権限で実行可能プログラムを実行するということです。

セキュリティ nightmare

あなたの質問は、具体的に nightmare について言及しています root が所有しています SetUID-Bit が設定されています。これが意味することは、nightmare の実行を許可されているすべてのユーザーが、 基本的に root として実行します .これは、nightmare のすべての子プロセスが - system() を呼び出したときに生成されるなど - root としても実行されます .

しかし、実際には、setresuid() はどうなるのですか?

この文脈で?何もない。ユーザーはすでに root として実行しているため 、さらなる悪用にはまったく影響しません。

/dev/tty を使っていただけますか ?

この質問は、この文脈ではあまり意味がありません。文字列 /dev/tty がどこにあるかを確認するには、関連するコード スニペットを確認する必要があります。 から来ています。

if (open("/dev/tty", O_RDWR) != -1) {
        fire();
        rax = sub_4008d0();
}

これは、プログラムが /dev/tty を開こうとしていることを意味します 読み取りと書き込みのために、それが成功した場合、fire() を呼び出します .

bash 関数に /dev/tty() という名前を付ける open() のように、目的の結果が得られません。 最初のパラメーターとしてファイルへのパスが必要です。 bash から完全に独立しています また、bash 関数の概念はありません。

puts() はどうですか ?

同様に、これはあまり意味がありません。 strings は魔法ではなく、文脈を理解していません。印刷可能な ASCII 文字である一連のバイトを探すだけです。

puts() 文字列を出力する単なる C 関数です。

/usr/bin/aafire はどうですか ?

個人的に試したわけではありませんが、実際には /usr/bin/aafire のようです /usr/bin/sl -al の代わりに使用できた可能性があります .これが正しくない場合は、コメントしてください。この部分を編集します。

相対パスを使用しても機能しますか?

はい、実際にはさらに良いです! system() 内部的に sh -c を呼び出します $PATH を解決する必要があります sl を見つけるための変数 .パス変数が . を含むように変更された場合 または /usr/bin より優先度の高い他のユーザー書き込み可能なディレクトリ の場合、./sl をシンボリック リンクするだけです。 /bin/bash まで .

ルート SUID ファイルのバイナリ/ELF の種類は重要ですか?

はい、シェル スクリプトでは SetUID-Bit が無視されるためです。ネイティブ実行可能ファイルでなければなりません。


Linux
  1. Linuxユーザーとは何ですか?

  2. Env X =(){:;}; Command’Bashは、なぜそれが安全でないのですか?

  3. ユーザーグループルートの機能??

  1. シェル変数の関数?

  2. 「bash -c」は何をしますか?

  3. debian-+ ユーザーとは?

  1. 「exec{fd}/ watchdog」はBashで何をしますか?

  2. Bash初心者シリーズ#9:Bashでの関数の使用

  3. Bashでの$#の使用は何ですか