miércoles, 30 de mayo de 2012

Reto 3: Encontrar un XSS

Para superar este reto hay que encontrar uns XSS en esta página

Para encontrar el XSS es necesario utilizar un conversor, como por ejemplo el del blog.

El php que recibe los datos del usuario realiza estos pasos para filtrar los datos y asegurarlos:

$nombre = urldecode($nombre);
$nombre = str_replace('script','',$nombre);
$nombre = str_replace('<','',$nombre);
$nombre = str_replace('>','',$nombre);
$nombre = htmlspecialchars($nombre);
$nombre = addslashes($nombre);

En principio parece que se filtra bien la entrada del usuario y que no existe peligro de una vulnerabilidad XSS.
La clave para encontrar el XSS es utilizar la codificacion hexadecimal ya que es interpretada correctamente por los navegadores.
Si codificamos \alert(1)\ obtendremos %3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E
Si introducimos esto en el formulario y pulsamos en el enlace obtendremos un html con el codigo alert(1)/,
Como podemos decucir del html nos están eliminando los caracteres < , > y script,
Para conseguir saltarnos esto lo que podemos hacer es codificar dos veces \alert(1)\ lo que nos daría %25%33%43%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45%25%36%31%25%36%43%25%36%35%25%37%32%25%37%34%25%32%38%25%33%31%25%32%39%25%33%43%25%32%46%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45
Si introducimos esto último conseguimos ejecutar nuestro pequeño script.

miércoles, 2 de mayo de 2012

Google App Engine

Google App Engine es un servicio de alojamiento web que proporciona Google "de forma gratuita", y que permite ejecutar aplicaciones sobre los servidores de Google. Nos permite crear y ejecutar aplicaciones web sobre un dominio de la forma http://dominio.appspot.com/.

Según la documentación "todas las aplicaciones pueden utilizar hasta 500 MB de almacenamiento y suficiente CPU y ancho de banda como para permitir un servicio eficaz de alrededor de cinco millones de visitas a la página al mes, sin coste alguno" .Yo no lo utilizaría para algún proyecto serio, pues no me gusta que Google tenga tanto poder sobre mi, pero la verdad es que para crear pequeñas aplicaciones o como entorno de pruebas está genial.

Se pueden crear aplicaciones sobre Java, Python 2.5 o Python 2.7, y yo por supuesto siempre recomendaré Python. El típico hola mundo en Python sería así:

#!/usr/bin/env python
import webapp2

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write('Hello world!')

app = webapp2.WSGIApplication([('/', MainHandler)],debug=True)

Utilizando el servicio me he creado un pequeño codificador/decodificador en Python.
 
Para añadirla a algún sitio web basta con este código html:

<iframe src="http://conversor-py.appspot.com/" frameborder="0" scrolling="no" height="185" width="269"></iframe>

Y si queréis echarle un vistazo al código fuente lo tenéis aquí: código fuente

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.