Discussione HTB Writeups 0x04 - OpenAdmin

0xbro

Super Moderatore
24 Febbraio 2017
4,464
179
3,757
1,825
HTB Writeups 0x04 - OpenAdmin (4.4/10)
OpenAdmin.png

Abilità affinate:
- Enumeration
- Apache configuration review
- Code review
- Lateral movement
- Port Forwarding
- SSH cracking


Tools utilizzati:
- nmap
- Dirbuster
- searchsploit
- metasploit
- pspy64
- SwitchyOmega
- ssh2john
- john


Introduzione & Foothold:
OpenAdmin è una macchina di difficoltà medio/bassa, abbastanza in stile CTF, incentrata molto sull'enumerzione.
Per cominciare, come per ogni macchina, eseguiamo una scansione delle porte con nmap:
Bash:
root@kali:~/Documents/CTF/Machine/OpenAdmin# nmap -sV -A -O  10.10.10.171
Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-11 11:28 CET
Nmap scan report for 10.10.10.171
Host is up (0.060s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 4b:98:df:85:d1:7e:f0:3d:da:48:cd:bc:92:00:b7:54 (RSA)
|   256 dc:eb:3d:c9:44:d1:18:b1:22:b4:cf:de:bd:6c:7a:54 (ECDSA)
|_  256 dc:ad:ca:3c:11:31:5b:6f:e6:a4:89:34:7c:9b:e5:50 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.80%E=4%D=2/11%OT=22%CT=1%CU=31767%PV=Y%DS=2%DC=T%G=Y%TM=5E4281D
OS:C%P=x86_64-pc-linux-gnu)SEQ(SP=105%GCD=1%ISR=107%TI=Z%CI=Z%II=I%TS=A)SEQ
OS:(SP=105%GCD=1%ISR=107%TI=Z%CI=Z%TS=A)OPS(O1=M54DST11NW7%O2=M54DST11NW7%O
OS:3=M54DNNT11NW7%O4=M54DST11NW7%O5=M54DST11NW7%O6=M54DST11)WIN(W1=7120%W2=
OS:7120%W3=7120%W4=7120%W5=7120%W6=7120)ECN(R=Y%DF=Y%T=40%W=7210%O=M54DNNSN
OS:W7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%D
OS:F=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O
OS:=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W
OS:=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%R
OS:IPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)

Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 1720/tcp)
HOP RTT      ADDRESS
1   61.58 ms 10.10.14.1
2   61.83 ms 10.10.10.171

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 26.18 seconds
Possiamo notare che sono esposti soltanto due servizi: una versione SSH non vulnerabile, e un web server Apache sulla porta 80 con una pagina di default.
Per trovare eventuali punti di ingresso, lanciamo una scansione con Dirbuster, in modo da enumerare tutte le possibili sotto-pagine del sito.
Tra i primi risultati dell'esecuzione del tool troviamo questi record:
/
/index.php
/icons/
/music/
/ona/
Visitando ogni pagina, arrivati su http://10.10.10.171/ona/ ci accorgiamo che davanti a noi abbiamo una versione vulnerabile di OpenNetAdmin, un'applicazione web per l'amministrazione della rete.
Usiamo quindi searchsploit per cercare se esistano degli exploit che facciano al caso nostro: il 47772 sembra essere ciò che fa per noi, una Command Injection su OpenNetAdmin 18.1.1

Scarichiamo l'exploit, lo importiamo in metasploit, impostiamo i parametri corretti e lo lanciamo.
Nel giro di pochi secondi otteniamo un shell con bassi privilegi.

