martes, 24 de abril de 2012

Sql inyection en Java

Cuando uno piensa en sql inyection siempre lo asocia a una aplicación web, pero esto no siempre es cierto, se puede producir en cualquier lenguaje que vaya ejecutar consultas sobre una base de datos.

Este código java trata de insertar un usuario en una base de datos.

conn = pool.getConnection();
conn = bd.getConnection();
sql = "INSERT INTO usuarios (playername, password, email) VALUES ("+user+","+pwd+","+email+")";
ps = conn.createStatement();
ps.executeQuery(sql);

Cuando ejecutamos consultas sobre una base de datos es importante tratar de no concatenar cadenas y la manera de ejecutar la sentencia correctamente sin posibilidad de inyección SQL sería asi:

conn = pool.getConnection();
conn = bd.getConnection();
sql = "INSERT INTO usuarios (playername, password, email) VALUES (?, ?, ?)";
ps.setString(1, user);
ps.setString(2, pwd);
ps.setString(3, email);
ps = conn.createStatement();
ps.executeQuery(sql);

domingo, 22 de abril de 2012

Seguridad en Minecraft: Parte 2

Para decompilar minecraft.jar existe el proyecto Minecraft Coder Pack(MCP), el cual proporciona las herramientas para poder acceder al código fuente fácilmente. La última versión disponible a día de hoy se puede descargar desde aquí. (Versión 1.2.5 de Minecraft)

Para poder utilizar MCP necesitamos:
  • Java SDK Standard Edition (JDK). Link
  • Añadir al path de Windows, el directorio "bin" de la instalación Java.
  • Copiar  las carpetas "bin" y "resources" de la instalación de Mincecraft en la carpeta "jars" del MCP.
En el MCP que nos descargamos disponemos de varios scripts, estos son los que más nos interesan:
  • Cleanup.bat: Limpia varios ficheros generados.
  • Decompile.bat: Decompila los ficheros jar generando el código fuente java del juego.
  • Recompile.bat: Recompila el código fuente.
  • Updatemcp.bat: Actualiza las utilidades MCP.
  • Startclient.bat: Lanza el juego, es necesario haber recompilado el código antes de lanzarlo.
Lo primero que hacemos es ejecutar "decompile.bat", si todo va bien, se nos generará un capeta llamada "src" con el código fuente del juego.

Si entremos en "src\minecraft\net\minecraft\src" nos encontramos con el grueso de clases que forman el juego, este es el directorio que suelen modificar los creadores de mods para personalizar el juego (añadirle nuevos bloques, items...).

Un fichero importante es el que se llama Minecraft.java y se encuentra en "src\minecraft\net\minecraft\client", este fichero contiene la primera función que va a ejecutar cuando lancemos el juego, será el sitio perfecto para añadir alguna cosas que queramos que se ejecute siempre, por ejemplo sería el sitio perfecto para lanzar nuestro troyano open source favorito Flu.

Para realizar una prueba vamos añadir estas líneas java que ejecutan la calculadora de Windows:

         try {
            Runtime rt = Runtime.getRuntime();         
            Process p = rt.exec("calc");          
        } catch (Throwable t) {}


Las añadimos justo a al principio de la función que se llama public Minecraft.

Ahora ejecutamos "recompile.bat" para recompilar el código, a continuación "startclient.bat" para ejecutar el codigo compilado, y veremos como se lanza la calculadora de Windows junto con el juego.

Lo siguiente que tenemos que hacer es ejecutar "reobfuscate.bat", esto nos moverá a la carpeta "reobf" los archivos compilados que hemos modificado. En nuestro caso solo es el fichero "reobf\minecraft\net\minecraft\client\Minecraft.class". Ya solo queda remplazar este fichero por el que se encuentra dentro del jar "C:\Users\nombre_usuario\AppData\Roaming\.minecraft\bin\minecraft.jar" y ya tenemos nuestro minecraft troyanizado con una calculadora :D


sábado, 21 de abril de 2012

Seguridad en Minecraft: Parte 1

