SQL Injection Ayuda Urgente

eXtreM3

Buenos días, he venido a la oficina y me he encontrado este email de un anónimo, sobre la última web que he desarrollado:

Hola, supongo que este correo no llegará a manos de XX ... vi
en Twitter que tenia web oficial y en ella, encontré una vulnerabilidad que
permite obtener el usuario administrador y su contraseña, pudiendo entrar en
el panel de administración se logra editar noticias y un sinfín de cosas
más.

La vulnerabilidad en concreto es Inyección SQL, que aunque es básica y
peligrosa tiene fácil arreglo ...

La intención de este correo es solo avisar de ella y poco más.

Y ahora os explico, la web es toda estática salvo el blog que está en WordPress... En algunas partes de la web como la home, hago una consulta para traer las últimas noticias del blog, tal que

$notPersonal = mysql_query("SELECT wp_posts.ID, wp_posts.post_title, wp_posts.post_content, wp_posts.post_date, wp_posts.post_name FROM wp_posts, wp_terms, wp_term_relationships WHERE wp_posts.ID = wp_term_relationships.object_id AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id AND wp_terms.name = 'Blog Personal' AND wp_posts.post_type = 'post' AND wp_posts.post_title <> 'Borrador automatico' ORDER by wp_posts.ID DESC LIMIT 0 , 4");

Después las muestro con el típico while.

En definitiva, la web no tiene formularios de contacto ni ningún punto de entrada de información a la base de datos, únicamente el login de wordpress (versión 3.1.3), cómo coño ha inyectao este tio??? La verdad es que ahora estoy perdido...

EDIT: por lo pronto he buscado y por lo visto la version 3.1.3 era vulnerable, así que ya he actualizado en el servidor a la última versión, la 3.2

Soltrac

El 99% de los "hackers" son scriptkiddies q buscan una versión vulnerable de un sistema público (n tu caso wordpress) y lo utilizan.

Casi seguro que ese era el problema.

catalon

Esa query es asi tal cual la has puesto o le estas metiendo valores que llegan por post o por get? Es muy comun concatenar la query con alguna variable tipo:

$notPersonal = mysql_query("SELECT wp_posts.ID, wp_posts.post_title, wp_posts.post_content, wp_posts.post_date, wp_posts.post_name FROM wp_posts, wp_terms, wp_term_relationships WHERE wp_posts.ID = wp_term_relationships.object_id AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id AND wp_terms.name = 'Blog Personal' AND wp_posts.post_type = 'post' AND wp_posts.post_title <> 'Borrador automatico' ORDER by ".$_POST['orden']." DESC LIMIT 0 , 4");

Notese el $_POST['orden'] en el sql. Si estas haciendo algo parecido a eso ahi lo tienes. Si es asi, usa apropiadamente pdo en lugar de mysql_query. Si no tienes nada de esto entonces tiene que se alguna vulnerabilidad de wordpress como dice soltrac, que pensandolo bien es lo mas probable.

1 respuesta
eXtreM3

La consulta es tal cual, sin ningún otro parámetro.

Seguramente sea cosa de la versión, aunque el tío no ha contestado al email que le he enviado. La verdad es que me parece increíble que un CMS tan famoso y grande como wordpress tenga un fallo de seguridad en su versión 3.1

Gracias de todas formas, os mantendré informados si hay novedades.

1 respuesta
spyro512

#4

La verdad es que me parece increíble que un CMS tan famoso y grande como wordpress tenga un fallo de seguridad en su versión 3.1

Por esa regla de 3 ningún software tendría ninguna vulnerabilidad. Como ya estamos por la version 5.0.....

Todo software es vulnerable, la cosa es encontrar cómo.

1 respuesta
eXtreM3

#5 Sí, pero estamos hablando de la versión 3.1, que tenga agujeros de seguridad en la versión 1.0 - 1.5 - 2.0 ... bueno, más o menos es comprensible. Pero para el equipo enorme de desarrollo y seguridad que deben tener tendrían que haber centrado los recursos en posibles vulnerabilidades, no?

Claro que todo software es vulnerable, pero un CMS de esas dimensiones no puede tener un fallo de seguridad tal que si pones http://tudominio.com/wp-admin/{SQL Injection} te peta el login y entra, eso es un fallo de niños, no puede pasar en la version 3.1, pero bueno por suerte ese fallo se esfuma en la 3.2 (¬¬)

1 respuesta
D10X

#6 Existen tantas cosas que no deberían pasar ...

B

#1 Es un exploit de wordpress o en su defecto valida todas las cadenas enviadas por POST y GET.

PiradoIV

#1 échale un ojo a mysql_real_escape_string a ver si lo puedes parchear.

1 respuesta
eXtreM3

#9 no tiene nada que ver con eso, has leído? :$

1 respuesta
B

#10 Es una funcion php para "escapear" strings y evitar la inyección sql.

PiradoIV

Sí, realmente he leído, me despistó el comentario de #3 y tampoco es para ponerse así =) Si lo que usas es el WP para gestionar los posts y demás, ¿por qué no simplemente lo mueves a otro lado menos usual, fuera de wp-admin?.

Si no hay formularios de ningún tipo, puede ser también que el tipo nada más que quiera dinero para revelarte dónde el supuesto agujero.

0buS

Has leido esta web? http://comunidad.dragonjar.org/f150/multiples-inyecciones-sql-en-wordpress-11981/

Ahí te dice un poco por donde van los tiros, aunque tambien dice que está solucinado en la RC3 de la versión 3.2. Si tienes esa versión lo mismo está fixed, pero no me extrañaría nada que apareciera otro bug más adelante. Es lo malo que tienen estos CMS.

GamA

A mi que quereis que os diga, pero me parece de perroflautas no haber controlado SQL injection en wordpress. Es de primero de programación web joder...

Que me digas que si te hacen mil historias y la de su madre te consiguen acceder, pues no se, siempre es mejorable y no deberían existir vulnerabilidades, pero el XSS y el SQL-injection son un MUST...

Usuarios habituales