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

移动开发云端新模式探索实践 >>>   

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