Los Caballeros

"Sobre seguridad, programación, modding, frikismo, etc... "

Avatar de los caballeros (FHTTP)

Twitter icon Twitter icon
Agrego unos avatares si a alguien le interesa ;)...

256x256:

128x128:
Clic en la imagen para ver el original ;)...

Saludos!

Wiki FHTTP

Twitter icon Twitter icon

Se creo un wiki en el cual se agregara toda la documentación y papers de esta herramienta, también se utilizara para dar informes acerca de parches y actualizaciones.

Se necesitan redactores y traductores :P...

La url es: https://sourceforge.net/apps/mediawiki/fhttp/index.php?title=Main_Page

HTML5 (Canvas) + JS + Esteganografía + Cross-Domain

Twitter icon Twitter icon
Se me ocurrió en uno de esos #MomentosEureka xD

Entre las cosas que HTML5 integra se encuentra el elemento canvas el cual nos permite trabajar a "bajo nivel" con imágenes, entonces se me ocurrió si podemos leer los valores de los pixeles de las imágenes usando canvas y JS, y ademas tenemos que img no esta limitado por dominio por lo que se puede usar para cross-domain...

Entonces se me ocurrió cambiar pixeles de una imagen (o crear una imagen nueva) colocando char por char dentro del mensaje, podría colocar hasta 3 chars por pixel pero si la cosa es que no se note el mensaje o insertar en una imagen sin que esta se altere mucho entonces que sea 1 char por pixel ;)...

entonces tenemos que un pixel esta formado por 3 valores (RGB = Rojo, Verde, Azul) por lo que se pueden meter 3 valores pero por lo que explique arriba no tiene mucho caso :P

Entonces una forma divertida de hacerlo sin alterar tanto la imagen sería:
RGB = (Ascii del char, 0, ascii del char) el por que pase el verde a 0 mas que nada es para no confundir pixeles de la imagen con pixeles del mensaje, obviamente pueden haber otros pixeles de la imagen con esa configuración por lo que no sería mas problema que cambiar el verde de 0 a 1 (lo cual no es un tono que se pueda reconocer a simple vista :P).

<?php
/*
By Xianur0
http://hackingtelevision.blogspot.com
xianur0.null [at] gmail.com
*/
$file = "imagen.jpg"; /*El por que estoy insertando el mensaje dentro de una imagen existente en lugar de crear una? por que es divertido y menos sospechoso para muchas cosas xD. Ah recomiendo usar imágenes mas o menos grandes para que los pixeles editados no se noten mucho o para poder enviar mensajes mas grandes ;) */
$mensaje = "xianur0 was here";
function dibujarpixel($im,$x,$y,$color) {
$color = imagecolorallocate($im, $color[0],$color[1],$color[2]);
imagefilledrectangle($im, $x, $y, $x, $y, $color);
}
list($ancho, $alto, $tipo, $atributos) = getimagesize($file);
$pixeles = $ancho*$alto;
if(strlen($mensaje) > $pixeles) die("Imagen demasiado pequeña (o mensaje demasiado grande)!");
$proporcion = intval(($pixeles/strlen($mensaje)));
$im = "";
preg_match("/(\w+)$/",$file,$match);
switch(strtolower($match[1])){
case 'jpg':
case 'jpeg':
$im = imagecreatefromjpeg($file);
break;
case 'png':
$im = imagecreatefrompng($file);
break;
}
for($x=0;$x<$ancho;$x++){
for($y=0;$y<$alto;$y++){
$pixel = imagecolorat($im, $x, $y);
$colors = imagecolorsforindex($im,$pixel);
$r = $colors["red"];
$g = $colors["green"];
$b = $colors["blue"];
if($r == $b && $g == 0) { // Si el pixel puede interferir lo cambiamos un poco :P
dibujarpixel($im,$x,$y,array($r,1,$b));
}
}
}
$p = 0;
for ($i = 0; $i < strlen($mensaje); $i++) {
$y = intval($p/$ancho);
$x = intval($p-($y*$ancho));
dibujarpixel($im,$x,$y,array(ord($mensaje{$i}), 0, ord($mensaje{$i}))); // cambiamos este pixel por (ascii del char, 0, ascii del char) = (r,g,b)
$p += $proporcion;
}
header('Content-type: image/png');
imagepng($im); // Imprimimos esta imagen editada como png :P
imagedestroy($im);
?>


y ahora para leer dichos datos desde JS + Canvas:

<html>
<head>
<title>PoC Cross-Domain by Xianur0</title>
<script language="javascript">
function cargaContextoCanvas(idCanvas){
var elemento = document.getElementById(idCanvas);
if(elemento && elemento.getContext){
var contexto = elemento.getContext('2d');
if(contexto){
return contexto;
}
}
return FALSE;
}
window.onload = function(){
var ctx = cargaContextoCanvas('micanvas');
var cadena = "";
if(ctx){
var img = new Image();
img.src = 'png.php';
img.onload = function(){
ctx.drawImage(img, 0, 0);
var ele = document.getElementById('micanvas');
var canvasData = ctx.getImageData(0, 0, ele.width, ele.height);
for (var idx = 0; idx < (ele.width*ele.height)*4; idx+=4) {
var r = canvasData.data[idx + 0];
var g = canvasData.data[idx + 1];
var b = canvasData.data[idx + 2];
var a = canvasData.data[idx + 3];
if(r == b && g == 0)
cadena += String.fromCharCode(b);
}
alert(cadena);
}
}
}

