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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Cargar modulo del kernel Linux.
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Cargar modulo del kernel Linux.  (Leído 8,019 veces)
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Cargar modulo del kernel Linux.
« en: 22 Noviembre 2012, 17:21 pm »

Hola!

Veran estoy haciendo un pequeño codigo en asm que debe comprobar si se tienen permisos de root y si los tiene cargar un modulo del kernel. Al parecer hay una syscall que lo hace, la 0x31, pero he optado por llamar a la funcion de C(http://www.kernel.org/doc/man-pages/online/pages/man2/init_module.2.html). Tengo dos problemas:

-No se el tamaño de la struct image, y no lo encuentro por ninguna parte.
-No se con que hay que linkar o que hay que hacer para hacer un call a init_module, el assembler (nasm) me dice: 'symbol "init_module" undefined'.

Y en realidad tengo otro, y es que no se si tengo que rellenar la estructura o algo, no hay ejemplos ni nada, pero con eso ya me apaño.

Código
  1. extern init_module
  2. section .text
  3. global _start
  4.  
  5. _start:
  6.  
  7. xor eax,eax
  8. add eax,0x31
  9. int 0x80
  10. test eax,eax
  11. jz init
  12.  
  13. exit:
  14. xor eax,eax
  15. inc eax
  16. xor ebx,ebx
  17. or ebx,eax
  18. int 0x80
  19.  
  20. init:
  21. xor eax,eax
  22. or eax,80
  23. add eax,48
  24. push image
  25. jmp n
  26. m:
  27. call init_module
  28. jmp exit
  29.  
  30. n:
  31. call m
  32. name:
  33. db "mylkm.o",0
  34.  
  35.  
  36.  
  37. section .bss
  38.  
  39. image: resb (tamanio de struct image)

Saludos y gracias de antemano ;D

Edit: Tenia que declarar init_module como extern claro :') Ahora el ensamblador no me dice nada, pero el linker me salta con undefined reference to 'init_module'.


« Última modificación: 22 Noviembre 2012, 17:26 pm por 0xDani » 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
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #1 en: 22 Noviembre 2012, 18:17 pm »

Por lo segundo:
Donde está declarada/definida init_module, ¿está declarada como global? Porque si es static en su unidad de compilación no podés referenciarla desde tu programa en assembly.

O bueno, si es posible, incluir la librería linux/module.h


« Última modificación: 22 Noviembre 2012, 18:22 pm por Ferno » En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #2 en: 22 Noviembre 2012, 18:27 pm »

Puedo incluir linux/module.h en el programa en assembly? Es decir, puedo incluir headers de C en programas en assembly?
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
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #3 en: 22 Noviembre 2012, 18:42 pm »

Con intentar no perdes nada :P
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cargar modulo del kernel Linux.
« Respuesta #4 en: 23 Noviembre 2012, 01:13 am »

Proba con _init_module por el mangling de C y sino el tema es que tenes que pasarle el nombre de la libreria que exporta ese simbolo.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #5 en: 24 Noviembre 2012, 14:07 pm »

Tampoco funciona con _init_module. Va a ser que no linko con la libreria adecuada.
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: Cargar modulo del kernel Linux.
« Respuesta #6 en: 24 Noviembre 2012, 21:17 pm »

Hola

Voy a intentar ayudarte, veo algunas cosas mal.

Código
  1. init:
  2. xor eax,eax
  3. or eax,80
  4. add eax,48
  5. push image
  6. jmp n
  7. m:
  8. call init_module
  9. jmp exit
  10.  
  11. n:
  12. call m
  13. name:
  14. db "mylkm.o",0
  15.  
  16.  
  17.  
  18. section .bss
  19.  
  20. image: resb (tamanio de struct image)

No hace falta que incluyas ninguna libreria, ya tienes init_module en las llamadas al sistema la 128, cosa que haces con el or y el add, que no lo entiendo no es mejor con mov?

Requiere dos arg, el nombre y la estructura si no me equivoco, y tu metes uno en el stack.

Y en realidad tengo otro, y es que no se si tengo que rellenar la estructura o algo, no hay ejemplos ni nada, pero con eso ya me apaño.

¿Sabes rellenar una estructura en C?

Creo que es lo mismo.

Un saludo.

P.D: Hice algo parecido a una backdoor, tuve que rellenar la estructura sockaddr_in y la in_addr las quieres de ejemplo, o te quemas la cabeza tú solo?
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #7 en: 25 Noviembre 2012, 16:43 pm »

El or y el add los utilizo para que no me queden ceros en la sección .text del binario, porque pensaba utilizarlo como una especie de shellcode.

Los argumentos de la syscall son un puntero a void, un unsigned long y un puntero a char. El unico que se para que sirve es el puntero a char, que son los argumentos que se le pasan al modulo.

Y si, si se rellenar una estructura en C, de hecho es mi primer lenguaje, y ASM esta siendo mi segundo.

En cuanto a lo de la backdoor me vendria genial ver ese codigo, me lio mucho con los sockets en ASM.

Saludos!
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: Cargar modulo del kernel Linux.
« Respuesta #8 en: 25 Noviembre 2012, 17:20 pm »

Los argumentos de la syscall son un puntero a void, un unsigned long y un puntero a char. El unico que se para que sirve es el puntero a char, que son los argumentos que se le pasan al modulo.

La syscall init_module necesita dos argumentos un puntero a char y una estructura que es module si no me equivoco, tienes que rellenar la estructura y copiarla a %ecx creo.

En cuanto a lo de la backdoor me vendria genial ver ese codigo, me lio mucho con los sockets en ASM.

Código:
http://foro.elhacker.net/unixunixlike/ocultar_procesos-t376125.0.html

Un saludo.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #9 en: 25 Noviembre 2012, 18:42 pm »

Mira ahi vienen las syscalls, es la 128: http://syscalls.kernelgrok.com/
Lo que me confunde es el puntero a void, porque por el nombre de los parametros parece que el segundo es el tamaño de la zona de memoria a la que apunta el primero y el tercero los argumentos que se le pasan al modulo.

Gracias por el codigo!

Saludos.
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
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Modulo en Linux
Programación C/C++
ddmmvv12 6 4,991 Último mensaje 2 Abril 2011, 19:54 pm
por D4RIO
Módulo del kernel que interactúa con llamada al sistema (C)
Programación C/C++
kaostias 2 2,417 Último mensaje 30 Noviembre 2013, 14:25 pm
por kaostias
Codigo para cargar Drivers en el kernel
Programación C/C++
dapz 0 1,755 Último mensaje 17 Septiembre 2017, 17:45 pm
por dapz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines