#!/usr/bin/perl 
# Hackers Venezuela  http://www.hven.com.ve
# HV-CF  ColdFusion Bug Scanner
# By DoctorX email: d0ct0r_x@hven.com.ve  10/06/99
# 
# Nota : Este Programa fue hecho con fines educativos no me hago responsable
# de el uso que se le de a este programa.
# 
# Gracias a:  Kliber       ....................... Hot Dog Manager :-)
#             darkdeath    ....................... lainus Man :-P
#             DunkelSeite  ....................... SuperWebMan alias Ulcera
#             LabX         ....................... El Saco de los Exploits
#             Kliberlandia ....................... HV-ZONE
#             HVLAN        ....................... The Battle Zone
#             Drake        ....................... LaQuemazon
#             Cyber_Optik  ....................... ThiaZhino

use Socket; 

# Creacion de Mensajes de Presentacion

$linea = " ===================================================\n";
$mem1 = " Hackers Venezuela http://www.hven.com.ve\n";
$mem2 = " HV-CF ColdFusion Bug Scanner 07/06/99\n";
$mem3 = " by DoctorX email: d0ct0r_x\@\hven.com.ve\n";

# Puerto HTTP

$port = 80;

# Lista de Maquinas a scannear

$archivo = $ARGV[0];

# Pregunto si se pasaron Parametros

if($ARGV[0] eq $ARGV[1]){ 

# Generacion de Mensaje de Uso

print $linea ; 
print $mem1; 
print $mem2;
print $mem3; 
print $linea ;
print " uso : perl hv-cf lista_de_victimas \n";
print $linea ; 
exit;}

# Lectura de ips/hostnames desde la Lista de Hosts

     open (LISTA,"$archivo");
       $count = 0 ;
       while ($entrada = <LISTA>){
              chop $entrada;
              $count++;
              @nombres[$count] = $entrada ; 
                         }
# Cierro lista de Hosts

     close(LISTA);

# Inicio de Busqueda

   # Mensaje Inicial

      print $linea;
      print $mem1;
      print $mem2;
      print $mem3;
      print $linea;
      print " Cantidad de Hosts  : $count\n";
      print " Iniciando Busqueda  ......!\n";
      print $linea;

# Definicion de Arreglos de Vulnerabilidades y Mensajes

@vulnerable = ( "GET /cfdocs/expeval/openfile.cfm HTTP/1.0\n\n", "GET /cfdocs/expeval/displayopenedfile.cfm HTTP/1.0\n\n","GET
/cfdocs/expeval/exprcalc.cfm HTTP/1.0\n\n");
@vulX = ( "/cfdocs/expeval/openfile.cfm", "/cfdocs/expeval/displayopenedfile.cfm", "/cfdocs/expeval/exprcalc.cfm");

$y = 1;

while ($y < $count+1){
  # Asignacion de Victima de Turno !!!!!!!!!

  $labx = $nombres[$y];

 for ($z=0;$z<3;$z++){

  # Vulnerabilidad a Probar

  $vul = @vulnerable[$z];

  # Abriendo Conexion con Victima

  $NETFD = &makeconn($labx, $port);
  
  # Envio la Vulnerabilidad al Hosts

  send($NETFD,$vul,0);
  
  # Lectura de Respuesta del Host
 
  sysread $NETFD, $message,50 or die "error No se Puede Leer Socket:$!";   
  
  #  Desglozado de la Respuesta del Hosts

    ($verga,$loca,$yoyo) = split(/ /,$message); 
  
  # Interpretacion de la  Respuesta del Hosts
 
    if($loca eq "400"){ print " Host : $labx Vulnerable a @vulX[$z]\n";}   

    if($loca eq "404"){ print " Host : $labx No Vulnerable \n";}

  # Cierro Coneccion

  close $NETFD;
 }

# Incremento para leer otro Hosts

$y++;
print $linea;
}

# Aca Ocurre la Magia de la Coneccion


sub makeconn { 

# Definicion de Variables Privadas 

my ($loco, $portname, $server, $pt,$pts, $proto, $servaddr); 

# $loco ============> hosts a examinar
# $pt   ============> puerto al que se realizara la Coneccion

$loco = $_[0]; 
$pt = $_[1];  

# Resolviendo el Nombre 

$server = gethostbyname($loco) or
 die " $! \n";

# Verificando servicio del puerto

$pts = getservbyport($pt, 'tcp') or
 die "cannot get port : $!"; 

# Verifico Protocolo 

$proto = getprotobyname('tcp') or die " : $!"; 

$servaddr = sockaddr_in($pt, $server); 
socket(CONNFD, PF_INET, SOCK_STREAM, $proto); 
connect(CONNFD, $servaddr) or die "connect : $!";
return CONNFD; }