Buscar
Advertisement
Licencia Creative Commons
Este sitio Web está bajo una licencia Creative Commons Atribución 2.5 México.
Suscríbete a 1Mbits.Com

Ingresa tu dirección e-Mail:

Recibirás un correo electrónico cada vez que se publiquen nuevos artículos en este sitio Web

Dosis de Información
  • Abrir varias sesiones en Messenger
    15/04/2011 | 12:16 AM

    Para activar multisesion al Windows Live Messenger sin instalar nada siga estos sencillos pasos. Ejecuta el registro de Windows abriendo la línea de comandos como administrador y escribe “regedit” dirígete a la cadena: HKEY_LOCAL_MACHINE > SOFTWARE> Microsoft > Windows Live / Messenger una vez dentro realizamos lo siguiente: Hacemos clic con botón derecho y creamos [...]

  • Implementación de Asides
    13/04/2011 | 12:04 AM

    Lo que prometo lo cumplo, siempre estoy al tanto de la programación descubriendo y experimentando con nuevos lenguajes y esta vez se presenta un pequeño reto la implementación de Asides pequeñas publicaciones, ¡reto cumplido este es el Asides que implemente y funcionando! donde publicare pequeñas dosis de información además de cosas interesantes que me encuentre [...]

  • RSSArchivo de Dosis de Información »
Calendario
febrero 2012
L M X J V S D
« dic    
 12345
6789101112
13141516171819
20212223242526
272829  

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.

 Inyección SQL

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, rS

userNombre = 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 query

if 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 =]

  • jonathan dice:

    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.

  • @jonathan: Claro que si amigo, "El conocimiento humano pertenece al mundo" y ahí que compartir.

Deja un comentario

*