Hay un juego que esta **de moda** muy divertido y sobre todo muy adictivo. Se trata de “Where’s my water?” y es de disney disponible para la plataforma iOS (ipod touch, iphone)

Donde el personaje principal es “swampy” un cocodrilo que quiere bañarse con sus patitos.

Para los pobres (como su servidor) no tenemos 12 pesos (1 dolar) para comprar la version completa, pero en la versión gratis nos ofrecen unos cuantos niveles gratis. Sin embargo hace unos dias para la version gratis hubo una actualización del juego.

Con motivo del 14 Febrero (Dia del amor y la amistad) se actualizo el juego regalando 10 niveles nuevos!!! :) Pero tiene una “pequeña” restricción. Cada nivel se abrira por dia a partir del 14. Osea el 14 se abre el nivel 1, el 15 el nivel 2,etc…

Intente meterme a los niveles, empezando por el nivel 1, pero me decia… ¡No abrir antes del 14/02/2012! :(

Los que me conocen personalmente saben que una de las TANTAS cosas que ODIO es ESPERAR!!! =P Y como el juego me gusta puse manos a la obra.

Continue reading »

 

Este Jueves 2 de Febrero del 2012 Fui a las Conferencias de seguridad Informatica BugCON en el Instituto Politecnico Nacional a dar un Taller sobre “Wargames y Hacking”. En el taller ademas de los asistentes, me acompaño un amigo del trabajo @LesmoCasanova quien ademas de apoyarme con la logistica, me ayudo en algunos retos de mi taller.

Muy aparte de esto, nos enteramos de un wargame y convenci a @LesmoCasanova de intentar este wargame. Asi pues comienza nuestra odisea.

El reto empezo cuando se nos entrego una propaganda de eset promocionando un wargame. Y decia:

Comienza por aquí:

1
lxxt://hiwejmswiwix.gsq/fyk-gsr-gleppirki/

Inmediatamente vi que era un cifrado de sustitusión monoalfabética. Asi que opte por hacerle un “BruteForce Caesar”

Y nos salia la URL del reto:

http://desafioseset.com/bug-con-challenge/

Este fue un wargame muy facil y divertido de 7 niveles, todos de JavaScript y realizado por @insegar por parte de @ESETLA donde es miembro del laboratorio de Analisis de Malware de Argentina.

Nivel 1:

Y tenia este codigo javascript de proteccion:

1
2
3
4
5
6
7
8
9
10
11
12
13
<scr1pt language=JavaScript type="text/javascript">
{
var a="nivel2";
function check() {
        if (document.a.c.value == a){
                document.location.href=document.a.c.value+".htm";
            }
        else {
            alert ("Seguir intentando...");
        }
    }
}
</scr1pt>

Ahi veiamos facil que nos redirigiria a http://desafioseset.com/bug-con-challenge/nivel2.htm asi que simplemente nos ibamos a esa URL y ya estabamos en el Nivel 2

Nivel 2:

Al ingresar al nivel 2 nos saca un prompt de JavaScript

Asi que pulsando la tecla “Esc” detenemos la ejecucion del JS y vemos ahora el codigo de JS.

1
2
3
4
5
6
7
8
9
10
11
<scr1pt language=JavaScript type="text/javascript">
    var pass, n;
    pass=prompt("Por favor ingrese la contraseña!","");
    if (pass=="l2l") {
        window.location.href=pass+".htm";
        n=3;
    }
    else {
        alert("No, esa no es....");
    }
</scr1pt>

Nos mandara ahora a http://desafioseset.com/bug-con-challenge/l2l.htm

Nivel 3:

En el nivel 3 nos sale otra prompt, pero esta vez el codigo viene mas grande:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<scr1pt language=JavaScript type="text/javascript">
function pass()
{
    var pw, Aingabe;
    pwd=window.document.alinkColor;
    Aingabe=prompt ("Bienvenido al Nivel 3, ingresa el p4ssw0rd por favor,");
    if (Aingabe==pwd){
        window.location.href=String.fromCharCode(115,105,103,117,101,115,105,103,117,105,101,110,100,111)+".htm";
    }
    else {
        alert("Ah ah ah, trata de nuevo...");
    }
}
function pass2(){
    var password, pr;
    pr = prompt("Bienvenido al Nivel 3, ingresa el p4ssw0rd por favor,");
    if (pr = "nivel3#"){
        window.location.href=String.fromCharCode(123,105,149,101,105,103)+".htm";
    } else {
        alert("And then!?");
    }
}
</scr1pt>

En esta parte vemos dos funciones, sin embargo si vemos la etiqueta del HTML vemos esto:

1
<b0dy onload=javascr1pt:pass(); alink="#001000">

Vemos la funcion que se utiliza es la de pass() así que la de pass2() es distracción.

Enfocandonos en la funcion pass() vemos numeros decimales que se convierten a ascii String.fromCharCode(115,105,103,117,101,115,105,103,117,105,101,110,100,111) para despues redirigirnos. Lo sacamos rapidamente de esta manera:

Y al final la url es: http://desafioseset.com/bug-con-challenge/siguesiguiendo.htm

Nivel 4:

El nivel 4 no lo entendi muy bien, nos daban esto:

Y el codigo fuente era:

1
<div class="reto" align="center">Felicitaciones! Siguiente nivel... <a href="noesloqueparece.htm"> Clic aca </a></div>

Al ingresar a http://desafioseset.com/bug-con-challenge/noesloqueparece.htm y detener con la tecla “Esc” el JS, ya estabamos en el Nivel 5

Sin embargo un prompt nos pedia una clave, si no era ingresada te regresaba al nivel 4

Nivel 5:

El nivel 5 tenia un nivel de ofuscacion:

1
2
3
<scr1pt language=JavaScript type="text/javascript">
var _0xb376=["\x43\x6F\x6E\x74\x72\x61\x73\x65\xF1\x61","","\x33\x73\x74\x30\x20\x6E\x30\x20\x74\x33\x72\x6D\x31\x6E\x34\x20\x34\x63\x34","\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x76\x69\x2E\x68\x74\x6D","\x4D\x6D\x6D\x2C\x20\x6E\x6F\x2C\x20\x74\x72\x61\x74\x61\x20\x64\x65\x20\x6E\x75\x65\x76\x6F\x2E\x2E\x2E\x0A\x53\x69\x20\x6E\x65\x63\x65\x69\x73\x74\x61\x73\x20\x61\x79\x75\x64\x61\x2C\x20\x66\x69\x6A\x61\x74\x65\x20\x64\x6F\x6E\x64\x65\x20\x68\x61\x63\x65\x73\x20\x63\x6C\x69\x63","\x73\x69\x67\x75\x65\x73\x69\x67\x75\x69\x65\x6E\x64\x6F\x2E\x68\x74\x6D"];var pass,i;pass=prompt(_0xb376[0],_0xb376[1]);if(pass==_0xb376[2]){window[_0xb376[4]][_0xb376[3]]=_0xb376[5];i=4;} else {alert(_0xb376[6]);window[_0xb376[4]][_0xb376[3]]=_0xb376[7];} ;
</scr1pt>

Este nivel aunque se ve muy aparatoso era muy facil de entender, pero para no explicar todo veamos la manera de los “vagos” de como saltarnosla.

Desde la URL http://desafioseset.com/bug-con-challenge/noesloqueparece.htm y habiendo deteniendo todo el JS con la tecla “Esc” ponemos en la barra de direcciones del Navegador este comando:

1
javascript: alert(_0xb376);

Esto nos mostrara todo el array de esa variable y asi veremos que se oculta detras de ese hexadecimal.

Inmediatamente vemos “href, location, vi.htm”

Entonces si vamos a http://desafioseset.com/bug-con-challenge/vi.htm ya estamos en el Nivel 6

Nivel 6:

El nivel 6 es un “clasico” para confundir a los mas ciegos =P

Vemos esto:

De ahi se ve un script con una supuesta contraseña “123456″ que te redirige a “acanoentres.htm” lo cual es una distracción, ya que el script real esta aqui:

1
<scr1pt src="translation.js" language=JavaScript type="text/javascript"></scr1pt>

Al ingresar a translation.js encontramos el script verdadero:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var pass,pwd;
var i,j,k;
pass=prompt("Correcto! Y ahora decime esta pass:","");
j = 0;
pwd ="s3cr3tc0d3";
for(i=0; i < 15; i++){
    j = j + i;
}
k = 3;
j = j * k;
pwd = pwd + j;
if (pass==pwd) {
    window.location=pwd+".htm";
}
else
    alert("Justo esa no es, segui probando...");

Vemos aqui unas operaciones, pero para no hacer todo eso, la manera facil de bypassearlo es modificarlo un poco. Con la consola de Google Chrome lo modificamos un poco, quitamos los condicionales y en vez de eso, pusimos un alert a la variable “pwd” y con un enter sale =)

