如何使用新地址覆盖程序的返回地址

时间:2013-07-08 16:37:34

标签: c++ c assembly sh

我正在尝试利用格式字符串漏洞利用。我有一个易受snprintf()影响的程序,如下所示。我也有一个shellcode,我想跳转到。我的shellcode位于地址xbffff1c4,返回地址的指针位于x080486a4。 这是该计划的脆弱部分:

#define maxiargl 128

#include <stdlib.h>
#include <stdio.h>

static void usage(const char *sname) 
{
  fprintf(stderr, "Usage: %s <file>\n", sname);
  fprintf(stderr, "  where <file> is the file of interest\n");
}

static void argumCh(char *arg1, char *arg2) 
{
  char argum2[maxiargl], argum1[maxiargl];
  int  str1, str2;

// vunerable code

   str1 = snprintf(argum1, sizeof argum1, "%s%d%d%d%c%hn", arg1);
   str2 = snprintf(argum2, sizeof argum2, "%s%d%d%d%c%hn", arg2);

  if(str1 >= maxiargl)
    str1 = maxiargl - 1;
  argum1[str1] = '\0';

  if(str2 >= maxiargl)
    str2 = maxiargl - 1;
  argum2[str2] = '\0';

  printf("Arguments: '%s', '%s'\n", argum1, argum2);
}

int main(int argc, char **argv) 
{

  if(argc > 2) {
    usage(argv[0]);
    argumCh(argv[1], argv[2]);
    exit(EXIT_FAILURE);
  }


  return 0; 
}

这是我的开发代码

perl -e'print“\ xc4 \ xf1 \ xff \ xbf”;打印“a”;打印“a”;打印“a”;打印“a”x61885'

请注意,我在这里写的是地址xbffff1c4。 f1c4 = 61885 + 7字节 但这不起作用。我想知道如何指定我想写的地址,因为在这里我可以指定我写的地址。 如果有人可以帮助我,我真的很高兴

0 个答案:

没有答案