gdb调试suid程序时的一个问题

//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的权限了.

验证方法:

        printf("uid:%d,euid:%d\n",getuid(),geteuid());
        printf("yes\n");
        setuid(0);
        system("/bin/bash");

打印出uid和euid,在调试的时候就可以看出

你可能感兴趣的:(linux)