gdb调试suid程序时的一个问题
gdb调试suid程序时的一个问题
小利子 发表于3年前
gdb调试suid程序时的一个问题
  • 发表于 3年前
  • 阅读 7
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

//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
共有 人打赏支持
粉丝 4
博文 18
码字总数 5788
评论 (0)
×
小利子
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: