Funcionamiento#
$ qemu-amd64 -L /usr/x86_64-linux-gnu/ behindthescenes
./challenge <password>
Podemos concluir que la contraseña sera la misma flag
Reto#
Cuando trate de decompilar el binario en ghidra note una parte que no se lograba decompilar de una forma correcta:
001012e6 0f 0b UD2
001012e8 83 ?? 83h
001012e9 bd ?? BDh
001012ea 5c ?? 5Ch \
001012eb ff ?? FFh
001012ec ff ?? FFh
001012ed ff ?? FFh
001012ee 02 ?? 02h
001012ef 74 ?? 74h t
001012f0 1a ?? 1Ah
001012f1 0f ?? 0Fh
001012f2 0b ?? 0Bh
...
Solución#
Para resolver esto toca patchear el binario para esto seleccionamos la instrucción UD2 que es la responsable del problema oprimimos Ctrl + Shift + G y lo cambiamos por NOP despues de esto seleccionamos la instrucción inmediatamente inferior hasta el que dejemos de ver el patrón de ?? y oprimimos d luego de hacer esto aparecieron mas instrucciones UD2 por lo que repetimos el proceso hasta que no quede ninguna, y luego oprimimos A
De modo que observaremos que la función main tiene mas contenido y se ve así:
undefined8 main(int param_1,long param_2)
{
code *pcVar1;
int iVar2;
size_t sVar3;
long in_FS_OFFSET;
sigaction local_a8;
long local_10;
local_10 = *(long *)(in_FS_OFFSET + 0x28);
memset(&local_a8,0,0x98);
sigemptyset(&local_a8.sa_mask);
local_a8.__sigaction_handler.sa_handler = segill_sigaction;
local_a8.sa_flags = 4;
sigaction(4,&local_a8,(sigaction *)0x0);
if (param_1 != 2) {
pcVar1 = (code *)invalidInstructionException();
(*pcVar1)();
}
sVar3 = strlen(*(char **)(param_2 + 8));
if ((((sVar3 == 0xc) && (iVar2 = strncmp(*(char **)(param_2 + 8),"Itz",3), iVar2 == 0)) &&
(iVar2 = strncmp((char *)(*(long *)(param_2 + 8) + 3),"_0n",3), iVar2 == 0)) &&
((iVar2 = strncmp((char *)(*(long *)(param_2 + 8) + 6),"Ly_",3), iVar2 == 0 &&
(iVar2 = strncmp((char *)(*(long *)(param_2 + 8) + 9),"UD2",3), iVar2 == 0)))) {
printf("> HTB{%s}\n",*(undefined8 *)(param_2 + 8));
}
if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {
return 0;
}
__stack_chk_fail();
}
Podemos ver que concatena una cadena que parece ser la contraseña la cadena es Itz_0nLy_UD2
$ qemu-amd64 -L /usr/x86_64-linux-gnu/ behindthescenes Itz_0nLy_UD2
> HTB{Itz_0nLy_UD2}