(Scusate l'assenza di evidenze, ma non ne ho prese per questa prima parte di macchina. Mea culpa)

E' arrivato il momento di scavare in cerca di un modo per elevare i nostri privilegi.


Escalation to Jimmy:
Per enumerare il numero di utenti contenuti nella macchina, analizziamo il contenuto del file /etc/passwd, e notiamo come gli utenti principali siano effettivamente due: Jimmy e Joanna. Saranno loro il nostro obiettivo per arrivare ad avere i permessi di root.

Dopo aver dato un'occhiata alla macchina ed aver lanciato LinEnum.sh senza successo, decido di dare un'occhiata più dettagliata ai processi della macchina tramite pspy64
pspy64.png

Osservando le righe di codice, mi cade l'occhio su una particolare riga:
2020/02/14 22:35:20 CMD: UID=33 PID=7150 | sh -c php -l /opt/ona/www/local/config/database_settings.inc.php
Decido quindi di analizzare il contenuto del file database_settings.inc.php
PHP:
<?php

$ona_contexts=array (
  'DEFAULT' =>
  array (
    'databases' =>
    array (
      0 =>
      array (
        'db_type' => 'mysqli',
        'db_host' => 'localhost',
        'db_login' => 'ona_sys',
        'db_passwd' => 'n1nj4W4rri0R!',
        'db_database' => 'ona_default',
        'db_debug' => false,
      ),
    ),
    'description' => 'Default data context',
    'context_color' => '#D3DBFF',
  ),
);
per addocchiare immediatamente una password hard-codata:
'db_passwd' => 'n1nj4W4rri0R!',

Proviamo a utilizzarla per autenticarci in SSH come utente jimmy... funziona!


Lateral movement to Joanna:
Ora che abbiamo una shell come jimmy, il nostro obiettivo è diventare joanna, poichè sarà questo utente a portarci all'utente root.
Poichè abbiamo nuovi privilegi rispetto a prima, potremo enumerare la macchina in maniera più approfondita, come per la cartella /var/www/internal/, che sembra suggerire la presenza di una pagina web visitabile solo dall'interno della macchina, e che quindi prima tramite dirbuster non potevamo trovare.
internal.png

La conferma la otteniamo dalla pagina di configurazione di Apache, la quale ci dice che sulla porta 52846 è presente un host virtuale in esecuzione con l'utente joanna con sopra le pagine contenute in /var/www/internal/
sites-available.png

Arrivati a questo punto, le strade per bypassare questo ostacolo sono molteplici.
1 - SSH Port Forwarding
2 - curl in locale
3 - Scrivere una chell PHP nella cartella /var/www/internal/

Io ho deciso di superare l'ostacolo tramite l'approccio del port-forwarding.
Ho usato la macchina OpenAdmin come tunnel SSH sulla porta locale 12345, e tramite SwitchyOmega ho usato la porta 12345 come proxy e ho fatto in modo che quando visitassi http://127.0.0.1/52864 stessi in verità visitando la macchina OpenAdmin.
internal_browser.png

In questo modo interagire con la web application come se fosse un'applicazione esposta.

Avendo accesso alla cartella /var/www/internal/ è stato possibile revisionare il contenuto dei sorgenti in cerca di eventuali vulnerabilità o tecniche di bypass.
La pagina index.php ad esempio per effettuare il login controlla l'input dell'utente con un hash hard-codato nel codice:


PHP:
TODO CODE

Risulta quindi semplice bypassare il controllo, o decidendo di crackare l'hash (che risulta essere uno SHA512 contenente la password Revealed), oppure, siccome abbiamo accesso al sorgente in scrittura, rimpiazzando il controllo con un controllo a piacimento.
Scansato il login, ci ritroveremo sulla pagina main.php con stampato a video il certificato RSA privato di joanna
joanna_RSA.png


Copiamolo nel file joanna.txt e diamolo in pasto a ss2john in modo da generare un hash da poter crackare con john usando la wordlist rockyou.txt
joanna_ssh_bruteforce.png


Bingo! Abbiamo la password del certificato! Ora possiamo utilizzarlo per autenticarci in SSH come joanna!


Privilege Escalation:
Il processo di Privilege Escalation è il più semplice e veloce che abbia mai visto.
Lanciando il comando sudo -l notiamo come l'utente joanna possa aprire il file /opt/priv tramite l'editor di testo nano come utente root.
privesc_1.png

Non ci resta altro che esguire il comando e, all'interno di nano, utilizzare la funzionalità di esecuzione di codice per poter eseguire comandi come root!
privesc_2.png


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It's never too late to start
- Me, Myself and I
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Autore: 0xbro
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
 
  • Mi piace
Reazioni: Helplease