Usa el árbol para saltar entre colecciones sin salir del lector.

archivo Seleccionar un writeup Abrir árbol
HackTheBox/Challenges/Challenge Sokobanhtb.md READ_ONLY

Challenge SokobanHTB

Este reto consiste en un juego de Sokoban en el que uno de los cubos necesarios para resolver el acertijo se genera fuera del mapa jugable y la solución consiste en utilizar PINCE para el análisis dinámico de memoria, modificar las coordenadas del eje X para teletransportar al jugador fuera de los límites, localizar el cubo, teletransportarlo de vuelta dentro del mapa y resolver el acertijo para obtener la flag.

El reconocimiento inicial comienza ejecutando el juego proporcionado utilizando Wine. Al iniciar el juego, se observa que aunque se requieren tres cubos para resolver el acertijo, solo dos están presentes dentro de los límites del mapa. Esto sugiere que el tercer cubo se genera fuera del área jugable, lo que requiere la manipulación de la memoria para traerlo al mapa.

$ cd out/build/x64-release/SokobanHTB
$ wine SokobanHTB.exe
libEGL warning: pci id for fd 34: 10de:25a0, driver (null)
pci id for fd 35: 10de:25a0, driver (null)
libEGL warning: egl: failed to create dri2 screen

Para localizar las coordenadas del jugador, se realiza un análisis dinámico de la memoria utilizando PINCE. Se ejecuta un escaneo inicial en busca de un valor desconocido de tipo Int32 mientras se está adjunto al proceso SokobanHTB.exe.

0x7ba73000
0x7ba73004
0x7ba73008
0x7ba7300c
...
0x7ba73f9c

Las direcciones de memoria se filtran para localizar la posición del jugador en el eje X. El personaje del jugador se mueve a la derecha para realizar un escaneo de valor incrementado ("Increased"), y luego a la izquierda para un escaneo de valor decrementado ("Decreased"). Este proceso iterativo aísla 14 posibles direcciones de memoria que se correlacionan con el movimiento horizontal.

0x7ffffe20fe10
0x7ffffe20fe24
...
0x7ffffe20fa48
...
0x7ffffe10e1d0

Al congelar las primeras siete direcciones e intentar mover al jugador, se observa que el movimiento no se ve afectado, lo que lleva a descartarlas. El proceso se repite con las direcciones restantes hasta que la congelación de 0x7ffffe20fa48 bloquea el movimiento horizontal, confirmando que es la coordenada del eje X del jugador. El tipo de datos se cambia a Float32 para obtener una representación clara del valor.

Address           Type       Value
0x7ffffe20fa48    Float32    448.0

Con la dirección de memoria del eje X del jugador identificada, el valor se modifica manualmente a 640.0, teletransportando efectivamente al jugador fuera de los límites del mapa.

Address           Type       Value
0x7ffffe20fa48    Float32    640.0

Al explorar el área no jugable, se revela el cubo faltante ubicado en la posición 1024 del eje X. Se ejecuta un escaneo de valor exacto ("Exact Value") en PINCE buscando un valor Float32 de 1024.0. Luego, el cubo se empuja una posición hacia la izquierda, y se realiza un escaneo de disminución ("Decreased By") usando 64.0 como parámetro. Esto aísla dos posibles direcciones de memoria para el cubo.

0x7ffffe8522b0
0x7ffffe8522f4

Al congelar la dirección 0x7ffffe8522f4, se evita que el cubo sea empujado, validando que es la dirección de memoria correcta.

Address           Type       Value
0x7ffffe8522f4    Float32    960.0

Para llevar el cubo al área jugable, su valor en la coordenada del eje X se cambia a 640.0, teletransportándolo dentro del mapa.

Address           Type       Value
0x7ffffe8522f4    Float32    640.0

El jugador regresa al mapa restableciendo su coordenada a 512.0, asegurando la alineación en el mismo eje Y que el cubo recién ubicado. Ahora los tres cubos son empujados sobre los símbolos designados, completando el acertijo de Sokoban y revelando la flag.

HTB{FLAG}