</script>
</head>
<body>
<canvas id="micanvas" width="900" height="900">
Tu navegador no soporta canvas.
</canvas>
<script>
</script>
</body>
</html>


Como verán es algo bastante simple, mientras el carácter que queramos enviar no pase de 255 (ascii) no debería de haber problema :P.

Como dije arriba esta forma se puede usar para estenografía o bien para pasar datos de un dominio a otro (el same origen policy da dolor de cabeza a muchos desarrolladores web por lo que esta sería una opción bastante viable en muchos casos :P).

Es una forma muy simplona pero solo es un PoC xD...

Saludos!

Breaking the patch - FHTTP

Twitter icon Twitter icon
Mi amigo NataShell publico un parche contra la FHTTP (que también se publico aquí en el blog), como se dijo al inicio es solo un parche temporal, ahora verán el por que :P

Parche: http://natashell.esdebian.org/47316/defendiendonos-fhttp

primero comenzamos con el primer detalle visible:
iptables -A INPUT -p tcp -m tcp --dport 80 -m limit --limit 10/sec -j ACCEPT

se limita a 10 conexiones por segundo, por suerte solo necesitamos esa cantidad (o menos) para saturar un servidor ;)


LimitRequestBody 102400

Description: Restricts the total size of the HTTP request body sent from the client.

LimitRequestFields 50

Description:
Limits the number of HTTP request header fields that will be accepted from the client

LimitRequestFieldSize 8190
Description: Limits the size of the HTTP request header allowed from the client

LimitInternalRecursion 5
Description: Determine maximum number of internal redirects and nested subrequests.

LimitRequestLine 8190
Description: Limit the size of the HTTP request line that will be accepted from the client.

Bueno por suerte los únicos que verdaderamente nos afectan son:
LimitInternalRecursion y LimitRequestBody.

Debido a los siguiente: el internalrecursion se puede entender como que solo nos va a dejar cargar (en este caso) 5 veces la misma pagina.

y LimitRequestBody nos pone un limite de cuantos bytes podemos enviar y por tanto de cuantos requests se pueden realizar.

Vamos a solucionarlo ;)

No voy a usar la FHTTP completa para esta solo la MN que colgué en seclists.
La razón: es mas ligera y mas fácil de editar para esta "explicación" xD.

si editamos un poco el request que se va a enviar de la siguiente forma:

$paquete .= join "",$method," /",$filepath," HTTP/1.1\nHost: ",$host,"\nAccept-Encoding: gzip,deflate\nIf-None-Match: ",$randsemilla,"\nIf-Modified-Since: Fri, 1 Dec 1969 23:00:00 GMT\nConnection: Keep-Alive\n\n";

Estaríamos reduciendo el tamaño por request y haciendo básicamente el mismo daño, pero utilizando menos banda (mas request por conexión :P).

Ahora respecto a lo otro, tenemos que apache (aparentemente) procesa por URL, no exactamente por archivo, de modo que podríamos usar el {mn-fakeip} de la siguiente forma:

perl mn.pl http://localhost:8080/SMF/?{mn-fakeip} 8 100 190.10.101.1


y listo pasado el parche xD (en ese caso son 8 conexiones, no las 10 que nos permite, pero en fin incluso con eso en muchos casos basta :P).

Pero si tengo que reconocer que no tiene el mismo potencial que tendría sin el parche, pero igual funciona (parcialmente) xD...


Saludos! y a esperar que el amigo NataShell saque otro parche :P.

FHTTP + Shodan = Proxy List :P

Twitter icon Twitter icon
Cazando proxy list con Shodan y FHTTP

Primero necesitamos agregar el soporte para shodan:

https://sourceforge.net/projects/fhttp/files/Extra/

se bajan los modulos en la carpeta del FHTTP y esa es toda la instalacion.

Tambien tenemos un ejemplo usando ese modulo:

http://sourceforge.net/projects/fhttp/files/Extra/Examples%20-%20Shodan/finder.pl/download

Vamos a usar ese script.
Pero antes vamos a explicar un poco el funcionamiento, no del modulo de shodan, del script.

Inicializamos:
my $shodan = shodan->new();

$shodan->login($user,$password);


como tal no es necesario logearse, pero lo hacemos para que de mas resultados (mas de 1 pagina).

y buscamos:
my @tmpenlaces = $shodan->buscar($busqueda,$page);



$page es el numero de pagina que queremos que nos retorne.

($proto,$host,$hostheader,$path,$puerto) = &tools::parseurl($enlace);

$sock = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $puerto,
Timeout => 1,
Proto => 'tcp');
if(!$sock) {
$i = 2;
$down++;
next;
}

