RealWorld CTF6th高校体验赛

vision(Pwn, Panasonic(PCSL), difficulty:Baby)

  • 这里会先通过’ ‘截断进行strncpy,同时strncmp(v10, s2, v13)中的s2,v13都是可控的,输入sh -c “cat ./flag”。利用sh后的’ ‘,那么相当于strncmp(“showKey”,“sh”,2)因此就可以绕过 好经典的截断问题,一开始仔细看openthedoor看到伪随机数,结果发现 snprintf(a1, 8uLL, “cat ./flagx \n”)程序就结束了,根本用不了,最后在这里发现了漏洞
    memset(s2, 0, sizeof(s2));
    v11 = strchr(a1, ' ');
    if ( v11 )
    {
      strncpy(s2, a1, v11 - a1);
    }
    else
    {
      n = strlen(a1);
      strncpy(s2, a1, n);
    }
    v13 = strlen(s2);
    if ( v13 )
    {
      v7 = 0;
      v10 = off_4020[0];
      while ( strncmp(v10, s2, v13) )
      {
        v10 = off_4020[++v7];
        if ( !off_4020[v7] )
        {
          strcpy(a2, "Not Support 4. \n");
          return __readfsqword(0x28u) ^ v23;
        }
      }
    }

后面的题目不想复现了…