elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 19:51  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking Avanzado
| | |-+  Hacking Linux/Unix (Moderadores: kamsky, TRICKY, berz3k)
| | | |-+  .:: dires-scan2 ::. descubriendo directorios en Web Servers
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: .:: dires-scan2 ::. descubriendo directorios en Web Servers  (Leído 2,057 veces)
TRICKY
The "Tricky" ..
Moderador
***
Desconectado Desconectado

Mensajes: 1.605


Ver Perfil
.:: dires-scan2 ::. descubriendo directorios en Web Servers
« en: 19 Junio 2009, 05:54 »

Que tal.

Bueno, aqui en Uk son casi las 5 de la madrugada, imagino que en Spain seran las 6 casi!

Pero bueno, nada, que pongo un lame lame programa que hice hace un tiempo para un user, pero estaba algo mal codeado. Este no es que este muy bien codeado, es mas, es horrible de mirar.
Pero si que es mucho mas funcional que el otro.

Lo mejor es ver el source ( Ughhhhhhhh! ) para ver el primer comentario.
Teneis que crear un fichero con la lista de directorios a probar en el server, desde /.
O sea, un fichero con un listado de posibles directorios tipo:

metadata
pub
sex
hornitorrincos
mizena
paparazzi
images
documents
cgi-bin



Y asi. Si el Web Server esta configurado para no devolver mensajes de estado de HTTP, te informare y el programa saldra de ejecucion ya que me baso en errores 200 OK y 40* HTTP.

Compilacion:
# gcc -O2 -o dires-scan2 dires-scan2.c

Ejecucion:
# ./dires-scan2 www.website.com file_with_dires.txt

Sin mas:

/*
 * dires-scan.c   By averno.  
 *
 * -  Hecho para el compi: winterfuse, del foro.elhacker.net  -
 *
 *  Compilacion: gcc -O2 -o dires-scan2 dires-scan2.c
 *
 * Uso:
 * # ./dires-scan2 www.elhost.com fichero_con_directorios_a_probar
 *
 * Ejemplo:
 * # ./dires-scan2 www.hacktheworld.com file.txt
 *
*/



#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>

#define MAX 1024

/* u_long resolve(char *); */

int open_sock(char *argv[])
{

   struct sockaddr_in client;
   struct hostent *he; /* utilizo gethostbyname(), ya que vamos a usar
                          nombres de dominio! */
  
   int fd;

   if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
     perror("socket()");
     exit(-1);
   }

   if ((he = gethostbyname(argv[1])) == NULL) {
     error("gethostbyname()");
     exit(-1);
   }

   memset(&client, 0, sizeof(client));
   client.sin_family = AF_INET;
   client.sin_port = htons(80);
   client.sin_addr = *((struct in_addr *)he->h_addr);

   if (connect(fd, (struct sockaddr *)&client, sizeof(struct sockaddr)) == -1) {
        perror("connect()");
        exit(-1);
   }

   return(fd);
}

