Solución al reto stealthehash #wgsbd2
Esta prueba consistía en conectarse al puerto 2011 de wargame.securitybydefault.com. Nos daban una pista: r3ady_for_the_n3xt_hash.
Cuando nos conectabamos:
nc wargame.securitybydefault.com 2011
El sistema se quedaba esperando a que le mandáramos algo. Buenos, empecemos con el dato que nos dan:
r3ady_for_the_n3xt_hash
Después de introducir ese dato, el sistema nos devolvía un hash y de nuevo se quedaba esperando a que le introdujéramos algo (no seas mal pensado). Si pulsabas la tecla enter, recibiamos algo como:
Bad key, the next hash is: XXXXX
Donde las Xs eran un hash, entonces se cerraba la conexión.
La idea era, conectarse al servidor, mandar la cadena: r3ady_for_the_n3xt_hash, apuntar el hash que de daba el servidor y básicamente empezar de nuevo. Así con cada iteración teníamos un hash nuevo. Los hashes tenías que irlos metiendo en el mismo orden que te los daba el servidor. La pregunta era ¿Cuántos hashes va a estar escupiendo el servidor? Ni idea, hasta que diga algo distinto de “Bad key….”.
Para resolver este reto nada como un script:
#!/usr/bin/env ruby require 'socket' hostname = 'wargame.securitybydefault.com' port = 2011 while s = TCPSocket.open(hostname, port) s.write("r3ady_for_the_n3xt_hash\n") res = s.gets f = File.new("hashes", "r+") while (line = f.gets) puts "sending: #{line}" s.puts line sleep 0.3 end s.puts "a" res = s.gets puts res if res.include?("Bad key") then key = res[21..res.length-1] else break end puts "key: #{key}" f.puts key.chop f.close end
Este script hace básicamente he explicado arriba. Se conecta, manda “r3ady_for_the_n3xt_hash” y empieza a mandar los hashes (que guardamos en el fichero de texto “hashes”) que el servidor nos ha dado previamente hasta que se acaben, entonces mandamos algo (una “a” en nuestro caso), el servidor nos dará un nuevo hash, lo guardamos en nuestro fichero de texto y empezamos de nuevo. Así hasta que el servidor responda con algo distinto de “Bad key…”.
Al principio empecé a usar un Array para guardar los hashes, pero de vez en cuando perdía la conexión con el servidor y tenía que empezar todo el proceso de nuevo, así que tuve que usar un fichero de texto para guardar los hashed y así poder re-usarlos, en caso de pérdida de la conexión.
También me pasó algo curioso. En cierto punto del proceso, cuando tenía unos 90 hashes, el proceso siempre se desconectaba. Hasta que me di cuenta, que el último hash almacenado, en el cual el proceso rompía, era igual que el primero. Por suerte borrando ese hash del fichero, todo volvió a la normalidad y después de 150 hashes, el servidor por fin soltó el token:
OMG_all_hash3s_h4s_b33n_L34K3D!!!!
Para los curiosos, en la imagen de más arriba podéis ver los primeros y los últimos hashes.
Buscar
Entradas Recientes
- Posts
- Reemplazando la bateria del AirTag
- OpenExpo Europe décima edición, 18 de mayo: El Epicentro de la Innovación y la Transformación Digital
- Docker Init
- Kubernetes para profesionales
- Agenda: OpenExpo Europe 2022 llega el 30 de junio en formato presencial
- Libro 'Manual de la Resilencia', de Alejandro Corletti, toda una referencia para la gestión de la seguridad en nuestros sistemas
- Mujeres hackers en ElevenPaths Radio
- Creando certificados X.509 caducados
- Generador de imágenes Docker para infosec