Parseamos los enlaces y armamos un socket, en caso de que falle lo registramos como "caido".

$maketunnel = tools::maketunnel($sock,$hosttest,$porttest,0,0);

Nota: los dos ultimos valores son: debug (0 o 1) y version (version de HTTP)

Intentamos crear un tunnel HTTP (mediante "CONNECT"), tools lo hace todo automatico para nosotros ;)... $maketunnel sera 1 si se creo correctamente, 0 si no y 2 si hay un 404 (que esta tomando CONNECT como GET y puede ser un honneypot :P).

De otro modo cerramos el socket, no nos sirve bajarnos a ese nivel para probar un proxy normal.

$paquete = http->new("GET","http://".$hosttest.(($puerto != 80 ) ? (":".$puerto) : "")."/","1.1");

$paquete->agregarencabezados(0,@encabezados);
my %resp = $paquete->enviar($host,$puerto);


Usamos el generador de peticiones (http.pm) y finalmente lo demas es cosa de checar los encabezados/contenido y determinar si el proxy hizo la conexion correctamente (para eso se usa el argumento regex).


Ahora a jugar...

linux-7nli:/home/xianur0/fhttp-v1.3 # perl finder.pl squid "" "" google.com 80 Google

Comprobando dependencias...
Felicidades: FHTTP funcionando al 100%!
Tunnel: google.com:80
Target: 9
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[!] Proxy HTTP: 209.xxx.1x1.xxx:xx
[x] No se puede crear el tunnel: HTTP/1.0 400 Bad Request!
[x] No se puede crear el tunnel: HTTP/1.0 400 Bad Request!
[!] Proxy HTTP: 222.xxx.1x1.xxx:xxx
[x] No se puede crear el tunnel: HTTP/1.1 501 Not Implemented!
[x] No se puede crear el tunnel: HTTP/1.1 501 Not Implemented!
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[!] Proxy HTTP: 189.xxx.x68.xxx:xxx
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[!] Proxy HTTP: 186.xxx.2x2.xxx:xxx
[x] No se puede crear el tunnel: HTTP/1.0 407 Proxy Authentication Required!
[x] No se puede crear el tunnel: HTTP/1.0 407 Proxy Authentication Required!
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[!] Proxy HTTP: 203.xxx.1x9.xxx:xxx
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[!] Proxy HTTP: 202.xxx.17x.xxx:xxx
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[x] No se puede crear el tunnel: HTTP/1.0 403 Forbidden!
[!] Proxy HTTP: 186.xxx.15x.xxx:xxx
Down: 1
Honeypot: 0
CONNECT: 0
Others: 7

FHTTP Cheat Codes

Twitter icon Twitter icon
Para los que no estén enterados hoy agregamos soporte multi-idioma a #FHTTP la cual pueden encontrar en el sourceforge oficial: FHTTP.

my @cheats = ("--proxy","--tunnel-http","--proxy-list","--crlf-req","--crlf-res","--verbose","--lang");

Bueno ahí están los "Cheat Codes", vamos desde lo simple a lo complicado:

--crlf-res=CRLF - En este podemos especificar los caracteres que se van a usar en lugar del CRLF en las respuestas del proxy al navegador (por ejemplo: CR sin LF, LF sin CR o LF+CR).
--crlf-req=CRLF - Lo mismo que el de arriba pero en los request's.
--proxy=ip:puerto - El proxy o primer nodo del encadenamiento a usar.
--proxy-list=archivo.txt - El proxy list (solo útil en encadenamientos).
--tunnel-http=1 - Al darle el valor de 1 va a intentar crear encadenamiento (si hay proxy list) o un tunnel simple (usando el valor de --proxy) mediante el metodo CONNECT de modo que es requerido que los nodos especificados soporten CONNECT (y los puertos a usar), otra cosa que hay que tener en cuenta es que se requiere especifica --proxy al realizar encadenamientos es decir, el valor de dicho "cheat code" se utilizara como el primer nodo del encadenamiento y el resto se tomara del proxy-list.
--lang=en - Le decimos que establezca por defecto el idioma en (ingles) o es (español), para agregar mas lenguajes tienen que editar dic.pm (en la versión multi-idioma).
--verbose=0 - Establecemos el modo verboso (solo valido por el momento en el modulo de proxy) en 0, de momento los valores soportados son: 0-3.

Otros "cheat codes" sirven para desactivar o "forzar activar" ciertos módulos del interprete, por ejemplo trabajar sin Gtk2 o sin IO::Socket::SSL o incluso sin soporte para compresiones.

Ejemplo:
perl fhttp.pl no-Gtk2 --lang=en

Por otro lado para volver a activar se quita el no.

perl fhttp.pl Gtk2

Estos últimos cheat's no llevan el "--" y son "recursivos" es decir solo basta agregarlos 1 vez como argumento y se guardara en "config.fhttp" y se usara para la siguiente "ejecución".

Todos estos argumentos se deberán usar después de los argumentos que se le pasan al modulo a usar por ejemplo:

perl fhttp.pl 0 http://google.com.mx/ 0 --lang=en

Dudas o comentarios: xianur0.null[at] gmail.com

Saludos!

FHTTP Hacking - Cap 1

Twitter icon Twitter icon
Hey creo que comenzare a necesitar alguien que ayude a traducir las publicaciones por que de ahora en adelante van a ser bastantes y la idea es tener un publico "global" xD...

Vamos a comenzar a tirar algunas ideas un poco extrañas pero que en la practica pueden ser de utilidad.

Convirtiendo la FHTTP en un link spider.

Para que un link-spider? la duda surge... no ya enserio un link spider que pueda ir junto con la navegación del "usuario" (no nos complicaremos con términos xD) puede ser algo interesante, es decir si tienes todo lo que se esta enviando al navegador del usuario no tienes que preocuparte tanto por un armar un sistema que se encargue de desarmar la web como la leería el navegador, es decir si nosotros nos topamos con una web que utiliza ajax para cargar las paginas... o peor aun al weybmaster se le dio por armarla en flash :S... es difícil que un spider común extraiga los enlaces... pero si lo combinamos con un proxy, de un modo u otro vamos a pescar los enlaces que se vayan a cargar :D...

Antes de continuar es recomendable que previamente conocieran el motor avanzado del proxy

Comenzamos:

La FHTTP tiene algunas opciones muy curiosas entre las que se encuentra un simple script para extraer los enlaces, entre las ventajas que tiene dicho script es que corrige path transversal y otras trampas usadas para "saltar" los link spiders, en caso de que eso no sea suficiente pueden editarlo manualmente :P.

sub geturls($html,$proto,$host,$path);

Ese es el "proto" de dicha función, pero realmente nada mas es necesario pasar html, lo demás se usa para auto-completar url's (relativas) y obtener las completas.

Vamos a lo simple:
sub spider {

my $rcontenido = $_[0];
my $paqenvio = $_[1];
my %links = tools::geturls($rcontenido);
while(my ($link,$veces) = each(%links)) {
open LOG, ">reportes.txt";
print LOG $links."\n";
close(LOG);
}
return $rcontenido;
}



Pero si no nos gusta tener solo las url's relativas... podemos jugar un poco mas:

sub spider {

my $rcontenido = $_[0];
my $paqenvio = $_[1];
my @lineas = split(/[\r\n]+/,$paqenvio); # $lineas[0] = req line
my ($method,$url,$version) = split(/\s+/,$lineas[0]);
my ($proto,$host,$hostheader,$path,$puerto) = tools::parseurl($url);
my %links = tools::geturls($rcontenido,$proto,$hostheader,$path);
while(my ($link,$veces) = each(%links)) {
open LOG, ">reportes.txt";
print LOG $links."\n";
close(LOG);
}
return $rcontenido;
}


Pero... aun no siento que sea un spider completo... digo ya extrae los links... pero que hay de las imágenes?

Como saber cuando el navegador esta cargando una imagen y no un enlace?... la forma mas fácil sería tomarla del código fuente como hacemos con los enlaces o no?... pero no quiero, quiero atrapar las imágenes al vuelo :P, siendo un poco mas claro atrapar la consulta a la imagen, no el html que tiene el enlace a la imagen, el por que?, como dije al inicio las webs no siempre van a estar en simple html, también se puede integrar ajax (JS xD) o flash que va a hacer la labor de cargar las imágenes pero sin que nosotros podamos ver en plano la dirección en el código fuente (html) por ello vamos a hacer un pequeño "hack" (por así llamarle) al funcionamiento del navegador, como distinguimos un request a un archivo de texto/html de otro a una imagen?.