En esta serie de artículos voy a tratar de analizar por encima diferentes aspectos  relacionados con el juego Minecraft (la versión para Windows).

Para el que no conozca el juego, ahí va un pequeño resumen :D


El juego se ejecuta desde un launcher llamado Minecraft.exe, es el que se encarga de loguearnos en los servidores oficiales de Minecraft, comprobar actualizaciones, lanzar el juego, guardar configuraciones... Existen multitud de launchers diferentes al oficial, y en próximas entradas crearemos el nuestro propio.

La instalación del juego se encuentra siempre en "C:\Users\nombre_usuario\AppData\Roaming\.minecraft\" ya que no nos pregunta donde queremos instalarlo, con lo que nos gusta darle siguiente, siguiente, acepto, siguiente... :D

Lo primero que nos llama la atención es un fichero llamado lastlogin, en este fichero se almacenan cifrados nuestro usuario y contraseña para que no tengamos que recordarlos. Y bueno "si se nos olvida" la contraseña  siempre podemos recuperarla con este script MCExploit, se trata de un script en java que se encarga de descifrar la contraseña, basta con ejecutarlo en el mismo directorio que el fichero lastlogin.

La carpeta que más nos interesa es la llamada bin, es donde se encuentran los ejecutables del juego, por un lado están algunas librerías java como lwjgl.jar, pero el que de verdad nos interesa es minecraft.jar, se trata de un fichero jar que contiene el juego, y es el que los launchers se encargan de ejecutarlo para lanzar el juego.

jueves, 19 de abril de 2012

Reto 2: Conectarse a una base de datos

Hay que conseguir superar este formulario Reto 2 que conecta con una base de datos. Tenemos este fichero db.php el cual hemos conseguido descargar explotando una aplicación web.

Php deobfuscation.

El objetivo del reto es decodificar un archivo php ofuscado con http://www.fopo.com.ar.
El archivo php contiene el usuario y contraseña de conexión a la base de datos.

Se puede decodificar fácilmente con Evalhook.
Si tenéis problemas para instalar el módulo podéis seguir este manual de instalación.

Reto 1: Inyección SQL

Se trata de superar un formulario de login, se trata de un caso real. Reto 1

No existe ningún filtrado de caracteres. Se utiliza la función ENCODE de Mysql en la consulta.

La función ENCODE lo que único que hace es codificar un string utilizando una contraseña, se hace esto para que no se almacenen el usuario y contraseña en texto plano en la base de datos.

La consulta sql es esta:

$SQL = "SELECT DECODE(usr,'$clave'), id FROM usuarios WHERE ENCODE('$usr','$clave') = usr AND ENCODE('$pwd', '$clave') = pwd";

Para saltarse el login hay que introducir en el campo usuario: a','a') = 'a' OR 1 = 1 LIMIT 1 --

Añadimos el limit para que la consulta devuelva solo un resultado, es común que en el código php se compruebe que la consulta de login devuelve un resultado solamente.
Por último añadimos el -- para comentar el resto de la línea y que no produzca un error, después de -- hay que introducir un espacio para que la consulta sea correcta.

martes, 17 de abril de 2012

Xonet

Xonet es una aplicación de red desarrollada como mi proyecto fin de carrera en la universidad de A Coruña. Actualmente continúo el desarrollo bajo una licencia GPL en sourceforge. Xonet.

Está completamente programada en python y desarrollada para GNU/Linux.

La idea de la aplicacion es la de poder enviar y recibir paquetes de red a través de una interfaz gráfica. Se busca tener un gran control sobre las comunicaciones de red sin perder usabilidad (sin tener que programar).

La aplicacion se divide en tres zonas:
  • Editor de paquetes: sirve para crear o editar paquetes siguiendo el modelo de capas.
  • Sniffer: estilo wireshark pero mucho más simple, con opciones de filtrado.
  • Espacio de trabajo: nos permite crear pequeñas aplicaciones basadas en enviar y recibir paquetes.
Aquí dejo un ejemplo chorra de como se usaría para enviar un mensaje ICMP.



Mas info de la aplicación en http://xonet.sourceforge.net/