我最近编写了一个易受格式字符串漏洞影响的小程序。这是源代码(从书中复制):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char text[1024];
static int test_val = -72;
strcpy(text, argv[1]);
printf("The right way to print user-controlled input:\n");
printf("%s", text);
printf("\nThe wrong way to print user-controlled input:\n");
printf(text);
printf("\n");
printf("[*] test_val @ 0x%08x = %d 0x%08x\n", &test_val, test_val, test_val);
}
我想更改test_val变量的值,该变量具有以下地址:0x0040202c。 所以当我通过bash终端传递参数时:
./vuln "`python -c "print 'AAAA' + '\x2c\x20\x40\x00' + '%x ' * 5"`"
我得到以下输出
bash: warning: command substitution: ignored null byte in input
The right way to print user-controlled input:
AAAA, @%x %x %x %x %x
The wrong way to print user-controlled input:
AAAA, @bfffeed0 bfffef1c 4005f7 41414141 2540202c
[*] test_val @ 0x0040202c = -72 0xffffffb8
结果我在内存中找到了错误的地址(0x2540202c而不是0x0040202c)。
现在我的问题是:如何生成前导0并将它们作为我的程序的参数?