Accept: image/*

Al leer ese encabezado con dicho valor... queda bastante claro que la prioridad del navegador es bajar una imagen, desde luego el valor puede variar pero casi siempre comienza de esa forma (image/).

	

sub spider {
my $rcontenido = $_[0];
my $paqenvio = $_[1];
my @lineas = split(/[\r\n]+/,$paqenvio);
if($paqenvio =~ /[\r\n]+Accept: image\//i) { # buscamos el header
my ($url) = ($lineas[0] =~ /^\w+([\s\t]+)([^\s\t]+)/); #extraemos la url
foreach $header (@lineas) { # recorremos los headers
if(($header =~ /Host:\s+([^\r\n]+)/)) { #buscamos el header host y su valor :P
$host = $1;
last;
}
}
if($url !~ /^http/) { # en caso de que no sea una url completa, agregamos lo que falta
$url = "http://".$host.(($url !~ /^\//) ? "/" : "").$url;
}
open IMAGENES,">>imagenes.txt"; # abrimos el log
print IMAGENES $url."\n"; # guardamos
close(IMAGENES); # cerramos
}
return $rcontenido;
}

Desde luego nos falta conectar nuestra función a la FHTTP, tan simple como:
my @rcontenidocallbacks = (

rcontenidocall,
spider,
);


Happy Hacks!

FHTTP MN != Slowloris

Twitter icon Twitter icon
Últimamente me preguntan mucho si el modulo MN (DoS Tool) de la FHTTP es lo mismo que Slowloris... y no, no es así xD...

Como funciona Slowloris?

Esta herramienta (desarrollada por RSnake) traba de la siguiente forma:
Cliente -> Servidor (Establece la conexión).
Cliente -> Servidor (Envía parte del encabezado)
Ejemplo:
GET / HTTP/1.1
Host: google.com
x-a: 1
(Espera cierto tiempo y continua)
x-a1: 2
(Espera cierto tiempo y continua)
x-b2: 7
(etc...)

Es decir el servidor esta recibiendo de forma parcial el request, por lo cual se mantiene activa la conexión, slowloris en este caso lo que tiene que hacer es crear múltiples conexiones y hacer lo mismo, de modo que se satura el servidor (tendrá muchas conexiones activas al mismo tiempo).

Desventajas:
Al enviar contenido parcial no es muy factible usar un Proxy HTTP convencional para "esconder" (es decir hacer ligeramente mas difícil que nos localicen xD), debido a que muchos (proxy's) intentan leer todo el request (hasta recibir doble LF/CRLF) de modo que al no terminar de recibir no establece la conexión con el servidor y nuestro ataque se queda en el proxy, y bien pueden DoSear al proxy xD.
Solución: usar una VPN xD...
Ademas esta el hecho de que tu también mantienes un numero igual de conexiones a las que mantiene el servidor.

Como funciona MN?
Que pasa cuando enviamos un GET o un HEAD al servidor?
En el caso del HEAD:

HEAD / HTTP/1.1
Host: destino

HTTP/1.0 200 OK
Date: Tue, 09 Aug 2011 02:51:47 GMT
Server: Apache/2.2.8 (Unix) PHP/5.2.12
X-Powered-By: PHP/5.2.12
Set-Cookie: PHPSESSID=a3afdbf074f0d0ef7a6782962455468d; path=/
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Tue, 09 Aug 2011 02:51:48 GMT
Content-Type: text/html; charset=UTF-8
Connection: close


Me viene a la mente... y esa cookie?, obviamente no la genero apache, es decir es una "session" PHP, por lo cual quiere decir que PHP esta trabajando al hacer el HEAD... pero no se genera de forma autónoma, por lógica la genero el index, en otras palabras se esta procesando el index (todo para generar los headers), lo cual quiere decir que si no queremos que el servidor nos responda todo el contenido (no gastar nuestra banda) pero que aun así procese el archivo únicamente tenemos que enviar HEAD's.

Pero eso nos basta para denegar un servidor?, lamento decirles que no xD...

Conexiones Persistentes y Pipelining:

Que es exactamente conexiones persistentes?
una conexión persistente o keep-alive quiere decir que podemos realizar varios request en la misma conexión sin cerrarla y volver a establecerla.

Que significa Pipelining?
Significa que podemos enviar múltiples request "concatenados" sin esperar que el servidor nos responda previamente.
Ejemplo:

GET / HTTP/1.1
Host: google.com

GET / HTTP/1.1
Host: google.com

HTTP/1.1 301 Moved Permanently
[...]

HTTP/1.1 301 Moved Permanently
[...]


Como podrán notar nos respondió a las dos consultas que enviamos en el orden que las enviamos, pero después de que nosotros termináramos de enviar todas las consultas.

Lo que va haciendo es como vaya terminando de procesar nos va a enviar las respuestas... o no?, al menos eso debería pero por lo menos apache no lo hace... y no tengo tiempo de listar todos los demás servidores que no lo hacen :P.
A que nos lleva esto?
Enviamos una serie de request concatenados por una sola conexión (pipelining), pero cortamos la conexión antes de que nos termine de responder el servidor.
O bien podemos enviar masivo los paquetes y ver cuantos nos llegan xD...
Pero eso no es todo ;)...
Que le pasa a apache cuando recibe cierto numero de consultas?, despliega hilos, es decir hilos listos para procesar las consultas... pero si el usuario solo realizo una conexión pero envió... digamos 300 consultas... que le pasara a apache? lo que tenemos es que el mismo apache se ahoga en hilos :P

Ah se me pasaba, no es solo cuestión de apache, funciona igual con IIS y una infinidad de servidores web mas... a decir verdad nunca me he encontrado con un servidor que no sea vulnerable... por lo que esto es un problema bastante grave :P...
Como podemos hacer aun mas grande el dolor de cabeza del administrador?
Combinando el potencial :D...

Fastidiando un poco mas:

HEAD /$file HTTP/1.1
Host: $host
User-Agent: Mozilla/5.0
CLIENT-IP: $ipinicial
X-Forwarded-For: $ipinicial
If-None-Match: ThisWebSuck!-Todo-dicho! xD
If-Modified-Since: Fri, 1 Dec 1969 23:00:00 GMT
Accept: */*
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Length: 0
Connection: Keep-Alive