void tester(char *argv[])
{

   FILE *file;

   char buff[MAX];
   char tmp[MAX];
   char tmp2[MAX];
   char *buferr = "AvaxkijIAhh";
   int readbytes;
   int nonce; int sock;
  
   if ((file = fopen(argv[2], "r")) == NULL) {
     fprintf(stderr, "[=] Error abriendo archivo %s!\n\n", argv[2]);
     exit(-1);
   }

   bzero(&tmp2, sizeof(tmp2));

   sprintf(tmp2, "GET /%s/ HTTP/1.0\nHost: %s\n\n", buferr, argv[1]);

    while (fgets(buff, sizeof(buff), file) != NULL) {

       sock = open_sock(argv);

       if (!nonce) {
      
       if (write(sock, tmp2, strlen(tmp2)) == -1) {
         perror("write1()");
         exit(-1);
       }

       while ((readbytes = read(sock, tmp, 1024-1)) > 0) {
            tmp[readbytes] = '\0';
            if (strstr(tmp, "404")) {
              break;
            }
            else {
                printf("[=] El host %s no devuelve errores en mensajes HTTP\n", argv[1]);
                printf("[=] Quitting!\n\n");
                exit(-1);
           }
       }
       nonce = 1;
       }


       memset(&tmp2, 0, sizeof(tmp2));
       memset(&tmp, 0, sizeof(tmp));

       if ((buff[0] == '#') || (buff[0] == '\n')) {
         continue;
       } /* kon esto, saltamos a la siguiente linea si el komienzo de la
            linea es un komentario o una line vacia */

       buff[strlen(buff) -1] = '\0'; /* Nos deshacemos del '\n' que pone
                                        fgets() */

       snprintf(tmp, sizeof(tmp), "GET /%s/ HTTP/1.0\nHost: %s\n\n", buff, argv[1]);
       /* printf("[=] Assuming: %s\n", tmp); */
       if (write(sock, tmp, strlen(tmp)) == -1) {
         perror("write2()");
         exit(-1);
       }

       while ((readbytes = read(sock, tmp2, 1024-1)) > 0) {
            tmp2[readbytes] = '\0';
            /* fprintf(stdout, "%s", tmp2); */
            if (strstr(tmp2, "200 OK")) {
              printf("[=] Directorio \"%s\" Enkontrado, winterfuse!\n\n", buff);
            }
           /* else {
                printf("[=] Directory %s Not Found!\n", buff);
            } */
  
       }

       sleep(0.5);
       close(sock);

   } /* Fin del loop while() de fgets() */
   fclose(file);

} /* Fin de la funcion tester() */


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

   if (argc < 3) {
     fprintf(stderr, "[=] Uso: %s <host> <file>\n\n", argv[0]);
     exit(0);
   }

  /*
   fl = fcntl(fd, F_GETFL);
   fcntl(fd, F_SETFL, fl | O_NONBLOCK); */

   tester(argv);


   return 0;

}
/* EOF */



Saludos.


P.D: No bad comments about my crappy app!!


« Última modificación: 19 Junio 2009, 06:01 por averno » En línea

"La envidia es una declaración de inferioridad"
Napoleón.
TRICKY
The "Tricky" ..
Moderador
***
Desconectado Desconectado

Mensajes: 1.605


Ver Perfil
Re: .:: dires-scan2 ::. descubriendo directorios en Web Servers
« Respuesta #1 en: 19 Junio 2009, 16:40 »


Que tal.

Bueno para los mas vagos aqui os dejo un link hacia un fichero de texto con nombres de directorios para que vayais probando si quereis.

File

Si os preguntais.. "y por que ese delay de 1/2 segundo??" "Asi por cada 2 directorios a probar se demora un segundo!"

Bueno, es por si el Web Server tiene algun tipo de seguridad referente a conexiones por segundo. Quien quiera que quite ese sleep(0.5) y ya esta :____).

Saludos.


En línea

"La envidia es una declaración de inferioridad"
Napoleón.
hakais
Colaborador
***
Desconectado Desconectado

Mensajes: 1.014


:-P


Ver Perfil WWW
Re: .:: dires-scan2 ::. descubriendo directorios en Web Servers
« Respuesta #2 en: 23 Junio 2009, 10:46 »

Existe una herramienta muy buena para eso y más cosas, se llama pipper:
http://www.yoire.com/downloads.php?tag=pipper

Igualmente felicidades por el código.

[EDITO]

Permite incluso pruebas de inyección SQL

« Última modificación: 23 Junio 2009, 11:27 por hakais » En línea

El hacker es el filósofo de la actualidad
TRICKY
The "Tricky" ..
Moderador
***
Desconectado Desconectado

Mensajes: 1.605


Ver Perfil
Re: .:: dires-scan2 ::. descubriendo directorios en Web Servers
« Respuesta #3 en: 23 Junio 2009, 13:38 »


Que tal.

Bueno, haberlas las tiene que haber, pero esta la he hecho yo  ;D y para el foro.


Saludos!
En línea

"La envidia es una declaración de inferioridad"
Napoleón.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines