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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  [Videotuto] Exploit local linux 32 y 64 bits
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 Ir Abajo Respuesta Imprimir
Autor Tema: [Videotuto] Exploit local linux 32 y 64 bits  (Leído 19,692 veces)
Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #20 en: 5 Marzo 2011, 21:32 pm »

Hola Ivanchuk!!!

Gracias por toda la info que estás  posteando.
Bueno primero te comento la prueba:
He compilado el código que me has pasado y he hecho la prueba... ha fracado...
Ahora bien, estoy aún intentando entender lo que dices... perdona mi ignorancia pero me he perdido un pelín (para eso estoy aprendiendo).
Me imagino que esto que comentas lo estarás mirando en el /proc/kallsyms no¿?
Perdona si no te contesto con rapidez, casi no tengo tiempo para mirar el foro y hemos para probar.

Muchas gracias

Si mirando /proc/kallsyms y por como el exploit aprovecha el error. El error me cuesta un poco explicarlo pero te muestro con un ejemplo sino, imaginate que tenes un arreglo de punteros a chars
Código
  1. char *proto_tab[3];

Y que mas tarde tenes una funcion que hace esto
Código
  1. char *ptr = proto_tab[index];
  2.  

Y ponete a pensar que pasa si index es negativo, a donde apuntaria ptr?.

Ahi modifique el codigo para que obtengas un offset segun las config de tu kernel y ademas saque la definicion de proto del source del build de mi kernel que resulto ser un poco diferente al codigo que te puse antes (la idea seria que vos las saques del tuyo).
Código
  1. #include <linux/autoconf.h>
  2. #include <stdio.h>
  3.  
  4. #define CONFIG_COMPAT 1
  5.  
  6. struct proto {
  7. void *ptr_1[10];
  8. #ifdef CONFIG_COMPAT
  9. void *ptr_2[2];
  10. #endif
  11. void *ptr_3[8];
  12. #ifdef CONFIG_PROC_FS
  13. unsigned int inuse_idx;
  14. #endif
  15. void *ptr_4[7];
  16. int max_header;
  17. void *ptr_5[5];
  18. unsigned int obj_size;
  19. int slab_flags;
  20. // char name[32];
  21. };
  22.  
  23. int main() {
  24. printf("#define SYM_OFFSET 0x%x\n", sizeof(struct proto));
  25. }
  26.  

Compilalo asi
Código
  1. gcc -I/lib/modules/`uname -r`/build/include test.c
  2.  

Te cuento que lo compile y con CONFIG_COMPAT definida me dio 0x90, lo mismo que en el exploit. Si te da lo mismo, proba sacar el define CONFIG_COMPAT.

Bueno, fijate compilando ese codigo y contanos.

Si queres sacar exactamente el offset correcto no se me ocurre otra que dumpear la memoria virtual del kernel.

@andres_5:
Podes poner la version del kernel que tenes? Pegate la salida de
Código
  1. uname -r

Porq el error lo parchearon el 10 de enero.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
andres_5

Desconectado Desconectado

Mensajes: 200



Ver Perfil
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #21 en: 5 Marzo 2011, 21:55 pm »

Código:
andres@andres-desktop:~$ uname -a
Linux andres-desktop 2.6.32-26-generic #48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010 i686 GNU/Linux
andres@andres-desktop:~$
Nose si sere vulnerable, supuse que si era vulnerable porque mi kernel es mas antiguo que el del video, y "normalmente", pense que una version anterior no vendria corregida. Pero bueno si podeis confirmarmelo mejor.
PD: si ejecuto un par de veces el exploit, el ordenador se me queda pillado totalmente, y tengo que reiniciar.
Saludos
En línea

Algunos de mis proyectos sobre electronica -->
En Mi Canal de Youtube


Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #22 en: 6 Marzo 2011, 12:16 pm »

Deberia serlo entonces, sobre todo si te cuelga la maquina xD. Ahi me fije y si, deberia ser vulnerable el tuyo.
Debes tener un problema de offset tambien, probaste compilando el codigo que le pase m3st4ng para obtener el offset?
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
andres_5

Desconectado Desconectado

Mensajes: 200



Ver Perfil
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #23 en: 6 Marzo 2011, 18:14 pm »

Código:
andres@andres-desktop:~/Escritorio$ gcc -I/lib/modules/`uname -r`/build/include test.c -o test
andres@andres-desktop:~/Escritorio$ '/home/andres/Escritorio/test'
#define SYM_OFFSET 0x90
Aqui esta tu aplicacion compilada y ejecutada, nose que sucede :S

Una pregunta, si quisiese usarlo en otro PC entonces tendria que compilarlo en ese, y prepararlo?? o direcctamente se puede ejecutar??
Saludos ;)
En línea

Algunos de mis proyectos sobre electronica -->
En Mi Canal de Youtube


M3st4ng

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #24 en: 6 Marzo 2011, 23:30 pm »

Hola Ivanchuck!

He probado el código que me has pasado y tambien me ha devuelto 0x90...
No he comentado que mi version del kernel es la 2.6.37.
Te dejo mi estructura proto a ver si tiene algo de pecualiar

Código:
struct proto {
void (*close)(struct sock *sk,
long timeout);
int (*connect)(struct sock *sk,
        struct sockaddr *uaddr,
int addr_len);
int (*disconnect)(struct sock *sk, int flags);

struct sock * (*accept) (struct sock *sk, int flags, int *err);

int (*ioctl)(struct sock *sk, int cmd,
unsigned long arg);
int (*init)(struct sock *sk);
void (*destroy)(struct sock *sk);
void (*shutdown)(struct sock *sk, int how);
int (*setsockopt)(struct sock *sk, int level,
int optname, char __user *optval,
unsigned int optlen);
int (*getsockopt)(struct sock *sk, int level,
int optname, char __user *optval,
int __user *option); 
#ifdef CONFIG_COMPAT
int (*compat_setsockopt)(struct sock *sk,
int level,
int optname, char __user *optval,
unsigned int optlen);
int (*compat_getsockopt)(struct sock *sk,
int level,
int optname, char __user *optval,
int __user *option);
#endif
int (*sendmsg)(struct kiocb *iocb, struct sock *sk,
   struct msghdr *msg, size_t len);
int (*recvmsg)(struct kiocb *iocb, struct sock *sk,
   struct msghdr *msg,
size_t len, int noblock, int flags,
int *addr_len);
int (*sendpage)(struct sock *sk, struct page *page,
int offset, size_t size, int flags);
int (*bind)(struct sock *sk,
struct sockaddr *uaddr, int addr_len);

int (*backlog_rcv) (struct sock *sk,
struct sk_buff *skb);

/* Keeping track of sk's, looking them up, and port selection methods. */
void (*hash)(struct sock *sk);
void (*unhash)(struct sock *sk);
void (*rehash)(struct sock *sk);
int (*get_port)(struct sock *sk, unsigned short snum);
void (*clear_sk)(struct sock *sk, int size);

/* Keeping track of sockets in use */
#ifdef CONFIG_PROC_FS
unsigned int inuse_idx;
#endif

/* Memory pressure */
void (*enter_memory_pressure)(struct sock *sk);
atomic_long_t *memory_allocated; /* Current allocated memory. */
struct percpu_counter *sockets_allocated; /* Current number of sockets. */
/*
* Pressure flag: try to collapse.
* Technical note: it is used by multiple contexts non atomically.
* All the __sk_mem_schedule() is of this nature: accounting
* is strict, actions are advisory and have some latency.
*/
int *memory_pressure;
long *sysctl_mem;
int *sysctl_wmem;
int *sysctl_rmem;
int max_header;
bool no_autobind;

struct kmem_cache *slab;
unsigned int obj_size;
int slab_flags;

struct percpu_counter *orphan_count;

struct request_sock_ops *rsk_prot;
struct timewait_sock_ops *twsk_prot;

union {
struct inet_hashinfo *hashinfo;
struct udp_table *udp_table;
struct raw_hashinfo *raw_hash;
} h;

struct module *owner;

char name[32];

struct list_head node;
#ifdef SOCK_REFCNT_DEBUG
atomic_t socks;
#endif
};

