---
description: >-
  Resolución de un reto de TryHackMe que aborda reversing  para poder eludir el
  inicio de sesión para obtener una bandera.
---

# Classic Passwd

Lo he obtenido de tres maneras diferentes:

## Método 1

Le tiramos un file para comprobar de que tipo es la arquitectura:

```bash
file Challenge.Challenge 
Challenge.Challenge: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b80ce38cb25d043128bc2c4e1e122c3d4fbba7f7, for GNU/Linux 3.2.0, not stripped
```

<div data-full-width="true"><figure><img src="https://3065455477-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FssurGKf5U53wE0c7opCF%2Fuploads%2FavaSbLEUMyxNM35lsDF0%2Fimage.png?alt=media&#x26;token=4235cb4d-f803-478f-865b-e38f9fd908a4" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
ltrace registra las funciones de la biblioteca que el programa llamó y recibió. Llamó a la función "`strcmp`" con el "nombre de usuario" correcto.&#x20;
{% endhint %}

```c
ltrace ./Challenge.Challenge 
printf("Insert your username: ")                                                                                 = 22
__isoc99_scanf(0x562ef2a2301b, 0x7ffc6f84f340, 0, 0Insert your username: ivan
)                                                             = 1
strcpy(0x7ffc6f84f2b0, "ivan")                                                                                   = 0x7ffc6f84f2b0
strcmp("ivan", "*********") // Compara ivan con un "nombre correcto"                                                                                  = 40
puts("\nAuthentication Error"
Authentication Error
)                                                                                   = 22
exit(0 <no return ...>
+++ exited (status 0) +++

```

Flag:

```powershell
./Challenge.Challenge 
Insert your username: ***********
Welcome
THM{***********}
```

## Método 2

Usaremos la herramienta `Ghidra`.

{% hint style="info" %}
Importamos el ejecutable analizándolo.
{% endhint %}

Buscamos en Árbol de símbolos por `"main"` , una vez nos lleve al `main` subimos un poco para arriba hasta ver la cadena `= "THM{%d%d}"` .

<figure><img src="https://3065455477-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FssurGKf5U53wE0c7opCF%2Fuploads%2Fr8rAOkD1mMR1OL98hC1f%2Fimage.png?alt=media&#x26;token=d4afbbf2-25d7-452f-bb5f-8110764e83fc" alt=""><figcaption></figcaption></figure>

Junto a la cadena de THM, se ven unos valores en Hexadecimales, que si los convertimos obtendremos también la bandera.

```bash
ivan@ivan-VirtualBox:~$ echo $((0x******))
*******
ivan@ivan-VirtualBox:~$ echo $((0x*****))
*******
```

## Método 3 (Patching)

Aprovechando que tenemos Ghidra abierto podemos ver el flujo del programa.

* Una vez se introducimos el usuario se pueden dar dos opciones, que entremos y obtengamos la bandera o que nos dé un error de autentificación.

<figure><img src="https://3065455477-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FssurGKf5U53wE0c7opCF%2Fuploads%2F38PeYpNE433QL0Fd7Z1Z%2Fimage.png?alt=media&#x26;token=6b6e530a-2594-431e-8be3-0ff4be7672f4" alt=""><figcaption></figcaption></figure>

* JNZ es un salto condicional que salta sí  el ZF (Zero flag) no está configurado.
* Podríamos cambiar la dirección de salto para que vaya directamente hacia `LAB_00101287`, que es el salto JMP que nos lleva a una autentificación correcta.

<figure><img src="https://3065455477-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FssurGKf5U53wE0c7opCF%2Fuploads%2FGKo0aZw0q1fYqcLcgzWE%2Fimage.png?alt=media&#x26;token=9546a948-a14d-479a-bd24-4951ca31d733" alt=""><figcaption></figcaption></figure>

* Cambiamos JNZ por JMP y que apunte a `LAB_00101287` , que es lo que nos lleva al camino correcto.
* Añadimos un NOP en la dirección de salto que nos llevaría al error de autentificación.

<figure><img src="https://3065455477-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FssurGKf5U53wE0c7opCF%2Fuploads%2F2pc0c4eKS6G4YyLmHgfS%2Fimage.png?alt=media&#x26;token=abfa2f51-aceb-445f-8a67-56b1462a2589" alt=""><figcaption></figcaption></figure>

Una vez hecho, exportamos el ejecutable y comprobamos que se ha parcheado correctamente.

<figure><img src="https://3065455477-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FssurGKf5U53wE0c7opCF%2Fuploads%2FRHaDJOZptNgFnVnzsCnn%2Fimage.png?alt=media&#x26;token=5b547f30-ada2-40c6-a54e-3e3996329cee" alt=""><figcaption></figcaption></figure>

