martes, 20 de marzo de 2012

Usando github

Antes que nada voy a comentar un poco que es github. Es un lugar para alojar nuestros proyectos utilizando el sistema de control de versiones Git, desarrollado por Linus Torvalds. Podemos permitir que varios desarrolladores estén trabajando en un mismo proyecto, ver los cambios que se produjeron en cada archivo, incluso permite que sigamos a ciertos usuarios.

La página de github es http://github.com. Lo primero que debemos realizar antes que nada, es registrarnos. No voy a comentar como se hace eso porque es fácil.

Una vez que tengamos un usuario en github, tendremos que instalar las herramientas necesarios en nuestro sistema para acceder al repositorio. Soy usuario de Ubuntu, así que los pasos que explique aquí para instalar las herramientas serán para dicho sistema operativo.

Abramos una terminal y mediante apt-get instalemos git-core, git-gui y git-doc:
sudo apt-get install git-core git-gui git-doc

Tendremos que generar una clave SSH para conectarnos al servidor, esto si no tenemos una generada. Para hacerlo tenemos que ejecutar lo siguiente en la terminal:
ssh-keygen -t rsa -C "tu-email@tuemail.com"

Cuando genera la clave SSH nos indica el directorio en donde la guardo. En mi caso la genero en /root/.ssh/id_rsa.pub. Hacemos:
cat /root/.ssh/id_rsa.pub

Copiamos todo lo que nos devuelve y nos vamos a la página de github. Le damos click en la sección Account Settings que seria la opción del medio.


En el panel izquierdo veremos una opción que dice SSH Keys, ingresamos allí y colocamos la clave SSH que acabamos de generar.

Si en una terminal ejecutamos el comando ssh -T git@github.com tendría que conectarse correctamente al servidor.

Configuramos unos datos que serán necesarios cuando hacemos los commit.
git config --global user.name "NombreDeUsuario"
git config --global user.email "tu-email@tuemail.com"

Listo, con esto tendremos configurado git para cuando nos conectemos a github.

Crear un repositorio
Deberemos crear un repositorio en github para guardar nuestro proyecto. Podemos tener dos tipos de repositorios:
-Público: todos pueden ver nuestro proyecto y descargarlo.
-Privado: solo nosotros podemos acceder a este repositorio. Obviamente es una opción que solo podemos acceder pagando.

Para nuestro aprendizaje vamos a utilizar un repositorio público. Vamos a la página de github, ingresamos con nuestros datos, en la parte inferior podemos ver los repositorios que tenemos y un botón que dice New repository, le damos click y podremos ingresar los datos de nuestro repositorio público.

Una vez creado el repositorio tenemos que usar git para acceder al mismo y subir nuestros archivos.

Suponiendo que no tienen todavía ninguna carpeta con su proyecto, vamos a comenzar creando la carpeta.
mkdir NuevaCarpeta
cd NuevaCarpeta

Estamos ahora dentro de NuevaCarpeta, vamos a iniciar git:
git init

Es recomendable crear un archivo README para comentar de que va nuestro proyecto, cambios, problemas, etc.
touch README (este comando solo crea README, pueden modificarlo con algun editor de texto)

Tenemos que indicarle a git que agregamos un archivo nuevo, en este caso README:
git add README

Luego realizamos el commit del archivo agregado:
git commit -m 'Se agregó el archivo README'

Una vez hecho esto, tendremos que enlazar nuestro directorio local con el directorio remoto:
git remote add origin git@github.com:nombreDeUsuario/repositorio.git
git push -u origin master

Listo! Con esto tenemos completamente enlazado y configurado nuestro directorio local con el repositorio en github. Si vamos a nuestra cuenta veremos que en nuestro repositorio se encuentra el archivo README que recien subimos.

Y después?
La herramienta git tiene muchísimas funciones, es casi imposible memorizar todas, pero sí podemos ir aprendiendo como usar las más comunes.
Cuando modifiquen algún archivo o lo creen, tendrán que hacer un commit y un push para colocar esos cambios en el repositorio. Les voy a explicar como hacer eso, es muy simple.

Si creamos un nuevo archivo, tenemos que agregarlo con:
git add NuevoArchivo

Si modificamos algunos archivos, podemos ver con git checkout cuales son los modificados.

El commit es indicar que queremos hacer un cambio. Si nosotros agregamos nuevos archivos solo debemos hacer:
git commit -m 'Comentarios'

En cambio, si también algunos archivos fueron modificados, debemos hacer:
git commit -a -m 'Comentarios'

Por último debemos darle el toque final con push:
git push

Si se ejecuta correctamente, entonces todos los cambios que indicamos serán aplicados a nuestro repositorio en github.

