我正在为我的学校设置一个基本的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
任何想法,请告诉我。谢谢!
答案 0 :(得分:0)
' ave解决了它们。
事实证明,标记用户需要拥有该文件,以便setuid / setgid升级到用户可以读取标志拥有的文件的位置。