PDA

Ver la versión completa : Ataque Web



vicdel
11-06-2009, 18:55
Hola a todos, me ha sucedido algo con un par de sitios que tengo hosteados en mi servidor y quisiera saber si alguien sabe la pregunta del millon: "Como cuernos hicieron!".
En todos los archivos index.php y home.php le agregaron una cadena al comienzo del archivo, "<iframe source='...' [...]". El usuario que realizo la modificación es el mismo yo utilicé para loguearme el dia anterior desde una computadora de un cliente (por todos lados insegura) para mostrarle como funciona el sistema de back end de un sistema OSCommerce.
O sea, ingrese a un sistema back-end con un internet explorer desde una computadora con SO Windows XP, el sitio está hosteado en un servidor Linux y la cuenta con la que ingrese figura como la realizadora de los cambios.
Pregunta: ¿Cómo hizo un proceso corriendo en Windows para capturar mi usuario y contraseña y realizar modificaciones en un servidor Linux?
Saludos, y gracias.

Danilo51
12-06-2009, 11:43
Buenas vicdel,
Por lo que comentas, seguramente en la máquina donde te logueaste para enseñarle a ese usuario el tema del OSCommerce, podría tener instalado un Keylogger (http://es.wikipedia.org/wiki/Keylogger).

De esta forma es facil quedarse con el usuario y contraseña escritas cuando te logueaste a tu sistema.

Una vez obtenido esto, lo siguiente que haría yo es:
Averiguar la ip de tu maquina servidora, e intentar entrar por ssh con el usuario y contraseñas recogidos. Si hubiera habido suerte... pues ya sabes si ese usuario tenía permisos sobre las carpetas donde están los ficheros, se modifican y ya está.

Que me corrijan los expertos si voy errado.

Un saludo.

j8k6f4v9j
12-06-2009, 12:56
Tiene pinta de haber sido un código y no alguien manualmente. Yo más que por un keylogger me inclino por un sniffer que, junto con la clave y el usuario, ha capturado la url a la que te conectaste. Ingresando luego por su cuenta para buscar y modificar los archivos de un tipo dado.

Yo haría lo que dice Danilo51, accedería a través de un protocolo seguro y cambiaría cuanto antes las credenciales. Es probable que quien modificó los archivos haya subido también algún medio de asegurarse el posterior acceso, por lo que otra de las cosas que haría sería una restauración completa de los sitios, junto con un seguimiento exhaustivo de cada movimiento que se haga con permisos de administración.

Salu2

fl4ppo
02-09-2009, 21:57
por las dudas ... y capaz suena un poco lamme ... pero ... te fijaste de no ser que hallan entrado o sacado los pass ... por sql inj ???

vicdel
03-09-2009, 13:51
Buenas a todos, y gracias por los posts.
Luego de esas cadenas llegaron otras, cambié las claves, actualicé el php del servidor y no sirvió de nada. El ataque tiene toda la pinta de ser por injection,sql y javascript. No entiendo muy bien como funciona esto, sobre todo el javascscript injection, si alguien tiene algún texto esclarecedor se lo agradezco.
Para solucionar el problema solo puse como solo lectura y ejecucion a todos los archivos chmod -R 555 *

Saludos

j8k6f4v9j
03-09-2009, 14:30
chmod -R 555 * no es nada recomendable, sobre todo cuando tienes claves en texto plano en los archivos (como por desgracia suele pasar con php y la conexión a la BD)

Mejor un 550.

Efectivamente, si el sistema de archivos impide la escritura, no se podrá escribir en los archivos. Es una buena solución. Pero mucho me temo que la vulnerabilidad sigue estando ahí. Quizá se trate de un 0day para oscommerce (que tiene un largo historial de vulnerabilidades).

Para que entiendas cómo funciona la inyección de sql te pongo un ejemplo.

Supongamos que una web te reenvía la contraseña al especificar un usuario válido en un formulario.

Una vez recogido el nombre de usuario que ha introducido éste, el php hace una consulta a la base de datos para decidir si reenviar la contraseña o no.

Podría ser algo como:



$sqlquery = 'SELECT usuario FROM table WHERE usuario = ' . $usuariointroducido . ';'
if( ! $result = mysql_query ( $sqlquery, $dblink ) ) {
echo mysql_error();
return;
} else {
echo "ok, enviamos la contraseña";
}


Al no validar la entrada, se puede meter un trozo de código SQL directamente, y el PHP se lo traga. Por ejemplo, supongamos que en el formulario introducimos esto:


'esteusuarionoexiste' OR 'x'='x'


El código php que he escrito más arriba, ejecutaría esto:



$sqlquery = 'SELECT usuario FROM table WHERE usuario = 'esteusuarionoexiste' OR 'x'='x'';'
if( ! $result = mysql_query ( $sqlquery, $dblink ) ) {
echo mysql_error();
return;
} else {
echo "ok, enviamos la contraseña";
}


Es decir, que la consulta sería válida y se reenviaría la contraseña.

Bueno, hay muchas "imprecisiones" en el código que te he puesto :D Pero la base es ésa.

Salu2

hystd
03-09-2009, 17:12
No manejo bien el SQL injenction, pero lo que se mete en el formulario no debería ser así?:


esteusuarionoexiste' OR 'x'='x'

(Sin la primera comilla)

Un saludo

j8k6f4v9j
03-09-2009, 20:07
No, porque la última comilla provocaría un error de sintaxis, ya que el php es quien cierra. Es decir, en caso de comprobar la columna user, y siendo ésta una cadena de texto, en el formulario iría algo como:


noexisto' OR 'lam0' = 'lam0

El código comprobaría algo así:


SELECT usuario FROM usuarios WHERE usuario = 'noexisto' OR 'lam0' = 'lam0';

Las comillas azules las pone el PHP. Con ese input se crearía una segunda condición ('lam0' = 'lam0') que sí devolvería verdadero y devolvería todos los usuarios de la tabla usuarios.


Salu2

hystd
03-09-2009, 20:28
Eso es, entonces es sin la primera comilla no? :s

j8k6f4v9j
03-09-2009, 20:39
Eso es, entonces es sin la primera comilla no? :s
Y sin la última.

Salu2

hystd
04-09-2009, 01:29
Entonces lo que has dicho que se introduce en el formulario:


'esteusuarionoexiste' OR 'x'='x'

Lo correcto para explotar la vulnerabilidad sería así:


esteusuarionoexiste' OR 'x'='x

En la última comilla no me había fijado. :p

Un saludo.

j8k6f4v9j
04-09-2009, 02:59
noexisto' OR 'lam0' = 'lam0


Eso puse :p

Se me ocurre uno más bonito:

' OR (true) OR 'pez' = 'pescado
:D

Salu2

cochinita
02-01-2010, 02:03
Hola!! Necesito que alguien me ayude en inyeccion de datos SQL... lo que sucede es que necesito modificar unos datos (numeros) en un sistema, pero no se como hacerlo bien, y no quiero meter la pata o cometer errores... si hay alguien que pueda ayudarme o prestarme sus servicios (pagaos) se los agradeceria muchisimo!!
escribeme a

[email protected]

clarinetista
02-01-2010, 23:11
cochinita, leete las normas del foro