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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Aporte][Mini-Tutorial] Conseguir una shell root en Linux (truco LD_PRELOAD)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte][Mini-Tutorial] Conseguir una shell root en Linux (truco LD_PRELOAD)  (Leído 3,834 veces)
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
[Aporte][Mini-Tutorial] Conseguir una shell root en Linux (truco LD_PRELOAD)
« en: 17 Febrero 2013, 16:16 pm »

Bien, pues estaba aburrido y me se me ocurrio que podia probar este viejo truco para ascender privilegios. Me funciono y he decidido hacer un pequeño tutorial como aporte.

Este metodo ha sido probado en un Ubuntu 12.04, y puede ser que en otros sistemas el linker no cargue las librerias de LD_PRELOAD primero si se usa con ejecutables setuid.

Materiales:

 - Un compilador de C (se usara gcc)
 - Una shell Unix (probado con bash)
 
1. LD_PRELOAD

LD_PRELOAD es una variable de entorno usada por el ld. ¿Como funciona? Pues si esta variable contiene la ruta de una libreria dinamica, el ld la cargara antes que las otras librerias requeridas por el programa, incluida la libc.

Esto hace que se puedan "sobreescribir" funciones, cambiando el comportamiento de algunos programas. Y esto es lo que vamos a hacer.

2. Accion

Lo que vamos a hacer es "sobreescribir" las funciones getuid y geteuid, para que retornen siempre 0 (indicando que somos root ;)).

Lo primero que tenemos que hacer es crear una libreria dinamica que sobreescriba estas funciones:

Código
  1. /* hook.c */
  2.  
  3. #include <sys/types.h>
  4.  
  5. uid_t getuid()
  6. {
  7. return 0;
  8. }
  9.  
  10. uid_t geteuid()
  11. {
  12. return 0;
  13. }

Compilamos:

Código:
$ gcc -c -fPIC hook.c -o libhook.o
$ gcc -shared -fPIC libhook.o -o libhook.so

Y ejecutamos el bash con LD_PRELOAD seteada:

Código:
$ LD_PRELOAD=ruta/a/libreria/libhook.so bash

Salida:

Código:
root@computer_name:~# whoami
root

Y voilà!

Bueno espero que les haya gustado, se esperan comentarios ;)

EDIT: Quiza pegue mas en Hacking Linux/Unix o en algun otro subforo, ponganlo donde quieran.


« Última modificación: 17 Febrero 2013, 16:54 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
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: [Aporte][Mini-Tutorial] Conseguir una shell root en Linux (truco LD_PRELOAD)
« Respuesta #1 en: 17 Febrero 2013, 21:36 pm »

Muy interesante, cuando este en linux lo pruebo.


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: [Aporte][Mini-Tutorial] Conseguir una shell root en Linux (truco LD_PRELOAD)
« Respuesta #2 en: 17 Febrero 2013, 22:02 pm »

Muy interesante, cuando este en linux lo pruebo.

Ya digo que en muchos sistemas puede no funcionar, de hecho en la man page del ld se indica que para binarios setuid la variable LD_PRELOAD es ignorada, pero el caso es que a mi me ha funcionado en Ubuntu 12.04, que es una distro bastante popular.

Y en cualquier caso por probar no pierdes nada xD
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
Miky Gonzalez

Desconectado Desconectado

Mensajes: 87

http://mikygonzalez.comule.com/blog/


Ver Perfil WWW
Re: [Aporte][Mini-Tutorial] Conseguir una shell root en Linux (truco LD_PRELOAD)
« Respuesta #3 en: 18 Febrero 2013, 20:16 pm »

Muy interesante, funciona el obtener uid=root. Pero que no se confunda la gente porfavor, esto no da privilegios, solo engaña al shell ;)
En línea

Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:


EN CONSTRUCCIÓN
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: [Aporte][Mini-Tutorial] Conseguir una shell root en Linux (truco LD_PRELOAD)
« Respuesta #4 en: 19 Febrero 2013, 16:09 pm »

Muy interesante, funciona el obtener uid=root. Pero que no se confunda la gente porfavor, esto no da privilegios, solo engaña al shell ;)

Pues es verdad, fallo mio.

Por lo visto el bash que estoy usando no tiene privilegios:

Código:
$ strace bash
...
setuid32(0)                             = -1 EPERM (Operation not permitted)
getgid32()                              = 1000
setuid32(0)                             = -1 EPERM (Operation not permitted)
...

Pues nada, a seguir probando...  :-(
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:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines