Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ZaPa

#1
Hola WHQ y muchas gracias por tu respuesta...

¿Es posible que el hosting donde aloje mi web no tenga activada la función convert?

Microsoft JET Database Engine error '80040e14'

Undefined function 'convert' in expression.



¿Pueden atacar de alguna otra forma?

Debo añadir que estoy trabajando bajo una base de datos Acces como podeis observar arriba "Microsoft JET Database"

Saludos.
#2
Hola.

Queria hacerles una pregunta.... ya qué, estoy terminando un pequeño script en asp y me interesa bastante asegurarlo al máximo. Lo único que he hecho para evitar un sql injection es filtrar el carácter (') y la palabra (Select).

Creo haber leido algunos documentos donde decian que se podian saltar estos "filtros" pasando el valor que queremos lograr inyectar en hexadecimal.

Me gustaria saber como es posible hacer esto ya qué estoy probando insertando los códigos hexadecimal a pelo (y como es obvio no funciona).
¿Debo de utilizar alguna función para que él mismo haga la conversión de hex a ascii y se trage la inyección?
Si es asi... ¿Que función puedo utilizar en asp?


Muchas gracias.
Un saludazo.


EDITO:

Debo añadir que tambien he filtrado la palabra clave 'char' para evitar pasar de hex a char, de esta forma con cast():

CAST(0x53656c656374 AS CHAR (4000))

Al detectar la palabra char, el script se detiene.


¿Ahi alguna otra forma con la que puedan vulnerar mi script?

Saludos.

#3
Hola de nuevo a todos.

Ya he conseguido saber las tablas que ahi en la base de datos y demas, incluso estoy accediendo a los valores de cada columna, pero....... realmente no entiendo esto, os explico:

Anteriormente con injecciones simples del tipo ("Select * from TABLA) y demás, me daba error de sintáxis, buscando,buscando, me he dado cuenta que para las páginas asp utilizan la función convert() para obtenre datos de la base de datos......

Por ej:



http://www.paginaweb.com/datos.asp?variable=and 1=convert(int,(select top 1 Usuario from usuarios))--


Con esto conseguiriamos mostrar el 1º campo de la tabla usuarios y columna usuario.


¿Porque esto funciona asi, es decir, porque tengo que utilizar convert() y lo que es la sintáxis de las llamadas sql tampoco son igual que las de php, es asi para MSSQL SERVER?

Un saludo.
#4
Hola.
$ip=$_SERVER['REMOTE_ADDR'];



Y en la variable $ip tienes la ip del visitante, ya puedes enviarla por mail con la función mail(), o escribirla en un txt,base de datos....
#5
Hola de nuevo y gracias por responder otra vez man.

Traigo novedades frescas a la mesa jeje....

Con la función convert() he podido obtener algunos datos de los productos que ahi en la db, por ejemplo haciendo:

variable=convert(int,(select+productos.referencia))

Me responde una referencia del 1º articulo de la base de datos, respuesta:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Error de sintaxis al convertir el valor nvarchar 'A35678956' para una columna de tipo de datos int.

/cgi-bin/datos.asp, línea 25


Como podeis ver, me ha devuelto la referencia: 'A35678956'..

He estado probando combinaciones con nombre de tablas (donde pudiera estar los datos de administrador). He probado un monton de nombres de tablas para ver si encontraba esa info, pero ninguna concuerda ccon la tabla donde se almacenan los datos valiosos..

Sigo esperando a que alguien me diga si puedo listar todas las tablas de la base de datos, o algo similar.

Muchisimas gracias.
Saludos.
#6
Hola...

Conseguí ejecutar la sentencia 'SELECT @@version' y ver información del sistema...

Pero he tenido que hacer una cosa, y no entiendo el PORQUE funciona, aver si me lo podeis explicar:

La inyección ha sido la siguiente:

AND (SELECT @@version)<=1 --

Y como se puede observar, despues de la inyección, he tenido que añadir el menor o igual que 1 (<=1) y asi si funciona, y se ejecuta la sentencia devolviendo lo siguiente:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Error de sintaxis al convertir el valor nvarchar 'Microsoft SQL Server 2000 - 8.00.2055 (Intel X86) Dec 16 2008 19:46:53 Copyright (c) 1988-2003 Microsoft Corporation Desktop Engine on Windows NT 5.2 (Build 3790: Service Pack 2) ' para una columna de tipo de datos int.



Por lo que se ve, funcionaaa...

Ahora no entiendo 2 cosas, aver si me podeis explicar....

1 - ¿Porque sin parantesis la sentencia no funciona?
2 - ¿Porque tengo que añadir esa comparación númerica?

¿Alguien me puede aclarar estos 2 puntos, se lo agradeceria muchisimo.

Un saludo.
#7
El problema principal de esto es que me da error de sintáxis y no se porque...si yo añado esta sentencia, me da error de sintaxis:


http://www.paginaweb.com/productos.asp?variable=38715333 AND Select * from productos

Con esta nueva inyección (Select * from productos) me da error de sintáxis:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Sintaxis incorrecta cerca de la palabra clave 'SELECT'.

/cgi-bin/datos.asp, línea 25



¿Algo hago mal?

Muchas gracias de nuevo.
#8
Pero...¿es muy dificil? pero si es una sql inyection normal,no? lo único que ocurre es que no nos enfrentamos con un formulario, es lo único que veo diferente.


Lo único que quiero saber es eso, si podria llegar a listar las tablas, osea, que no tenga que ejecutar sentencias si o si en la tabla que estamos ejecutando, que pueda trabajar con otras tablas aparte de la que esta trabajando la variable donde esta el sql inyection. ¿se entiende?


Un saludo y muchisimas gracias alex@shellroot .
#9
Hola de nuevo a todos.


Si, para hacer eso mismo se que esta la función is_numeric(),pero como he dicho anteriormente, me gusta hacer las cosas lo más puras posible, es decir, si puedo evitar utilizar funciones de un propio lenguaje mejor. Asi podré portarlas a otro lenguaje sin muchos cambios.

De todas formas la 2º funcion (comprobar si añadimos carácter) es muy buena opción.

Saludos.
#10
Hola de nuevo y gracias por tu respuesta shellroot.

Ya entendí lo que dijiste en el anterior mensaje....

Claro,con ese error me soltó lo que queria saber,que es el nombre de la tabla (con el que estamos trabajando) y el campo, pero en esa tabla no ahi ningun dato valioso, me gustaria saber si puedo acceder desde ahi a otras tablas...

¿Es posible?

¿como podria trabajar con otras tablas dispnibles en la db?

Muchisimas gracias man :)