私はコードを書きました:
// a.c
#include <stdlib.h>
int main () {
system("/bin/sh");
return 0;
}
コマンドでコンパイル:
gcc a.c -o a.out
その上にsetuidビットを追加しました:
sudo chown root.root a.out
sudo chmod 4755 a.out
Ubuntu 14.04で一般ユーザーとして実行すると、root権限を取得しました。
Ubuntu 16.04でも、現在のユーザーのシェルを取得しています。
なぜ違うのですか?
system("bash -p")
実行sh -c "bash -p"
時に特権がすでに削除bash
されているので、実行されます。