Como copiar o caractere BS (0x08) para a entrada do buffer overflow no GDB?

0

Eu preciso estourar um buffer com um valor específico que contenha 0x08. Se eu usar echo -ne "AA\x08A" , a saída será AA , pois o caractere de retrocesso e um A serão removidos.

Como copio esse valor para a entrada do meu programa vulnerável? Eu gostaria que fosse em GBD, então eu posso inspecionar a pilha depois.

    
por Post Self 01.10.2018 / 20:48

1 resposta

1

If I use echo -ne "AA\x08A", the output is AA, as the backspace character and one A are removed.

Parece apenas isso porque você imprime a saída para o terminal e o backspace tem um significado especial nesse caso: exclua o caractere anterior de forma semelhante ao que você alcança quando pressiona a tecla de retrocesso na tecla. Isso significa que ele exibirá o primeiro A, o segundo A, excluirá o segundo A e voltará após o primeiro A e exibirá o quarto caractere, ou seja, A:

 $ echo -ne "AA\x08A"
 AA

Mas, na realidade, ele imprimirá todos os quatro octetos - como mostra um display com hd (ou hexdump ou xxd ...):

 $ echo -ne "AA\x08A" | hd
 00000000  41 41 08 41                      |AA.A|

E os mesmos 4 caracteres também serão impressos em qualquer outro programa, como o seu script vulnerável ou algum script em perl:

$ echo -ne "AA\x08A" | perl -e 'print unpack("H*",<STDIN>),"\n"'
41410841
    
por 01.10.2018 / 20:56