//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