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的權限了.shell

驗證方法:bash

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

打印出uid和euid,在調試的時候就能夠看出
ui

相關文章
相關標籤/搜索