Primero se resalta el uso de los encabezados CLIENT-IP y X-Forwarded-For, lo cuales en una infinidad de CMS's se toman como la "verdadera ip" del visitante, por lo cual se usan en muchas consultas a base de datos, en el caso de Joomla y SMF es sorprendente la cantidad de consultas adicionales que se realizan a base de datos cuando el valor de CLIENT-IP/X-Forwarded-For cambia :P... ademas de que al registrar las IP's de los visitantes se generan registros extra.
También podemos ver encabezados para fastidiar un poco a la cache...
y Accept-Encoding: gzip,deflate, el cual lo agregue con la idea de forzar un poco mas al servidor, que pasa cuando enviamos un request al servidor sin dicho encabezado?, ignora la compresión (normalmente) lo cual son menos recursos (procesamiento) del servidor consumidos, al agregar dicho encabezado el servidor debería realizar la compresión... pero espera... que no usamos HEAD?, Para que comprimir lo que no se va a enviar?, para gastar recursos obviamente :P...

Bueno ahora les agradecería no volvieran a preguntar si MN es lo mismo que Slowloris gracias :P...

Saludos!

FHTTP v1.3 Liberada

Twitter icon Twitter icon



Por fin les puedo decir que me complazco en anunciar la versión 1.3 de esta herramienta :P
Esta vez si es funcional xD...

Cambios (mayores):
* Se corrigieron bugs de manejo del url encode en el proxy (se realizaba decode de forma innecesaria).
* Se re-diseño por completo el motor del proxy para acelerar su funcionamiento.
* Se agregaron reglas.
* Se eliminaron fugas de memoria (no se cerraban a tiempo las conexiones entre otras cosas).
* Funciona en cualquier plataforma con Perl (tiene la capacidad de trabajar aunque no tenga todas las dependencias, es decir trabaja adaptándose a lo que se tiene).
* Se agregaron muchas funciones que en publicaciones siguientes comentare :P...

Créditos:
@LightOS (Roberto Salgado) por ayudarme como betatester a encontrar una infinidad de bugs :P.
@angelusniger (Angelus Inflectum) por aguantarnos en su casa (y alimentarnos cuando llegamos sin avisar) xD.
@lil_lilitu por prestarnos sus equipos para... casi romperlos haciendo pruebas xD...
Seguramente se me esta pasando agregar a muchas personas a la lista sin las cuales esta herramienta no sería lo que es. A todos ellos Gracias!


Descargar

Solución temporal contra FHTTP - Apache/2.x

Twitter icon Twitter icon
Les comparto la solución de mi amigo Marcos Ricardo Schejtman Rubio (CEO de Nekasys) para reducir el impacto que puede tener esa herramienta contra nuestros servidores:

Reglas del Apache::::

-------------------------------------------

LimitRequestBody 102400

LimitRequestFields 50

LimitRequestFieldSize 8190

LimitInternalRecursion 5

LimitRequestLine 8190

--------------------------------------------



Regla de ipTables:

-A INPUT -s IP_ADDRESS -p tcp -m tcp --dport 80 -m limit --limit 10/sec -j ACCEPT


Saludos!

Recomiendo visitar su web: http://nekasys.wordpress.com/

FHTTP (In)seguridad en http

Twitter icon Twitter icon
Bienvenidos esta es una presentación del buen Xianur0 desde Campus Party MX 2011

         
Video streaming by Ustream

Saludos Lectores

FHTTP V1.2 en OpenSuse

Twitter icon Twitter icon
Para los que siguen preguntando como ejecutar la FHTTP, aquí esta como instalar las dependencias en openSUSE 11.3:

(Obviamente como root)

cpan -i Gtk2
cpan -i Net::SSLeay
cpan -i IO::Socket::SSL
cpan -i IO::Uncompress::Inflate
cpan -i IO::Uncompress::Gunzip

y ya esta xD...

Bytez

Diseño de reglas para Proxy Evasor (FHTTP v1.2)

Twitter icon Twitter icon
Vamos a comenzar explicando que opciones nos da la FHTTP para "diseñar reglas" para el proxy evasor de la FHTTP v1.2.

Para comenzar tenemos 2 métodos:
  • reglas.txt
  • proxymodulos.pm
siendo la primera la forma mas "fácil" (requiere conocimientos de regex) y la segunda la opción avanzada (requiere conocimientos de programación en perl).

La estructura de reglas.txt es la siguiente:

donde: pattern => replacement <!-- comentario 


Todo esto tiene que estar en una sola linea (sin saltos de linea)

"donde" sería que parte de la trama se editara, las opciones aceptadas son las siguientes:

  • url - La url de la consulta
  • reqline - La linea de consulta (por ejemplo: GET / HTTP/1.1).
  • header - Cada uno de los headers de forma individual (por ejemplo: Host: hackingtelevision.blogspot.com).
  • postdata - El Post data del envió (datos enviados en POST).
  • rheader - Todos los headers (incluyendo el reqline) de la respuesta pero no de forma individual.
  • rcontenido - Todo el contenido de la respuesta (obviamente excluyendo los headers)