Conclusión
Github es muy potente, tiene miles de funciones, nos permitirá ser más productivos en nuestros desarrollos. Personalmente, me gustó, pero tengo que admitir que me falta muchísimo por aprender sobre esta herramienta, así que es muy seguro que haga otras publicaciones para explicar como utilizar ciertas funciones. Espero que el artículo les haya servido para iniciarse con github. En la página tienen un centro de ayuda donde explican como usar el servicio.

Hace mucho que no publicaba. La universidad me consume mucho tiempo, si bien gracias a mi dedicación voy llevándole al día, es muy difícil dedicarme a proyectos personales como mi blog.



sábado, 30 de abril de 2011

Seguridad en Facebook

Hace mucho se habla de que Facebook iba a implementar el protocolo seguro de HTTP (HTTPS), sin embargo, solo vi que navegamos con ese protocolo al modificar cosas de nuestra cuenta. Para navegar en todo momento con HTTPS se debe activar manualmente en la configuración de su cuenta.

A grandes rasgos, HTTP es un protocolo usado para tranferencia de páginas web, es uno de los tantos con los que cuenta internet. El HTTPS tiene el mismo uso pero encripta todo lo que envíen, lo que hace que si alguien está escaneando su red y ustedes están navegando por Facebook, los paquetes iran con la información codificada haciendola ilegible.

Los pasos para habilitar HTTPS en facebook son los siguientes:
1) Entrar a Facebook y clickear en "Cuenta", luego en "Configuración de Cuenta".

2) Alli dentro buscan donde dice "Seguridad de la Cuenta" y le dan Click.

3) Marcan el cuadrito que dice "Navegar con HTTPS siempre que sea posible" y le dan "Guardar":




HTTPS es para que naveguen seguros sin que nadie pueda robarles su cuenta. En otro post explicare más detalladamente el funcionamientos de este protocolo que hasta Twitter lo está implementando.

viernes, 29 de abril de 2011

Google en sus inicios

Interesante video donde se puede ver a Sergey Brin y Larry Page en una reunión con sus empleados. A simple vista dista mucho de ser una empresa muy grande y poderosa, pero esta apariencia informal es lo que hace que las personas que alli trabajan sean eficientes porque se sienten como en casa.

jueves, 17 de marzo de 2011

XSS - Cross Site Scripting

Antes de comenzar quiero realizar algunas aclaraciones. La seguridad informática consiste en estudiar los métodos que podemos aplicar en un sistema informático para conservar la Integridad, Confiabilidad y Disponibilidad de la información. Cuando hablamos de Integridad decimos que la información solo puede ser modificada por aquellos usuarios que tengan permiso para hacerlo; la Confiabilidad indica que solo pueden tener acceso los usuarios autorizados; y la Disponibilidad hace referencia a la disponibilidad de los datos cuando son requeridos. Se suele llamar Hacker a aquella persona con muchos conocimientos sobre sistemas, la mayoría son muy curiosos e inteligentes.
Para mantener esta seguridad en nuestros datos tenemos que aprender las técnicas que usan los Hackers para obtener acceso no autorizado. Esto conlleva a un debate moral que prácticamente no tiene solución por culpa de los medios de difusión que lograron asociar la palabra “Hacker” con “CiberDelincuente”; en la jerga informática suele definirse a los Hackers de acuerdo a sus intenciones en:
Hacker de Sombrero Blanco (White Hat Hacker): realizan intrusiones para determinar la seguridad de un sistema informático para luego mejorarlo y así evitar situaciones no deseadas. Son los buenos, los profesionales.
Hacker de Sombrero Negro (Black Hat Hacker): son los menos profesionales, no por sus conocimientos, sino por su moral. Realizan intrusiones a sistemas con fines maléficos, como robar datos privados, estafar, etc.
Hacker de Sombrero Gris (Gray Hat Hacker): son una combinación de los dos anteriores, terminan haciendo las cosas para el mejor postor (el mal o el bien).

Me extendí demasiado explicando sobre seguridad informática, pero me parece lo correcto para que no digan que enseño a estafar, simplemente explico las técnicas que permiten realizar actos delictivos y que pueden perjudicar a nuestros clientes si somos programadores web. El bando en el que cada uno decida estar depende de ustedes, pero recuerden que del lado del mal están solos... y pueden terminar mal.

En este artículo voy a tratar sobre una de las vulnerabilidades que se encuentra en prácticamente todas las aplicaciones web e incluso navegadores. Prácticamente ninguna página web se salva del XSS.

¿Que es XSS?
Significado de las siglas: Cross Site Scripting (Cruzar Código al Sitio). Se usa la X en lugar de la C para que no se confunda esta sigla con la de CSS (Hojas de Estilo en Cascada), que no es una falla sino mas bien una tecnología para maquetado de páginas.
A grandes rasgos, el XSS consiste en inyectar código (el mas común: Javascript) que produzca un cambio en la página y nos permita aprovechar la confianza que tienen los usuarios a dicho sitio. Por ejemplo podemos mostrar un formulario de iniciar sesión a twitter que envié los datos a un script subido previamente por un cibercriminal, que almacena esos datos para luego ser vendidos a aquellos que se dedican al spam.
El XSS nos permite defacear una página. Si la página de taringa tuviese un XSS, se podria aprovechar para mostrar un formulario donde se pida una cuenta de facebook, nosotros no sospecharíamos porque en la barra de dirección del navegador diria "http://taringa.net/". En cambio, si dice la URL que dice nuestro navegador es totalmente desconocida lo pensaría antes de ingresar mis datos de acceso.
Existen dos tipos de XSS:

-Persistente: se produce generalmente en sectores donde podemos comentar, de modo que el código que inyectemos quedará almacenado en el servidor y se ejecutará cada vez que abramos la página.
-No Persistente: también conocido como reflejado, consiste en inyectar código pasándolo mediante la URL, no se almacena en el servidor, solo es explotable el XSS mediante la URL.

Como evitar el XSS
El XSS se produce cuando no filtramos los datos pasados que luego se colocan en el documento HTML que conforma nuestra página. Generalmente con filtrar los símbolos < y > ya lo evitamos, sin embargo, todo depende del contexto. En algunas ocasiones también tenemos que filtrar la comilla doble y la simple ya que el dato ingresado se coloca como dirección para un vínculo.
El término Bypass es usado para designar un método para saltear el filtro y permitir la ejecución del código que inyectamos. Este método puede ser una secuencia de caracteres especialmente formada, el aprovechamiento de alguna falla del sistema de codificación usado por el navegador, etc.

Esta falla es a mi parecer una de las más fáciles de explotar, solo es cuestión de buscar un hueco en la página donde no se filtren los datos y luego depende de nuestra creatividad los usos que podemos llegar a darle.


Prueba de Concepto
Ahora que hemos definido la vulnerabilidad y como se produce, es conveniente practicar con una página diseñada por nosotros que nos permita ver en funcionamiento la falla. Para esto les daré un código muy simple que refleja un error que vi recientemente en un sitio para compartir libros sobre informática y distintas temáticas, les avise de la misma pero todavía sigue sin solución.
Supongo que ya tienen un servidor Apache con PHP instalado, sino pueden descargar uno de los paquetes como WAMPP o LAMPP (los que uso yo, para Windows y Linux respectivamente).
Comenzaremos con XSS no persistente ya que es el más común y la página de prueba tiene menos código, en un próximo capitulo daré un código de XSS persistente.
El código fuente:


<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>POC de XSS no persistente</title>

</head>



<body>

<h1>POC de XSS</h1>

<h3>

<p align="center">

El archivo que usted está por descargar se encuentra comprimido en un rar.<br/>

Utilice Winrar para descomprimirlo y un lector PDF para visualizarlo. <br/>



Descargar:

<?php

/*

Aquí se escribe en el HTML lo pasado por get en la variable link.

No se filtra el dato pasado, por lo tanto se escribe tal cual en la página...

entonces XSS!!

*/

$link = "";

if(isset($_GET['link'])){

$link = $_GET['link'];

}

echo "<a href=\"". $link . "\">Descargar Libro PDF</a>";

?>

</p>

</h3>

</body>

</html>


Este código lo copian en un index.php y lo ejecutan. Si ejecutan desde la url localhost/index.php el link Descargar Libro PDF no tendrá ninguna dirección. Ahora prueben ejecutarlo como localhost/index.php?link=http://google.com y denle click al vinculo, le redirige al buscador de Google.
Bien, como vemos todo lo que pasamos por la variable link por GET se imprime en el documento en el parámetro HREF de la etiqueta A. Ahora prueben poner en link lo siguiente: “>, no copien y peguen porque por ahí el formato del texto hace que los caracteres sean distintos y no se produzca el bypass.
Lo que hicimos fue inyectar en el HTML un código Javascript que ejecuta una ventana de alerta con un mensaje, podríamos también colocar el código de un formulario que envié los datos a un script para que los guarde, y muchas cosas más, el único limitante del XSS es nuestro ingenio.
Los caracteres “> son el Bypass que nos permiten salir de la etiqueta A y que el código que esté después de la misma pueda ejecutarse.

Con este código pueden probar infinidad de cosas, recuerden siempre que es un XSS no persistente, por lo tanto el código solo se inyecta por la URL y perjudica al cliente, o sea el navegador, el XSS persistente perjudica al servidor ya que modifica un documento original produciendo una falta a la integridad de la información.

