Nuevas Entradas
Mostrando entradas con la etiqueta HTTP. Mostrar todas las entradas
Mostrando entradas con la etiqueta HTTP. Mostrar todas las entradas

Webot Release!

by hdbreaker

¡Webot Release!

Por fin después de varios meses de testing hemos logrado terminar una versión
estable de Webot y la hemos incluido de forma

SQL Inyection a traves de cabeceras HTTP


by [Q]3rv[0]

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 información 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 [/code]

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! saludos!

 
Copyright © 2014 Security Signal.
Designed by OddThemes | Distributed By Gooyaabi Templates