Asi que nuestra clave es: s3cr3tc0d3315 Y nuestra URL del ultimo nivel: http://desafioseset.com/bug-con-challenge/s3cr3tc0d3315.htm

Nivel 7:

Finalmente llegamos al nivel 7, que fue el que nos costo un poco mas de trabajo. El nivel 7 se ve así:

Y nuestro script era este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<scr1pt type="text/javascript">
function preprocesar() {
nombre = document.getElementById("nombre").value;
passwd = parseInt(document.getElementById("passwd").value, 16);

suma = 0;
llave = 'DEADC0DE';
if(nombre.length >= 6 && passwd > 0) {
    for(i=0; i <= nombre.length; i++) {
        a = nombre.charCodeAt(i);
        b = llave.charCodeAt(i%llave.length);
        c = (a | b) & ~(a & b);
       
        suma += c;
    }
   
    a = suma;
    c = passwd;
   
    b = Math.sqrt(c - Math.pow(a,2));
    if(b == Math.floor(b) && b > 0) {
        alert("Viste que era facil ;)");
        window.location = "comprobar.php?a="+nombre+"&c="+c.toString();
    } else {
        alert("Password incorrecto :(");
    }
}
}
</scr1pt>

Aqui @LesmoCasanova y yo estuvimos analizando un ratillo el script. Se nos ocurrieron varias cosas pero todas nos llevaban a nada. Al final vimos que la mejor idea era hacer un “bruteforce inverso”, algo que yo ya habia hecho en una ocasión para otro reto. @LesmoCasanova modifico directamente el script desde la consola de GoogleChrome haciendo un ciclo infinito y que cuando encontrara la coincidencia nos diera un alert.

