阅读文件时,_IO_ getc处的Segfault

时间:2014-07-13 20:23:17

标签: c file io segmentation-fault

我正在为我的学校设置一个基本的CTF,其中一个挑战是简单地分析二进制文件的ASM(x86),弄清楚它是如何工作的,并打破它。这一点很简单:向它推出37个论点,你就会被一个“旗帜”所吸引。用户读取目录中的标志,然后获得积分。

然而由于某种原因,当我阅读旗帜时我会受到分裂。

下面是代码:

void readflag()
{
        setgid(1401);
        char ch;
        FILE *fp;
        fp=fopen("argcimapirate.flag", "r");
        while( ( ch = fgetc(fp) ) != EOF )
                printf("%c",ch);
        fclose(fp);
}

int main(int argc, char* argv[])
{
        printf("ARRRRRRR!\n");
        if (argc == 37)
        {
                printf("Shiver me timbers...\n");
                readflag();
        }
        return 0;
}

此外,这是ls -l的输出以查看权限。

-r-sr-s--- 1 argcimapirate argcimapirate 8811 Jul 13 15:58 argcimapirate
-r-------- 1 root          root           335 Jul 13 15:58 argcimapirate.c
-r--r----- 1 flag          flag            17 Jul 11 21:12 argcimapirate.flag

任何想法,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

' ave解决了它们。

事实证明,标记用户需要拥有该文件,以便setuid / setgid升级到用户可以读取标志拥有的文件的位置。