Un poco de seguridad, SQL Injection

Un poco de seguridad, SQL Injection

Gracias a los comentarios de los compañeros de Java Mexico, vimos que como mostre anteriormente no es la forma mas segura, por no decir la menos indicada, en realizar conexiones a una base de datos y mucho menos en un ambiente web que como dice ezamudio es de naturaleza multiusuario y por tanto la concurrencia es algo vital.

Hoy les traigo un pequeño ejemplo de como podemos usando injeccion SQL obtener acceso a los datos de un servidor, borrar datos, modificar, etc. En este caso solo mostraremos como loguearnos sin siquiera tener una contraseña.

Imagenes

Codigo

Clase Principal

 

Clase Conexion

 

Explicacion

La contraseña en la Base de Datos es "a1/S#$d$" y como sabrán la consulta que se hizo para la conexión a la Base de Datos tiene la siguiente estructura:

" select * from usuario where clave=' "+new String(clave.getPassword())+" ' "

conociendo esa estructura podríamos jugar con ella, engañando al sistema, si sabemos que para verificar la clave recibe un texto cualquiera entre comillas simples de esta forma clave='123', podríamos entonces saber que al cerrar las comillas y agregarle un operador OR como lo es en MySql las dos barras ( || ), podríamos agregar una expresión verdadera y sumada con una contraseña errada nos daría acceso de igual forma ya que para que sea verdad se necesitaría una de las dos y como le vamos a agregar una expresión verdadera ya contaríamos con al menos 1 expresión verdadera. Nos quedaría de la siguiente forma:

clave='123' || '1'='1'

Si lo que escribimos en la casilla de la contraseña es 123' || '1'='1' completando de esta forma la consulta anterior nos quedaría así:

select * from usuario where clave='123' || '1'='1';

Lo que esta en negrita es lo que añadimos, podremos entonces entrar al sistema.

Pueden descargar el proyecto con los archivos fuentes, las imágenes y el JAR directamente desde aquí.