back_door__ctf2015 team

0x0

看分數是600分, 實際就是100的題目了。直接看題的

0x1

  name = (const char *)malloc(0xC8u);
  flag = (const char *)malloc(0x64u);
  printf("Enter teamname: ");
  fflush(stdout);
  __isoc99_scanf("%200s", name);
  printf("Enter flag: ");
  fflush(stdout);
  __isoc99_scanf("%100s", flag);
  sleep(2u);
  sub_80486AD(name, flag);
  free((void *)name);
  free((void *)flag);
  return 0;
}
signed int __cdecl sub_80486AD(const char *name, const char *flag)
{
  signed int result; // eax@2
  int v3; // edx@7
  FILE *stream; // [sp+24h] [bp-74h]@1
  char s; // [sp+28h] [bp-70h]@3
  int v6; // [sp+8Ch] [bp-Ch]@1

  v6 = *MK_FP(__GS__, 20);
  stream = fopen("flag.txt", "r");
  if ( stream )
  {
    fgets(&s, 100, stream);
    printf(name);                               // ohno
    if ( !strcmp(&s, flag) )
      puts(" : correct flag!");
    else
      puts(" : incorrect flag. Try again.");
    fclose(stream);
    result = 0;
  }
  else
  {
    result = 1;
  }
  v3 = *MK_FP(__GS__, 20) ^ v6;
  return result;
}

一個很簡單的格式化字符串漏洞。本地建個flag.txt, gdb在printf下斷, 然後看一下stack, 發現flag就在棧了,在第10個偏移。直接%x *40 就ok了, 另外可以用 %p , 效果更好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章