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


 


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


Desconectado Desconectado

Mensajes: 1.072


Fuck the system!


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

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 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 »

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 por Ferno » En línea

0xDani


Desconectado Desconectado

Mensajes: 1.072


Fuck the system!


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

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 »

Con intentar no perdes nada :P
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.026


La mano invisible del mercado me robo la billetera


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

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.072


Fuck the system!


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

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
cpu2


Desconectado Desconectado

Mensajes: 724


Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #6 en: 24 Noviembre 2012, 21:17 »

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.072


Fuck the system!


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

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
cpu2


Desconectado Desconectado

Mensajes: 724


Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #8 en: 25 Noviembre 2012, 17:20 »

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.072


Fuck the system!


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

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
cpu2


Desconectado Desconectado

Mensajes: 724


Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #10 en: 26 Noviembre 2012, 18:58 »

Mira esta tabla:

Código:
http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

Verás que requiere lo que te dije anteriormente, para salir de dudas busca la syscall en syscall.h, hay te dira los arg que requiere.

Código:
/usr/include/sys/syscall.h

El primero es el nombre del módulo creo, el segundo es la estructura te puedes guiar con las de mi código.

Un saludo.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.072


Fuck the system!


Ver Perfil
Re: Cargar modulo del kernel Linux.
« Respuesta #11 en: 27 Noviembre 2012, 16:01 »

Esa tabla de syscalls es para el kernel 2.2 Ademas sigo sin encontrar por ninguna parte el tamaño de la estructura image.

Gracias por la ayuda y 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] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
modulo de kernel para Palm Tungsten T3
GNU/Linux
manutenfruits 2 433 Último mensaje 24 Abril 2007, 16:35
por manutenfruits
como cargar un modulo de asm en c ++ ||
Programación C/C++
dummy001 1 685 Último mensaje 29 Abril 2008, 17:13
por Eternal Idol
Lentitud al cargar el kernel
GNU/Linux
Leber 7 856 Último mensaje 16 Junio 2008, 20:57
por ^Tifa^
Cargar modulo nuevo sin recompilar kernel?
GNU/Linux
EvilGoblin 6 3,353 Último mensaje 3 Abril 2010, 19:11
por EvilGoblin
Módulo del kernel que interactúa con llamada al sistema (C)
Programación C/C++
kaostias 2 421 Último mensaje 30 Noviembre 2013, 14:25
por kaostias
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines