Título: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: illera88 en 24 Enero 2011, 20:35 pm (http://cerebro-digital.com/noticias/wp-content/uploads/2010/09/ae2744108fgoogle.jpg.jpg)
Hola a todos. Estos días han sido un poco raros y aún sigo con exámenes a si que hacía bastante tiempo que no hacía un videotutorial. En este lo que hago es una elevación de privilegios en un SO linux (en este caso Kubuntu). Este es el nombre que le han dado en Exploit-DB: Linux Kernel CAP_SYS_ADMIN to Root Exploit 2 (32 and 64-bit). Culquier duda que tengáis ya sabéis que dejáis un comentario e intentaré solucionárosla. La música del vídeo es a cargo de Full House (http://www.myspace.com/fullhousesalamanca) un grupo de 5 tarados que siempre están ahí cuando se les necesita. Recomiendo que escuchéis sus canciones pero nunca nunca a ellos filosofando sobre la vida, mujeres... Espero que os guste el vídeo: http://www.youtube.com/embed/f4GPfuH8Hlw FUENTE: www.metasploiter.com Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: EvilGoblin en 19 Febrero 2011, 15:41 pm No lo habia visto, hoy a la noche lo pruebo en Slackware y modifico aca avisando que tal me fue ^^
Gracias! muy bueno para tenerlo en el pendrive :P Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: EvilGoblin en 19 Febrero 2011, 21:07 pm Código: bash-4.1# setcap cap_sys_admin+ep exploit No me funciono, no encontro CAP_SYS_ADMIN Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Shell Root en 20 Febrero 2011, 01:02 am Funciona, pero hay que tener instalado lo siguiente,
Código
Output: Código
Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Garfield07 en 20 Febrero 2011, 12:31 pm xD y si no lo tengo instalado cómo lo instalo? xD
Vale, un detalle... Código: alex@shellroot:~/Escritorio$ sudo setcap cap_sys_admin+ep PoC Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: xassiz~ en 20 Febrero 2011, 13:31 pm Una cosilla... ¿qué es setcat? xD Citar Name :silbar:setcap - set file capabilities Synopsis setcap capabilities filename [ ... capabilitiesN fileN ] Description setcap sets the capabilities of each specified filename to the capabilities specified. The capabilities are specified in the form described in cap_from_text (http://linux.die.net/man/3/cap_from_text)(3). The special filename, '-', can be used to indicate that capabilities are read from the standard input. In such cases, the capability set is terminated with a blank line. Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Garfield07 en 20 Febrero 2011, 13:50 pm Que se entiende como "capacidades de un archivo"? :¬¬
Entended que eso no viene preinstalado, y si no usas algo en linux no lo utilizas. Vamos, yo no lo tengo instalado, así que el exploit no funciona. En resumen, no es un exploit del kernel, es de un complemento del kernel. Eso es importante xD. De todos modos buen aporte :) __________________________________________________ Una cosa... ¿dónde buscas qué es cada comando? En el man no sale, y en google te sale una empresa rarísima por toda la página. Si eso me lo mandas por PM que me hace falta xD; lo he buscado y ni idea :P Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: xassiz~ en 20 Febrero 2011, 13:52 pm Una cosa... ¿dónde buscas qué es cada comando? En el man no sale, y en google te sale una empresa rarísima por toda la página. Si eso me lo mandas por PM que me hace falta xD; lo he buscado y ni idea :P Here (http://linux.die.net/man/8/setcap)Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: EvilGoblin en 20 Febrero 2011, 18:18 pm Sagrini como te dijeron, el exploit lo armas en tu PC con acceso a ROOT y lo ejecutas en una maquina donde no tenga acceso a root.
yo tengo instalado libcap pero no libcap2, y es necesario que en la maquina que se ejecute tenga instalado libcap2 ???? Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Lunfardo en 20 Febrero 2011, 19:17 pm Código:
=( , que habra pasado ? Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Garfield07 en 20 Febrero 2011, 21:08 pm Sagrini como te dijeron, el exploit lo armas en tu PC con acceso a ROOT y lo ejecutas en una maquina donde no tenga acceso a root. Yo pensaba que sí es necesario... Por eso lo decía xDyo tengo instalado libcap pero no libcap2, y es necesario que en la maquina que se ejecute tenga instalado libcap2 ???? De todos modos, primero hay que saber acceder xD y aún estoy peleado con el serv de pruebas que me he hecho... Suerte! Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng en 24 Febrero 2011, 23:59 pm Hola!!!
Estaba probando este exploit y a mi no me ha funcionado: Código: [*] Testing Phonet support and CAP_SYS_ADMIN... He estado intentando entender cómo funciona y qué es lo que hace y no me queda del todo claro. Entiendo que te copias en memoria una serie de estructuras con las funciones mmap y memcpy. Pero a partir de aqui ya me pierdo Código: proto = -((proto_tab - low_kern_sym) / sizeof(void *)); De hecho a mi lo que me falla es la creación del socket, ¿por qué se le pasa como protocolo (proto) un -70 (proto = -((proto_tab - low_kern_sym) / sizeof(void *)) al socket? Gracias de antemano Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk en 26 Febrero 2011, 23:58 pm Código: bash-4.1# setcap cap_sys_admin+ep exploit No me funciono, no encontro CAP_SYS_ADMIN Capaz q ya lo solucionaste, pero no te funcionaba porq no tenes el kernel compilado para debug, con todos los simbolos. Te podes fijar a mano si tenes al menos el primer simbolo definido: Código: cat /proc/kallsyms | grep proto_tab Hola!!! Estaba probando este exploit y a mi no me ha funcionado: Código: [*] Testing Phonet support and CAP_SYS_ADMIN... He estado intentando entender cómo funciona y qué es lo que hace y no me queda del todo claro. Entiendo que te copias en memoria una serie de estructuras con las funciones mmap y memcpy. Pero a partir de aqui ya me pierdo Código: proto = -((proto_tab - low_kern_sym) / sizeof(void *)); De hecho a mi lo que me falla es la creación del socket, ¿por qué se le pasa como protocolo (proto) un -70 (proto = -((proto_tab - low_kern_sym) / sizeof(void *)) al socket? Gracias de antemano Te falla porq capaz q no es vulnerable el driver. El error lo explica maso por arriba Dan Rosenberg en su exploit: Código: /* This exploit leverages a signedness error in the Phonet protocol. By Eso, el error esta en el driver del protocolo de red phonet. Parece ser que cuando se le pasa un valor negativo a socket() se pueden sobreescribir ciertas estructuras en el driver. Entre ellas, la q define el manejador de las ioctl. Código: const struct proto_ops_skel fake_proto_ops2 = { Igual Rosenberg la pinta como q es mucho mas complicado, asi q calculo que el error debe tener su historia. Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk en 1 Marzo 2011, 00:05 am Para los que les interese sigo spammeando xD.
Clonee el source del kernel y encontre el error en net/phonet/af_phonet.c:40 Código: static struct phonet_protocol *phonet_proto_get(int protocol) En el if se puede ver el error de signo. Aprovecha proto_tab[protocol] para apuntar a las estructuras en espacio de usuario! Se las rebuscan re bien... Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng en 1 Marzo 2011, 22:56 pm Hola!!
En mis fuentes esta igual, pero a mi no me funciona (ya postee anteriormente). Dejo aqui el codigo de mi source: Código: static struct phonet_protocol *phonet_proto_get(int protocol) Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk en 2 Marzo 2011, 19:41 pm mmh, estuve viendo y no llego a nada concreto,
Código
Pasado en limpio: Código
Da la impresion que trata de referenciar la estructura pn_dgram_proto (net/phonet/datagram.c:200) que esta justo despues de pn_proto. Con proto_tab - (pn_proto +SYM_OFFSET) llevas el puntero proto_tab[] 70 lugares mas arriba (direcciones bajas) justo despues de pn_proto para apuntar a pn_dgram_proto que es una estructura de tipo phonet_protocol, o sea que en teoria deberia pasar todas las verificaciones correctamente. Si esa es la idea entonces lo que puede pasar es que tu SYM_OFFSET no se corresponda con tu driver. El valor que le tenes que meter es el tamaño de pn_proto (include/net/sock.h:726). Igual no estoy seguro porque si quisiese agarrar un puntero a pn_dgram_proto ya lo habria sacado desde /proc/kallsyms directamente evitandose la macro SYM_OFFSET. Por eso sigo confundido, todavia no se como hace para que se referencien las estructuras falsas a partir de la dir SYM_ADDRESS. Porque por lo que pude entender es esa la idea, las estructuras son las mismas que las variables phonet_dgram_ops (net/phonet/socket.c:461) y pn_dgram_proto (net/phonet/datagram.c:200). Y encima estan bien armadas para pasar las verificaciones (try_module(), sock_type, etc) agarrando un puntero a pn_proto y falsificando el otro puntero para cambiar la ioctl: Código
Seguire viendo a ver si llego a algo... Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk en 2 Marzo 2011, 20:23 pm Se me acaba de ocurrir que sea posible que justo al offset pn_proto + SYM_OFFSET exista el valor SYM_ADDRESS y de esa manera referenciar las estructuras falsas! De hecho ahi me fije y mirando bien encontre algo interesante:
SYM_ADDRESS = 0x4e4f4850 pasandolo a ascii (sisi a ascii!) ===> "NOHP" ... "PHON" en little endian ;D Y mirando pn_proto Código
Mirando la estructura proto: Código
Si cuando se compilo tu kernel esas macros que se ven estaban activadas habria que contar la cantidad de bytes que tenes hasta name y ponerle ese valor a SYM_OFFSET. Sinceramente muy bueno lo de Joe Sylve usando el string "PHONET" para referenciar sus estructuras. Comparado al exploit de Rosenberg, le cago a cachetadas ;D, le tiro una onda "Rose, dejame a mi que vos no tenes ni idea" jaja. Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk en 3 Marzo 2011, 18:03 pm M3st4ng,
Capaz que no me explique muy bien. Para resumir el valor que necesitas ponerle a SYM_OFFSET lo podes sacar asi: Código
Compilalo con g++, ejecutalo y proba con el valor que te tire. Los punteros que le agregue los conte de la estructura proto que tengo definida en include/net/sock.h:726, te la pego aca para que la puedas comparar con la tuya. Código
Proba y avisanos como te fue! Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng en 3 Marzo 2011, 23:28 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). Citar proto_tab - (pn_proto +SYM_OFFSET) llevas el puntero proto_tab[] 70 lugares mas arriba (direcciones bajas) justo despues de pn_proto para apuntar a pn_dgram_proto que es una estructura de tipo phonet_protocol, o sea que en teoria deberia pasar todas las verificaciones correctamente. 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 Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: andres_5 en 4 Marzo 2011, 14:13 pm Código:
=( , que habra pasado ? Código: andres@andres-desktop:~/Escritorio$ gcc -w exploit.c -o exploit Saludos Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk 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
Y que mas tarde tenes una funcion que hace esto Código
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
Compilalo asi Código
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
Porq el error lo parchearon el 10 de enero. Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: andres_5 en 5 Marzo 2011, 21:55 pm Código: andres@andres-desktop:~$ uname -a PD: si ejecuto un par de veces el exploit, el ordenador se me queda pillado totalmente, y tengo que reiniciar. Saludos Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk 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? Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: andres_5 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 Una pregunta, si quisiese usarlo en otro PC entonces tendria que compilarlo en ese, y prepararlo?? o direcctamente se puede ejecutar?? Saludos ;) Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng 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 { 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? Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng 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 Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk 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!! :xDAú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.Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: andres_5 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 Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng 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 { 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? Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk 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 { 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. Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng en 8 Marzo 2011, 17:54 pm Otra cosa, como no he visto en ningún lado que la version del kernel 2.6.37 no sea vulnerable, voy a intentar a ver si consigo hacer andar el exploit...
Citar Si queres sacar exactamente el offset correcto no se me ocurre otra que dumpear la memoria virtual del kernel. ¿Cómo podría hacer esto que dices para revisar la memoria y localizar la varible "char name" en tiempo de ejecución?Gracias! Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk en 9 Marzo 2011, 09:04 am Tendrias q hacerte un driver o modulo. Hay un driver que viene con el kernel que se llama mem y lo podes acceder desde /dev/mem, con ese podes leer direcciones fisicas de memoria. Ese mismo driver, dependiendo de como se compilo, te permite leer tambien la memoria virtual del kernel accediendolo a traves de /dev/kmem, yo no lo tengo.
Si tenes kmem, fijate que aca tenes un ejemplo de uso de /dev/mem, kmem seria maso lo mismo ftp://ftp.buici.com/pub/arm/devmem/devmem2.c Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng en 9 Marzo 2011, 23:27 pm Hola!
Yo tampoco tengo el dispositivo /dev/kmem.... la verdad que ver la memoria real no me sirve de mucho..... Tengo una duda existencial (que desde luego no iria en este foro), cuando con el "gdb" ves todas las direcciones que salen, tanto la de las instrucciones como las de la pila, esas direcciones son virtuales ¿verdad? y siendo esto cierto, desde 0x00000000 hasta 0xFFFFFFFF ¿sería todo el espacio de direcciones virtuales del proceso? Volviendo al tema, voy a seguir a ver si encuentro otra manera de hacer dump de la memoria virtual. Salu2 Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: Ivanchuk en 10 Marzo 2011, 10:26 am cuando con el "gdb" ves todas las direcciones que salen, tanto la de las instrucciones como las de la pila, esas direcciones son virtuales ¿verdad? y siendo esto cierto, desde 0x00000000 hasta 0xFFFFFFFF ¿sería todo el espacio de direcciones virtuales del proceso? Desde gdb ves las direcciones virtuales del proceso si, pero el espacio de dirs no va desde la 0 hasta la 0xffffffff. O sea, en realidad cada proceso tiene ciertos espacios asignados, alguno de ellos estan definidos en el elf (VMA)Código
En /proc/<pid>/maps podes ver el mapeo de memoria asignado a cada proceso que tenes corriendo. Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: andres_5 en 17 Marzo 2011, 20:12 pm Hola, al final me he quedado sin poder probar el exploit, me hacia ilusion, porque aunque he escuchado mucho sobre los exploits, nunca he tenido la posiblidad de usar uno, si alguien puede echarme un cable lo agradeceria.
Saludos 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 Título: Re: [Videotuto] Exploit local linux 32 y 64 bits Publicado por: M3st4ng en 17 Marzo 2011, 23:39 pm Hola!
Muchas veces para hacer funcionar un exploit hay que "pegarse" con él. Revisa todo lo que ha comentado Ivan en este hilo para entender lo que debe hacer... A priori tu kernel es vulnerable pero puede haber varios factores que puedan hacer que no lo sea... Por otro lado, Ivan, compile de nuevo el kernel 2.6.37 para habilitar el dispositivo /proc/kmem. He intentado usar el código que me paseste, pero me da error de IO: Código: ./a.out 0xbffff65e He intentado investigar por la red, y no he visto nada claro sobre el problema... Ultimamente estoy super liado con el trabajo, si puedo te contesto tan rapido como pueda. Salu2 |