ciscn_2019_n_8 来自buuctf

ciscn_2019_n_8

今天正式写自己第一博客园的博客,就从一道简单的pwn题目开始吧。鄙人最近在学习二进制安全,刷一些ctf的题目为比赛做准备。话不多说来看一下今天的题目吧

这到题来自buuctf的pwn题。比较简单。拿到文件我们先  file一下

 

 32位文件。放进32位的IDA中进行静态分析。

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v4; // [esp-14h] [ebp-20h]
  int v5; // [esp-10h] [ebp-1Ch]

  var[13] = 0;
  var[14] = 0;
  init();
  puts("What's your name?");
  __isoc99_scanf("%s", var, v4, v5);
  if ( *(_QWORD *)&var[13] )
  {
    if ( *(_QWORD *)&var[13] == 17LL )
      system("/bin/sh");
    else
      printf(
        "something wrong! val is %d",
        var[0],
        var[1],
        var[2],
        var[3],
        var[4],
        var[5],
        var[6],
        var[7],
        var[8],
        var[9],
        var[10],
        var[11],
        var[12],
        var[13],
        var[14]);
  }
  else
  {
    printf("%s, Welcome!\n", var);
    puts("Try do something~");
  }
  return 0;
}

这是反编译后的伪代码。如果var[13]==17就能调用system()函数拿到shell。var是个数组怎么修改var[13]的值呢。这时我们看到输入的只有scanf()函数,看scanf()的第一参数是var数组的首地址,我们就通过这里发送payload的把索引0到13都改为17也就是0x11

payload很简单我就不粘贴了小伙伴要动脑想一下。

 

posted @ 2021-08-17 16:41  Mua_Uncle_W  阅读(256)  评论(0)    收藏  举报