Creando un Exploit Paso a Paso

DragonJAR 336x280 Creando un Exploit Paso a Paso

¿Cómo encontrar vulnerabilidades, escribir código shell,  aprovechar la vulnerabilidad encontrada y finalmente, convertirlo en un módulo de Metasploit?, son algunas de las interrogantes que alguna vez nos hemos realizado y David Hoelzer , Senior Fellow en el Instituto SANS  nos las resuelve con esta serie de vídeo tutoriales.

76467174 Creando un Exploit Paso a Paso

En los siguientes videoturiales, aprenderemos de la mano de David Hoelzer, como crear un Exploit paso a paso y convertirlo en un modulo de Metasploit para después utilizarlo con este excelente framework; aunque los vídeos se encuentran en ingles, son bastante prácticos y visuales, con lo que no tendremos ningún problema al seguirlos.

El código utilizado en los vídeos fue:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define PORT “7777” // the port users will be connecting to

#define BACKLOG 10 // how many pending connections queue will hold

void vulnerable(char *net_buffer)
{
char local_buffer[120];
strcpy(local_buffer, net_buffer);
return;
}

void sigchld_handler(int s)
{
while(waitpid(-1, NULL, WNOHANG) > 0);
}

// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}

return &(((struct sockaddr_in6*)sa)->sin6_addr);
}

int main(void)
{
int sockfd, new_fd; // listen on sock_fd, new connection on new_fd
struct addrinfo hints, *servinfo, *p;
struct sockaddr_storage their_addr; // connector’s address information
socklen_t sin_size;
struct sigaction sa;
int yes=1;
char in_buffer[20], out_buffer[20], net_buffer[2048];
char s[INET6_ADDRSTRLEN];
int rv;

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE; // use my IP

if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) {
fprintf(stderr, “getaddrinfo: %s\n”, gai_strerror(rv));
return 1;
}

// loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror(“server: socket”);
continue;
}

if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,
sizeof(int)) == -1) {
perror(“setsockopt”);
exit(1);
}

if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror(“server: bind”);
continue;
}

break;
}

if (p == NULL) {
fprintf(stderr, “server: failed to bind\n”);
return 2;
}

freeaddrinfo(servinfo); // all done with this structure

if (listen(sockfd, BACKLOG) == -1) {
perror(“listen”);
exit(1);
}

sa.sa_handler = sigchld_handler; // reap all dead processes
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if (sigaction(SIGCHLD, &sa, NULL) == -1) {
perror(“sigaction”);
exit(1);
}

printf(“server: waiting for connections…\n”);

while(1) { // main accept() loop
sin_size = sizeof their_addr;
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
if (new_fd == -1) {
perror(“accept”);
continue;
}

inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr),
s, sizeof s);
printf(“server: got connection from %s\n”, s);

if (!fork()) { // this is the child process
close(sockfd); // child doesn’t need the listener
memset(net_buffer, 0, 1024);
strcpy(out_buffer, “HELO\nCOMMAND:”);
if (send(new_fd, out_buffer, strlen(out_buffer), 0) == -1)
perror(“send”);
if (recv(new_fd, net_buffer, 1024, 0))
{
vulnerable(net_buffer);
strcpy(out_buffer, “RECV: “);
strcat(out_buffer, net_buffer);
send(new_fd, out_buffer, strlen(out_buffer), 0);
}
close(new_fd);
exit(0);
}
close(new_fd); // parent doesn’t need this
}

return 0;
}



Si te ha gustado el post, compartelo y ayudanos a crecer.

Unete a nuestra Fanpage Siguenos en Twitter

Autor: DragoN

Ingeniero en Sistemas y Telecomunicaciones de la Universidad de Manizales. Information Security Researcher con más de 10 años de experiencias en Ethical Hacking, Pen Testing y Análisis Forense. Docente Universitario en Pre y Post-Grado, Speaker y Organizador de diferentes eventos de Seguridad Informática, Fundador del DragonJAR Security Conference y Fundador de DragonJAR SAS y de La Comunidad DragonJAR, una de las comunidades de seguridad informática mas grandes de habla hispana y referente en el sector.

Compartir este Artículo
  • http://www.dragonjar.org rubencho

    hoy en dia en nuestro mundo vemos como es facil utilizar Crear un Exploit Paso a Paso
    bueno aporte y esta muy bien explicado pues hay mas porciento de priorida para aprender viendo.
    gracias saludos DragoN.

  • Pingback: Creando un Exploit Paso a Paso()

  • NetLethal

    Que rico es utilizar t00lz asi en OSX. buena Info thanks.

  • Javier

    Buenos Días,
    Estimados. necesito crear un un exploit desde backtrack 5 a una xp,
    como puedo hacerlo ?? me podrian facilitar alguna guia??

    muchas garcias

  • cu4d

    Hi guys, congrats for the tutorial. It’s very very nice but please can you post the complete code for the cpp server?, cause i have found the same tutorial in others websites but all have the same problem.. they have an incomplete code and most of they refers to this page. Thanks again, see ya.