//filename:a.c #include<stdio.h> #include<stdlib.h> void main() { int a=0; if(a==1) { printf("yes\n"); setuid(0); system("/bin/bash"); } else { printf("no\n"); } }
gcc a.c -o a chmod u+s a gdb調試a的時候,讓a==1成立,執行裏面的語句,"yes"字符串能夠打印出來,不過卻沒有root權限的shell.
緣由:gdb調試的時候,a的euid(有效用戶ID)已經不是0,也就是說它已經沒有root的權限了.shell
驗證方法:bash
printf("uid:%d,euid:%d\n",getuid(),geteuid()); printf("yes\n"); setuid(0); system("/bin/bash");
打印出uid和euid,在調試的時候就能夠看出
ui