Como cosa obvia, lo unico que logro fue colgar mi navegador ¬¬ Fue cuando entonces lo convenci de que era mas facil portar el codigo a PHP y ahi hacer las modificaciónes. Como todos unos magos @LesmoCasanova y yo pusimos manos en acción dando con este pequeño script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$nombre = "hecky@neobits.org"; 
$suma = 0;
$llave = 'DEADC0DE';
for ( $i = 0; 1; $i++) {
    $passwd = dechex("".$i."");
    for($o=0; $o < strlen($nombre); $o++) {
        @$expNombre = str_split($nombre);
        @$expLlave = str_split($llave);
        @$a = $expNombre[$o];
        @$b = $expLlave[$o%strlen($llave)];
        $c = ($a | $b) & ~($a & $b);
        $suma += $c;
    }
    $a = $suma;
    $c = $passwd;
    $b = sqrt($c - pow($a,2));
    if($b == floor($b) && $b > 0) {
        echo "respuesta: ".$passwd."\n";
        break;
    }
    echo $passwd."\n";
}
?>

Donde despues de correrlo nos saca la respuesta:

En el panel ingresamos el mail y mandamos la clave, lo cual no nos funciono, asi que se me ocurrio mejor mandarlo directamente en la URL De la manera que lo pedia (“comprobar.php?a=”+nombre+”&c=”+c.toString();)

Asi pues, la URL final era:

http://desafioseset.com/bug-con-challenge/comprobar.php?a=hecky@neobits.org&c=1e26

La cual automaticamente nos redirigia a http://desafioseset.com/bug-con-challenge/F3l1c1t4c10n3s.htm

Y nos salia:

NOTA: Había un Bug en el desafió siete. Un chavo me mostró que si ponías el email valido y rellenabas el password con 27 caracteres (LO QUE SEA), se podía bypassear todo y Listo =S #WTF Obviamente se lo comente a mi amigo Joaquin y vimos era un error por no haber validado la Longitud en PHP.

Al final resolvimos el reto en menos de una hora que salio.Fuimos los primeros y los unicos en aproximadamente en las primeras 10 horas que nadie mas lo resolvio. Sin embargo eso no nos aseguro el premio (Un Play Station 3) puesto que pasar el wargame solo te daba acceso a entrar a la rifa del PS3 de todos los que lo resolvieran en las 48 horas del reto …Hubiera sido mas justo (y conveniente para mi =P) que el primero que lo resolviera ganara, pero por cosas no es asi xDD

Al Final la suerte no estuvo de mi lado y alguien mas se llevo el PS3 =(. (Siempre quise mi epoca Gamer =P Creo no se me hará jamas, y creo el destino prefiere siga investigando y aprendiendo sobre Informática, que jugando jeje )

Pero de mi participación en el Wargame lo que mejor me llevo es:

  • Haber conocido a Joaquin Rodriguez @insegar y platicar con este crack
  • Mostrarle otra cara de la programación a @LesmoCasanova que creo le gusto mucho este wargame

Sin mas este es mi pequeño write-up al reto de ESET en BugCON 2012 y muy feliz por haber ganado este Wargame (Ganar el premio ya sera lo de menos). Y tambien muy agradecido con @LesmoCasanova por todo su apoyo durante la creacion de los retos de mi taller, durante todo mi taller y durante nuestra participación en el Wargame. Que gran equipo somos, y que grande sos como programador @LesmoCasanova =)

Saludos ;)

Atte. hecky
hecky@neobits.org
Sigueme en Twitter: http://twitter.com/hecky
 

Neobits.org presente en BugCON 2012 ( Impartiendo Taller )

El 21/01/2012, en Conferencias, por hecky 2.928 veces visto

Hola!!

Esta entrada es sumamente pequeña y solamente de carácter informativo.

Neobits.org y @hecky tienen el placer de participar por segunda ocasión y de manera consecutiva en uno de los eventos de mayor importancia sobre seguridad informática en México, BugCON. Así pues me voy al Instituto Politécnico Nacional este Febrero =)

En esta ocasión de nuevo impartiré un taller, y contrario a lo que muchos puedan pensar, no sera relacionado con esteganografía.

El taller lleva por nombre:

Jugando wargames para desarrollar habilidades de Hacking

Continue reading »