el pattern es un regex de perl común y corriente con la diferencia de que si se usan tags html se tienen que cambiar por su respectivo valor en "html entitites", si se utilizan: \r o \n se tiene que agregar un escape adicional (\\r y \\n), esto es:
es diferente:

\r\n lo cual FHTTP convertiría en un CRLF real (y no para regex).
\\r\\n lo cual FHTTP convertiría en \r\n (y se utilizaría en el regex).

hay ligeras diferencias entre usar uno u otro xD...

El replacement al igual que en los regex clásicos de perl se pueden usar "grupos" por ejemplo:

reqline: ^GET(\s|\t)+ => POST $1 <!-- GET a POST

Se remplazaría por:

POST \t/ HTTP/1.1

(puesto que se utiliza una tabulacion en lugar de espacio).

Los pattern son case insensitive (insensible a mayusculas y minusculas).

Otro truco que podemos encontrar es en el "donde" por ejemplo:

rcontenido:nossl: window\.location\.replace\(([\s\\r\\n]*)"https:\/\/"([\s\\r\\n]*)\+([\s\\r\\n]*)window\.location\.hostname([\s\\r\\n]*)\+([\s\\r\\n]*)window\.location\.pathname([\s\\r\\n]*)\+([\s\\r\\n]*)window\.location\.hash([\s\\r\\n]*)\) => window.location.replace("http://"+window.location.hostname+window.location.pathname+"?&08dae2760be9fe48274a74c31fba5b0f"+window.location.hash) <!-- Twitter y otros :P

(regla para romper el "Solo HTTPS" de twitter xD...)

se esta usando el donde: "rcontenido:nossl" lo cual es solo se va a usar cuando este activado el "eliminar SSL".

Como verán es realmente fácil armar una regla para el proxy evasor de la FHTTP v1.2.

Ahora veremos rápidamente sobre el proxymodulos.pm.