Aún así, no entiendo cómo el exploit apunta a esta estructura. ¿A qué parte de ella apunta,a toda o sólo a una parte?
En línea

M3st4ng

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #25 en: 6 Marzo 2011, 23:52 pm »

Hola!!!

Lo acabo de probar con otra version del kernel, la 2.6.35 y sí que me ha funcionado..... En la 2.6.37 me imagino que estará parcheado. De todos modos, no sé cómo narices funciona este exploit aún, y es algo que me fastidia...

Salu2
En línea

Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #26 en: 7 Marzo 2011, 23:49 pm »

No he comentado que mi version del kernel es la 2.6.37.
neeee, hubieses empezado por ahi!! :xD

Aún así, no entiendo cómo el exploit apunta a esta estructura. ¿A qué parte de ella apunta,a toda o sólo a una parte?
La idea es buscar cuantos bytes tenes hasta el campo char name[32] y eso se le mandas como offset.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
andres_5

Desconectado Desconectado

Mensajes: 200



Ver Perfil
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #27 en: 8 Marzo 2011, 00:47 am »

yo sigo sin hacerlo funcionar, alguna idea, mi kernel es supuestamente vulnerable, a veces cuando lo ejecuto me muestra los mismo pero al final me pone terminado(killed) y si luego lo vuelvo a ejecutar, me hace un bloqueo general del PC.
Si sabeis algo que pueda probar, lo agradeceria.
Saludos
En línea

Algunos de mis proyectos sobre electronica -->
En Mi Canal de Youtube


M3st4ng

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #28 en: 8 Marzo 2011, 13:35 pm »


Citar
La idea es buscar cuantos bytes tenes hasta el campo char name[32] y eso se le mandas como offset.

Mmmm entonces si no he entendido mal, esto es lo que se supone que hace:

1. Se le pasa a la función socket el protocolo -70
2. Esto hace que proto_tab[protocol] apunte a direcciones más baja:
Código:
0xf8??????     proto {
                               .....
                               .....
                 
                                char name[32];  <-- proto_tab[-70] apuntaria aquí
                              }

0xf8??????     proto_tab{

                                   }

3. La varible "name" tiene valor PHONET, que transformado a Hex y cogiendo 4 bytes (PHON) es 0x4e4f4850

4. En esta dirección en memoria es donde tenemos nuestras estructuras falsas creadas

5. Al hacer la llamada ioctl hacemos que se ejecute el "getroot" de nuestra estructura

¿El exploit funciona como digo?

En línea

Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: [Videotuto] Exploit local linux 32 y 64 bits
« Respuesta #29 en: 8 Marzo 2011, 14:08 pm »

Mmmm entonces si no he entendido mal, esto es lo que se supone que hace:

1. Se le pasa a la función socket el protocolo -70
2. Esto hace que proto_tab[protocol] apunte a direcciones más baja:
Código:
0xf8??????     proto {
                               .....
                               .....
                 
                                char name[32];  <-- proto_tab[-70] apuntaria aquí
                              }

0xf8??????     proto_tab{

                                   }

3. La varible "name" tiene valor PHONET, que transformado a Hex y cogiendo 4 bytes (PHON) es 0x4e4f4850

4. En esta dirección en memoria es donde tenemos nuestras estructuras falsas creadas

5. Al hacer la llamada ioctl hacemos que se ejecute el "getroot" de nuestra estructura

¿El exploit funciona como digo?



Exactamente! Mejor explicado imposible.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
Páginas: 1 2 [3] 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Exploit para kernel Linux 2.6.x permite la elevación local de privilegios
Noticias
wolfbcn 2 2,933 Último mensaje 12 Diciembre 2010, 20:10 pm
por Randomize
sqli+bug+exploit=videotuto
Nivel Web
ruben_linux 4 3,633 Último mensaje 26 Agosto 2011, 13:05 pm
por ruben_linux
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines