SQL Inyection a traves de cabeceras HTTP

Iniciado por q3rv0, Abril 12, 2012, 06:33:34 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Abril 12, 2012, 06:33:34 PM Ultima modificación: Abril 13, 2012, 11:11:16 AM por Pr0ph3t
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

Código: php
$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()

Código: php
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()

Código: php
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 :}

Código: php
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

Código: php
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!
Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Twitter: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Abril 12, 2012, 11:42:42 PM #1 Ultima modificación: Abril 12, 2012, 11:45:59 PM por Matabarras
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  ;)
No esperes nada, vive la vida, y que los demas hagan lo que ellos creen.

uy, me disculpo jeje andaba con la cabeza en cualquier lado!
Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Twitter: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Gran aporte... Interesante!!!
Sigue asi.


SALU2
Si se puede imaginar... se puede programar.!

Añadí la etiqueta code en las partes de código del tuto para que esté más ordenado. Buen aporte, gracias...
Twitter: @The_Pr0ph3t
[email protected]