Underc0de

[In]Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: q3rv0 en Abril 12, 2012, 06:33:34 PM

Título: SQL Inyection a traves de cabeceras HTTP
Publicado por: q3rv0 en Abril 12, 2012, 06:33:34 PM
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?

(http://resources.infosecinstitute.com/wp-content/uploads/033012_1704_SQLInjectio1.png?d9c344)

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


(http://underterminal.nixiweb.com/wp-content/uploads/2012/04/sshot-1.png)

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.(http://[img]http://resources.infosecinstitute.com/wp-content/uploads/033012_1704_SQLInjectio3.png?d9c344)


(http://resources.infosecinstitute.com/wp-content/uploads/033012_1704_SQLInjectio4.png?d9c344)


(http://resources.infosecinstitute.com/wp-content/uploads/033012_1704_SQLInjectio5.png?d9c344)


O usando alguna herramienta de automatizacion como Sqlmap


(http://resources.infosecinstitute.com/wp-content/uploads/033012_1704_SQLInjectio10.png?d9c344)



Espero que les haya servido muchachos! saludos!
Título: Re:SQL Inyection a travez de cabeceras HTTP
Publicado por: Matabarras en Abril 12, 2012, 11:42:42 PM
Esto no va en malwares, esto va en Inseguridad Informatica " Bugs y Exploits" o Tutoriales y Manuales, pero como aun no esta esa sección en inseguridad informatica, te lo muevo aqui

Aver si miramos un poco en la zona que posteamos, Saludos y gracias  ;)
Título: Re:SQL Inyection a travez de cabeceras HTTP
Publicado por: q3rv0 en Abril 12, 2012, 11:45:50 PM
uy, me disculpo jeje andaba con la cabeza en cualquier lado!
Título: Re:SQL Inyection a travez de cabeceras HTTP
Publicado por: 5TU4RT en Abril 13, 2012, 04:53:53 AM
Gran aporte... Interesante!!!
Sigue asi.


SALU2
Título: Re:SQL Inyection a traves de cabeceras HTTP
Publicado por: Pr0ph3t en Abril 13, 2012, 11:13:32 AM
Añadí la etiqueta code en las partes de código del tuto para que esté más ordenado. Buen aporte, gracias...