|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
[php]Form: vulnerabilità?
Slave...ultimamente sto ricevendo "attacchi" (non so se chiamarli tali) al mio sito, in cui ho un form contatto. In pratica mi aggiungono un pezzo di codice, ma, se non ricordo male, solo nei file non php (ieri nel file config.inc). Com'é possibile che accada? come fare per difendermi? Se qualcuno ha voglia di cercare di "attaccare" il mio sito, per poi dirmi le vulnerabilità, mi può mandare un mess in privato.
grazie mille!!! |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Ciao,
Se stiamo parlando di una form mail, documentati sul concetto di mail-header injection: http://en.wikipedia.org/wiki/E-mail_injection http://www.damonkohler.com/2008/12/email-injection.html Più in generale ripulisci attentamente tutti i parametri $_GET/$_POST prima di utilizzarli per formare uno qualsiasi dei parametri della mail. Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Ciao,
Il sito è quello in firma? Se non si tratta di una mail-header injection (solitamente utilizzata sulle form mail), probabilmente hai un problema di XSS o di SQL-Injection. In ogni caso alla base c'è sempre la mancata pulitura dei parametri in arrivo allo script (ed eventualmente l'uso - da evitare assolutamente a meno di non avere alternative - della register_globals ad on nel php.ini). Il linguaggio php ti fornisce una serie di funzioni esplicitamente pensate per ripulire il codice prima di stamparlo a video o usarlo in una query (htmlentities, htmlspecialchars, stripslashes, mysql_real_escape_string). Per usi più fini poi (ad esempio togliere cc: o \r\n dal testo di una mail) hai comunque tutta una serie di funzionalità che operano su stringhe (preg_replace, strstr, str_replace). Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
Ho dato giusto una occhiata al tuo sito, e ti consiglio di contattare al più presto qualcuno che si occupi di web application security a livello professionale
![]() Se ti serve,non appena avrò tempo, in PM posso inviarti la lista delle vulnerabilità che ho trovato facendo una analisi non troppo approfondita del tuo sito, ma credo che ti serva pure un aiuto per capire come tappare le falle. PS: Se il tuo sito non è già stato compromesso, ritieniti molto fortunato ... |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
Comunque con il form, possono solo sfruttare la funzione mail() per fare dello spam ? perché il problema é proprio che mettevano del codice maligno nei miei files!!!
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Quote:
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
il problema non è solo la mail, ci sono falle ben peggiori ... che ti ho segnalato in PM
![]() @michele : ha quell'indirizzo in firma in un forum piuttosto popolato : chiunque sia interessato a danneggiarlo personalmente, potrebbe farlo senza troppi problemi, una RFI e diverse XSS ( e probabilmente qualche SQL injection point ) non sono proprio vulnerabilità da nulla. Tra l'altro, se i permessi del server sono settati male, rischia pure un mass deface di tutti i siti hostati ... ma si, forse sono catastrofista ![]() Ultima modifica di BlackAuron : 26-11-2009 alle 08:53. |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Ciao,
Come dice BlackAuron non sono proprio cosette da niente. La mail-header injection è verificata (come detto via PM - ma a parte agevolare gli spammer non può portare ad osservare quanto hai descritto), confermo le XSS (l'RFI non l'ho individuato ma sicuramente ci sarà). Confermo pure l'SQL-injection (o almeno la possibilità) vista una delle XSS che mi informa che "la query è errata" e di controllarne la sintassi. Per quanto riguarda la modifica fisica di file .inc o .js come $te faceva notare, necessariamente il malintenzionato è riuscito ad ottenere le credenziali per l'accesso o ha installato una shell (E se c'è una RFI la cosa è probabile). Alla base di tutto, in ogni caso, ci sono sempre input esterni non filtrati, che sia mail-header injection, XSS, RFI, SQL-injection. Tutti gli spezzoni di codice che coinvolgono array autoglobali ($_POST e $_GET in primo luogo) vanno filtrati accuratamente... Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator Ultima modifica di bottomap : 26-11-2009 alle 09:11. |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
La RFI è confermata, testata e funzionante, e, come dettoin pm, credo che quello sia il problema maggiore: tramite essa, uno non solo ha accesso a tutti i file che hosti (quindi pure i files di configurazione, dai quali uno può ottenere le tue credenziali di accesso e i dati per accedere al db), ma li può pure spostare, modificare, ed eventualmente fare l'upload di qualunque cosa.
Come già suggerito, la soluzione è unica: controlla ogni variabile che l'utente può modificare, e controlla che i numeri sian numeri, gli URL siano URL, le immagini immagini, and so on. |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
Quote:
|
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Ciao,
Non tanto delle variabili in senso stretto quanto di tutta la roba che proviene dall'esterno ... nella porzione di url che hai postato ricevi un parametro in $_GET['img']. Devi assicurarti prima di tutto che sia un numero, poi eventualmente verificare, se tale numero ha dei limiti superiore e inferiore, che sia un numero nel range che ti aspetti. Per testare se una stringa contiene un numero puoi sfruttare la funzione is_numeric() di php che ti ritorna un booleano true o false. La is_numeric accetta coem valido anche un simbolo di segno (+-) e il punto decimale (.). In alternativa la intval() ti restituisce il valore numerico contenuto in una stringa (0 se la stringa non può essere interpretata come numero). Ancora in alternativa puoi ricorrere ad una trim() con un parametro opzionale. trim(stringa,'0123456789') toglie di mezzo tutto ciò che non è una cifra dalla stringa. Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator Ultima modifica di bottomap : 26-11-2009 alle 10:40. |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
Quote:
|
|
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
Mah... Relativamente: se vuoi un nome, controlla che non contenga apici o caratteri speciali, se vuoi una mail controlla che il formato sia valido, e via dicendo.
Ci sono infinite funzioni php per 'aggiustare' input corrotti, vedi mysql real escape o simili. Sta a te capire cosa puoi accettare e cosa no. |
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Ciao,
Nel caso del testo "libero", in genere si cerca di filtrare un poco i possibili contenuti. In primo luogo se quello che ti aspetti ha una forma specifica (un url, un numero di telefono, un indirizzo) si può usare un'espressione regolare per validare quello che viene immesso. In secondo luogo, per evitare che quel campo contenga codice html (che si inietterebbe nella pagina) venga riusato direttamente sulla stessa, si passa il tutto almeno attraverso la funzione htmlentities() (ma si può anche bloccare proprio l'invio se si presentano tag html - anche in questo caso un'espressione regolare può aiutare), che impedisce l'iniezione di codice html. Per la RFI, cerca se possibile di non usare require() o include() sul valore di una variabile o di usare la variabile come src o href di un qualsiasi tag html. Soprattutto se la variabile proviene da una richiesta POST o GET. Se proprio devi (ma in generale non è obbligatorio), puoi cercare di stabilire: - una politica per il nome del file (la stringa deve avere certe caratteristiche specifiche) in modo da poterne verificare la correttezza. - una politica di path (vietati i caratteri di slash / \ ed eventualmente di protocollo http:, ftp:, file:, ). Il file è relativo. Il path, se necessario, lo generi tu in testa, dall'esterno non dovrebbe mai arrivare. - una politica per i caratteri speciali (vieti %00, \0, \n, \r e/o ogni cosa che non rientra in un insieme di caratteri applicabili per la natura del dato in input (anche in questo caso una espressione regolare può aiutare). Edit: Ooops, crossposting... Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator Ultima modifica di bottomap : 26-11-2009 alle 11:21. |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Quote:
![]() Comunque concordo con te sulle vulnerabilità. EDIT: non ci avevo fatto caso che il sito incriminato fosse in firma, al mattino presto connetto a fatica ![]()
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); Ultima modifica di vhost87 : 26-11-2009 alle 11:10. |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
ma, dato che penso proprio sia un problema comune e diffuso, non esiste una guida o un tool con su gia tutte le indicazioni (consigli e soluzioni), che possano rendermi la vita piu facile...ma soprattutto sicura?....so che chiedo tanto...
|
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
http://www.owasp.org/images/5/56/OWA...g_Guide_v3.pdf
è LA guida relativa alla web application security ... c'è da vedere se hai tempo e voglia di studiartela per bene. |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
Quote:
|
|
![]() |
![]() |
![]() |
#20 |
Member
Iscritto dal: May 2006
Messaggi: 86
|
pretendi troppo. C'è gente che come lavoro perfeziona la sicurezza di siti web e determina la soluzioni a potenziali falle, se esistesse una guida di quel tipo sarebbe troppo facile
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:42.