Considero a este artículo como una guía básica para introducirse al XSS, quedan muchos otros aspectos más que comentar, pero si sigo voy a terminar escribiendo un libro sobre XSS.
Como experiencia personal, yo comencé a incursionar en el mundo de la seguridad informática con esta vulnerabilidad, si bien es una falla web, me motivo para continuar investigando y aprendiendo cada vez mas

domingo, 2 de enero de 2011

Server Apache2 + php5 + mysql + phpmyadmin

Estoy configurando una computadora con Linux Ubuntu 10.10 para servidor web y no queria usar un paquete como LAMPP, queria configurar todo de cero.
Para tener funcionando un servidor web apache con PHP y MySql tenemos que ejecutar los siguientes comandos:

sudo apt-get update

Con esto actualizamos los repositorios para tener el software mas actualizado.
Luego instalamos Apache2:

sudo apt-get install apache2

El archivo de configuracion de Apache2 se encuentra en /etc/apache2/apache2.conf, en él podemos indicar mediante directivas la configuración del servidor.
Ahora procedemos a instalar PHP 5 y MySql:

sudo apt-get install php5 mysql-server-5.1

Cuando instale mysql nos va a pedir que asignemos una clave para el root.

sudo apt-get install phpmyadmin

Con esto instalamos phpMyAdmin, una herramienta visual que nos permite configurar las bases de datos en mysql.
Por ultimo enlazamos phpMyAdmin con la carpeta /var/www que es la raíz de nuestro servidor web para que luego cuando escribamos localhost/phpmyadmin se ejecute la aplicación.

sudo ln -s /usr/share/phpmyadmin /var/www

Por último reiniciamos el server Apache2:

sudo /etc/init.d/apache2 restart

Si todo nos fue bien, cuando pongamos en el navegador http://localhost/ abrira una pagina que dice It's Work.

A muchos como mi caso, cuando queremos reiniciar Apache2 nos larga un error, esto se debe a que en el archivo de configuracion apache2.conf tenemos que buscar las directivas User y Group y cambiar lo que tienen por www-data.
Si hicieron todo correctamente tendran su servidor web funcionando correctamente!!

Saludos!!

jueves, 23 de diciembre de 2010

Upload para múltiples archivos en PHP

Hace tiempo que no escribia por la facultad, pero hoy me decidi a subir un codigo en PHP que desarrolle para subir varios archivos de una sola vez, ideal para uploads de fotos.

Bueno comencemos. Primero que nada desarrolle una pagina en HTML con dos formularios, uno de ellos contiene los campos donde se van a indicar los archivos a subir y su correspondiente boton para enviar el formulario a un modulo que se encarga de subirlos; el segundo formulario hace una recarga de la pagina enviando un parámetro por POST que indica la cantidad de archivos que queremos subir. Es decir que la cantidad de archivos a subir lo indicamos nosotros.

index.php

<form action="subir.php" enctype="multipart/form-data" method="post" name="Upload">
[php]
 if(isset($_POST['cant_archivos'])){
  $cant = $_POST['cant_archivos'];
 }
 else{
  $cant = 2;
 }

 $x = 1;
 while($x &lt;= $cant){
  echo "Archivo numero $x: <input name="archivo$x" type="file" />";
  $x++;
 }
echo "<input name="cant" type="hidden" value="$cant" />";
[/php]
<input name="submit" type="submit" value="Subir archivos" />
</form>
<form action="?" method="post" name="c_archivos">
Cantidad de archivos:
  <input name="cant_archivos" type="text" />
<input name="submit" type="submit" value="Modificar" />
</form>

Este código representa nuestra pagina donde esta el uploader, el otro código recibe los archivos enviados por esta página y los almacena en el directorio raíz donde se está ejecutando el script.



subir.php

$cant = $_POST['cant'];
$cant = $_POST['cant'];

$no_sub = 0;
$sub = 0;

$x = 1;
while($x <= $cant){
if(is_uploaded_file($_FILES["archivo".$x]['tmp_name'])){
$nombre = $_FILES["archivo".$x]['tmp_name'];
$ruta = "./" . $_FILES["archivo".$x]['name'];
copy($nombre, $ruta);
$sub++;
}
else{
$no_sub++;
}
$x++;
}
echo "Cantidad de archivos subidos: $sub";
echo "Cantidad de archivos no subidos: $no_sub";

La falta de algunas etiqueta como <?PHP ?> por ejemplo se debe a que blogger no me deja colocarlas, pero ya le voy a encontrar la vuelta.

Espero haya sido interesante, cualquier duda sobre el código solo pregunten. Saludos!

domingo, 19 de septiembre de 2010

LFI-RFI

Hola. Aca les traigo un video sobre como hacer LFI/RFI con metodo post que se mostro en una charla en la UNNE.