back_door__ctf2015 team

本文详细解析了一个简单的格式化字符串漏洞实例,并通过本地建立文件和使用gdb调试来定位漏洞位置。通过分析代码,作者展示了如何利用格式化字符串漏洞进行攻击,并提供了修复方法。重点介绍了如何在栈中获取敏感信息并进行验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 , 效果更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值