读取文件时在_IO_uugetc处出现SEGFULT
我正在为我的学校建立一个基本的CTF,其中一个挑战就是简单地分析二进制文件的ASM x86,找出它是如何工作的,并打破它。这一个很简单:推37个参数到它,你得到一个'flag'用户,读取目录中的标志,你得到分数 但是由于某种原因,当读取标志时,我会出错 代码如下:读取文件时在_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"
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成功了吗?机会是。。。