miércoles, 18 de agosto de 2010

Malware en ReservaPlazas.com ¿como?

El otro día comentaba el caso del malware detectado en la web de ReservaPlazas.com pero ¿como es posible esto? ¿como es posible que alguien externo infecte nuestra web añadiendole código para que otros se infecten? Parece claro pensar que ha debido existir algún tipo de acceso al servidor donde esta alojada la web, bien acceso físico o mediante una conexión desde el exterior.

El acceso físico, pese a que es posible, es poco frecuente ya que es más complicado acceder a las instalaciones aunque nunca se debe descartar nada pero, en este caso, creo que me voy a decantar por el acceso remoto ya que este tipo de accesos se valen de alguna vulnerabilidad detectada en el servidor para conseguir el acceso total o parcial al mismo.

Si búscamos por internet las urls relacionadas con el ataque (nemohuildiin.ru) veremos que se han producido una serie de ataques a distintos servidores y que la forma de "infectarlos" era actualizar todas las tablas añadiendole un iframe de forma que cuando se muestre cualquier información de los campos afectados aparecerá también la llamada al iframe que descargará el troyano.

¿Quiere decir eso que la web http://www.reservaplazas.com/ tiene alguna vulnerabilidad? pues, a poco que busquemos en la web vemos que si existen multiples vulnerabilidades de inyección SQL lo cual hace bastante posible que sea victima de este tipo de ataques tal y como ha sucedido.

Por ejemplo, para realizar una reserva se utiliza la URL http://www.reservaplazas.com/turnos.asp?nCentros_Actividades=107 donde el parámetro nCentros_Actividades indica el centro donde se desea realizar la reserva.

pero es facil ver que el parámetro nCentros_Actividades no es filtrado y todo aquello que se indique en él será ejecutado como parte de la consulta a base de datos. Veamos el típico ejemplo de unión de dos select, es decir, vamos a intentar hacer un UNION SELECT 1 para ello intentamos acceder a la URL http://www.reservaplazas.com/turnos.asp?nCentros_Actividades=107 union select 1 y podemos ver que se produce un error de SQL Server indicando que las dos consultas deben tener el mismo número de parámetros.

así que ahora solo queda averiguar cuantos parámetros debe tener la consulta por lo que iremos intentando URLs del tipo:
hasta encontrar la url válida.

Una vez hecho esto ya podemos intentar acceder a la tabla sysobjects para listar el contenido de todos los objetos del servidor y acceder a cualquiera de las tablas.


Parece claro que la inyección SQL fué el método utilizado para "infectar" el servidor y distribuir el malware. Realmente el servidor no se "infectó" ya que el malware no se encontraba alojado en él pero si que fué utilizado como pasarela de confianza para que los usuarios se infectaran.

No hay comentarios:

Publicar un comentario