Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取文件时在_IO_uugetc处出现SEGFULT_C_File_Io_Segmentation Fault - Fatal编程技术网

读取文件时在_IO_uugetc处出现SEGFULT

读取文件时在_IO_uugetc处出现SEGFULT,c,file,io,segmentation-fault,C,File,Io,Segmentation Fault,我正在为我的学校建立一个基本的CTF,其中一个挑战就是简单地分析二进制文件的ASM x86,找出它是如何工作的,并打破它。这一个很简单:推37个参数到它,你得到一个'flag'用户,读取目录中的标志,你得到分数 但是由于某种原因,当读取标志时,我会出错 代码如下: void readflag() { setgid(1401); char ch; FILE *fp; fp=fopen("argcimapirate.flag", "r"

我正在为我的学校建立一个基本的CTF,其中一个挑战就是简单地分析二进制文件的ASM x86,找出它是如何工作的,并打破它。这一个很简单:推37个参数到它,你得到一个'flag'用户,读取目录中的标志,你得到分数

但是由于某种原因,当读取标志时,我会出错

代码如下:

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
如果有任何想法,请告诉我。谢谢

伙计们,我已经解决了


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

什么是CTF?大概在fopen之后fp是空的。为什么您认为用户/组argcimapirate可以访问用户/组标志?嗯,程序集在哪里?1。这将被编译并保存为二进制文件进行静态分析。2.我以为setgid会让他们访问该文件?你怎么知道gid 1401是组标志?你验证setgid成功了吗?改变是失败的。你检查过fopen成功了吗?机会是。。。