sub uricall {
my $uri = $_[0];
$uri =~ s/^http:\/\/([\/]+)//g;
$uri = "/".$uri if($uri !~ /^\//);
return $uri;
}


Armada esta subrutina la agregamos al proxymodulos.pm y la agregamos a su respectiva "lista de callback" (@uricallbacks).

my @uricallbacks = (
uricall,
);

y listo, nuestra subrutina se ejecutara por cada uri (url).

De momento lo dejamos aqui, espero que les sea de utilidad y que próximamente veamos mas vídeos y papers publicados de mas usos de esta herramienta :P...


Bytez!

K9 Web Protection Bypass con FHTTP v1.2

Twitter icon Twitter icon


Regla para Bypass:
header: Host:([^\\r\\n]+) => Host:$1\r\nHost: 127.0.0.1:2372 <!-- K9 Bypass



Bytez!

FHTTP v1.2 - The HTTP Fucker :P

Twitter icon Twitter icon


Bueno creo que ya es momento de liberar esta herramienta como se prometió, antes que nada quiero aclarar que esta "herramienta" nunca se pensó como tal, solo comenzó como un PoC pero ahora es una especie de "framework para ataque al protocolo HTTP" de mas de 2000 lineas xD

Antes que nada déjenme aclarar que es solo una "herramienta" diseñada para estudio y pruebas del protocolo por lo cual la responsabilidad del uso que se le de recae completamente en el usuario.

Programada completamente en Perl (con interfaz gráfica GTK), es una tool que entre otras cosas integra un motor proxy diseñado exclusivamente para pruebas a IDS's aunque también sirve para evadir portales cautivos, para debuggear consultas y respuestas y cuantas cosas se les pueda ocurrir :P.

Otra de las cosas que integra es un modulo para pruebas de estrés (aka Herramienta DoS xD), que según las pruebas (como habrán visto los que participaron en la conferencia que dimos en tuxtepec en FreeSecurity xD) fácilmente deniega un servidor con 8 nucleos y 8 GB's de ram (muchas gracias a por prestar su Alien para esto xD... atentos a su web próximamente publicare unos parches para limitar los posibles daños que pueda causar la tool xD) en cuestión de 1 segundo utilizando unas aspire one (la notebook que comúnmente utilizo xD).

Tiene muchas mas opciones de momento se me ocurren por lo menos 100 usos prácticos, cuantos se les ocurren a ustedes?

De momento solo publicare la herramienta, cuando vaya teniendo tiempo iré publicando documentación al respecto, Happy Hacks! :P

http://www.mediafire.com/?3rzxh7l5k28rcjs

Pass: eaeaeaeaea

Edit: agregado como .tar.gz: http://www.mediafire.com/?5r7s4kd82fre2a5
Bytez!

Código penal federal

Twitter icon Twitter icon
Bueno jóvenes debido a una duda de uno de nuestros lectores, me tomaré la molestia de publicar algo de legislación referente a cuestiones de informática espero que les sirva un poco aunque recordemos que en México a comparación de otros países mucho mas avanzados como lo es en Europa, E.U., Japón, China, etc, etc. Nuestro países esta en pañales pero bueno nada es perfecto. 


Copiado del siguiente enlace



    LIBRO SEGUNDO 
    TÍTULO NOVENO. REVELACIÓN DE SECRETOS Y ACCESO ILÍCITO A SISTEMAS Y EQUIPOS DE INFORMÁTICA 
    CAPÍTULO II. ACCESO ILÍCITO A SISTEMAS Y EQUIPOS DE INFORMÁTICA 
    [Artículo 211 bis 1]
    Artículo 211 bis 1. Al que sin autorización modifique, destruya o provoque pérdida de información contenida en sistemas o equipos de informática protegidos por algún mecanismo de seguridad, se le impondrán de seis meses a dos años de prisión y de cien a trescientos días multa. 
    Al que sin autorización conozca o copie información contenida en sistemas o equipos de informática protegidos por algún mecanismo de seguridad, se le impondrán de tres meses a un año de prisión y de cincuenta a ciento cincuenta días multa.
    [Artículo 211 bis 2]
    Artículo 211 bis 2. Al que sin autorización modifique, destruya o provoque pérdida de información contenida en sistemas o equipos de informática del Estado, protegidos por algún mecanismo de seguridad, se le impondrán de uno a cuatro años de prisión y de doscientos a seiscientos días multa.
    Al que sin autorización conozca o copie información contenida en sistemas o equipos de informática del Estado, protegidos por algún mecanismo de seguridad, se le impondrán de seis meses a dos años de prisión y de cien a trescientos días multa.
    A quien sin autorización conozca, obtenga, copie o utilice información contenida en cualquier sistema, equipo o medio de almacenamiento informáticos de seguridad pública, protegido por algún medio de seguridad, se le impondrá pena de cuatro a diez años de prisión y multa de quinientos a mil días de salario mínimo general vigente en el Distrito Federal. Si el responsable es o hubiera sido servidor público en una institución de seguridad pública, se impondrá además, destitución e inhabilitación de cuatro a diez años para desempeñarse en otro empleo, puesto, cargo o comisión pública.
    [Artículo 211 bis 3]
    Artículo 211 bis 3. Al que estando autorizado para acceder a sistemas y equipos de informática del Estado, indebidamente modifique, destruya o provoque pérdida de información que contengan, se le impondrán de dos a ocho años de prisión y de trescientos a novecientos días multa.
    Al que estando autorizado para acceder a sistemas y equipos de informática del Estado, indebidamente copie información que contengan, se le impondrán de uno a cuatro años de prisión y de ciento cincuenta a cuatrocientos cincuenta días multa.
    A quien estando autorizado para acceder a sistemas, equipos o medios de almacenamiento informáticos en materia de seguridad pública, indebidamente obtenga, copie o utilice información que contengan, se le impondrá pena de cuatro a diez años de prisión y multa de quinientos a mil días de salario mínimo general vigente en el Distrito Federal. Si el responsable es o hubiera sido servidor público en una institución de seguridad pública, se impondrá además, hasta una mitad más de la pena impuesta, destitución e inhabilitación por un plazo igual al de la pena resultante para desempeñarse en otro empleo, puesto, cargo o comisión pública.
    [Artículo 211 bis 4]
    Artículo 211 bis 4. Al que sin autorización modifique, destruya o provoque pérdida de información contenida en sistemas o equipos de informática de las instituciones que integran el sistema financiero, protegidos por algún mecanismo de seguridad, se le impondrán de seis meses a cuatro años de prisión y de cien a seiscientos días multa.
    Al que sin autorización conozca o copie información contenida en sistemas o equipos de informática de las instituciones que integran el sistema financiero, protegidos por algún mecanismo de seguridad, se le impondrán de tres meses a dos años de prisión y de cincuenta a trescientos días multa.
    [Artículo 211 bis 5]
    Artículo 211 bis 5. Al que estando autorizado para acceder a sistemas y equipos de informática de las instituciones que integran el sistema financiero, indebidamente modifique, destruya o provoque pérdida de información que contengan, se le impondrán de seis meses a cuatro años de prisión y de cien a seiscientos días multa.
    Al que estando autorizado para acceder a sistemas y equipos de informática de las instituciones que integran el sistema financiero, indebidamente copie información que contengan, se le impondrán de tres meses a dos años de prisión y de cincuenta a trescientos días multa.
    Las penas previstas en este artículo se incrementarán en una mitad cuando las conductas sean cometidas por funcionarios o empleados de las instituciones que integran el sistema financiero.
    [Artículo 211 bis 6]
    Artículo 211 bis 6. Para los efectos de los artículos 211 Bis 4 y 211 Bis 5 anteriores, se entiende por instituciones que integran el sistema financiero, las señaladas en el artículo 400 Bis de este Código.
    [Artículo 211 bis 7]
    Artículo 211 bis 7. Las penas previstas en este capítulo se aumentarán hasta en una mitad cuando la información obtenida se utilice en provecho propio o ajeno.
    Espero Mis estimados lectores que les haya servido de algo esta publicación ahora que si conoces a alguien (abogado por ejemplo) que conosca bien referente al tema pueden consultarlo ya que estas son artículos báse los cuales en cada caso puede variar.
Angelus Inflectum