PHP file_get_contents vulnerabilità

5

Sto valutando la sicurezza di un portale web per un cliente e ho trovato una vulnerabilità.

Questo è il codice PHP:

echo(file_get_contents("template/data/" $_GET['id']));

Sono stato in grado di leggere con successo ../../../index.php, config.php, ecc.

Ma voglio solo essere in grado di dimostrare che questo bug è più critico della lettura delle configurazioni. Ho letto l'utente / passaggio MySQL, ma non riesco a connettermi poiché è in ascolto solo su localhost. Tutti gli altri codici che ho letto non hanno portato a nulla. Quindi praticamente tutto quello che ho ottenuto era solo un codice sorgente che non era un segreto.

Non posso fare cose con filtri php perché ha "template / data /" all'inizio della stringa.

Che altro si può fare con questo pezzo di codice vulnerabile? Qualche idea?

    
posta GMX Rider 15.01.2018 - 16:56
fonte

2 risposte

4

Il database MySQL è sullo stesso computer? In tal caso, puoi semplicemente estrarre i file del database e ricostruire il DB sul tuo computer?

Come altri hanno affermato, puoi inserire / etc / passwd che contiene molte informazioni sul layout dell'utente. Se riesci ad accedere a / etc / shadow puoi provare a disconnettere le password.

Se l'applicazione web ha un portale di accesso, provare le credenziali mysql e "admin", "root" ecc. con la password.

Il codice sorgente oi file di configurazione contengono altre credenziali di accesso / chiavi API? Il certificato SSL dei siti è leggibile? Se è così puoi connettere Man In the Middle?

Puoi anche estrarre i dettagli da / proc / version, / etc / issue ecc. e le versioni del webserver per cercare altre vulnerabilità note.

Finalmente la fonte dovrebbe essere pubblica? Se non il codice sorgente è spesso visto come prezioso. E puoi ispezionarlo per ulteriori vulnerabilità.

    
risposta data 15.01.2018 - 17:33
fonte
4

La risposta di Hector ha alcuni grandi esempi, ma vorrei sottolineare un altro punto molto importante:

Questa non è una piccola vulnerabilità

Sembra che tu abbia l'impressione che se "tutto" che puoi fare è leggere file arbitrari sul loro sistema, allora la vulnerabilità non è realmente una vulnerabilità. Direi l'esatto opposto. Devi capire che la sicurezza è meglio affrontata dal punto di vista della difesa in profondità. Può essere praticamente impossibile avere un sistema privo di vulnerabilità, quindi l'obiettivo è quello di avere il maggior numero possibile di livelli di difesa nel maggior numero possibile di aree, in modo che se un attore malintenzionato trova un punto debole in un'area, le difese in tutto il sistema impedirà loro di causare danni reali. Si verificano molte violazioni del mondo reale, non perché ci fosse una vulnerabilità di cui qualcuno ha approfittato, ma perché c'era una vulnerabilità che permetteva loro di trarre vantaggio da un'altra vulnerabilità, che permetteva loro di fare qualcos'altro, fino a quando non hanno trovato qualcosa veramente pericoloso.

Questa piccola vulnerabilità offre agli attori malintenzionati l'accesso completo in lettura al tuo sistema. Ciò è ulteriormente aggravato dal fatto che si è trattato di uno svarione di sicurezza abbastanza ovvio. Se la società in questione disponesse di sviluppatori ben addestrati e stessero facendo revisioni periodiche del codice, è (IMO) molto improbabile che un tale codice possa arrivare a un sistema di produzione. Il significato di questo fatto è che suggerisce che questa non sarà l'unica vulnerabilità di sicurezza presente. Il fatto che ora hai un modo per visualizzare direttamente il codice sorgente del sistema significa che trovare ulteriori vulnerabilità di sicurezza è sostanzialmente più facile. Abbastanza probabilmente game over. Se fossi un attore malvagio e ho trovato questo vorrei:

  1. Scarica il codice sorgente dell'intero sistema (potrebbe richiedere un giorno, ma è quasi certamente possibile)
  2. Cerca eventuali vulnerabilità SQLi (probabilmente ce ne sono molte) e usale per scaricare l'intero database. Direi che ci sono buone probabilità che non stiano usando la sicurezza della password corretta. Sarebbe ovvio dal loro codice sorgente, il che significa che se non stanno proteggendo correttamente le loro password, una vulnerabilità SQLi mi permetterà di:
  3. Il bruto forza le password dell'amministratore. Ora sono nel tuo portale web. Ma indovina un po? Non ho finito
  4. La maggior parte delle password di riutilizzo degli utenti aziendali è sempre presente. Così ora ho intenzione di prendere la password di amministratore e vedere se riesco ad accedere al proprio account di posta elettronica. Da lì, con un po 'di fortuna, potrei essere in grado di entrare nella gestione degli account di hosting. O forse paghe o conti bancari. Il cielo è il limite una volta che ho la tua password e-mail, soprattutto per un account amministratore. È ancora meglio se l'email aziendale è ospitata da un provider di hosting di cloud (Office 365 o simili) e la password di amministratore che ho risolto mi ha dato accesso al provider di hosting di posta elettronica. Ciò mi consente di accedere a ogni singolo indirizzo email dell'azienda.
  5. Forse ho trovato una vulnerabilità SQLi e ho scaricato il database, ma avevano una buona sicurezza della password e non potevo crackare nulla. Ora inizio a cercare le vulnerabilità XSS nel codice sorgente. Alcune semplici email di social engineering e io uso XSS per accedere a un account amministratore sul sistema senza conoscere la loro password. Che ora?
  6. Scommetto che ci sono aree del sistema che un amministratore può utilizzare per aggiornare il sistema. Hanno un CMS? Ha funzionalità come wordpress, ecc, che consentono agli amministratori di modificare i modelli dal portale web? Perché se così fosse, l'ho usato per installare una backdoor sulla macchina per accedere direttamente al sistema sottostante. Sarò bloccato con le autorizzazioni di chiunque sia il server web in esecuzione. Si spera che il server non sia in esecuzione come root. Se non altro installerò un bot minerario di Monero che non inizierà per un paio di mesi, una porta sul retro ben nascosta, e poi inizierò a spendere tempo e denaro per la CPU. A meno che non abbiano una copia pulita del sistema al di fuori del server live (molte piccole aziende no), non mi faranno mai uscire. Bruceranno una quantità incalcolabile di tempo e denaro nel tentativo di estrarre questo virus misterioso dal loro sistema che continua a tornare, indipendentemente dalla frequenza con cui iniziano a funzionare.
  7. Mentre ci sono, installerò del codice che mi invierà automaticamente gli indirizzi e-mail e le password di chiunque acceda al portale web. Torna al passaggio n. 4 sopra.
  8. Il cielo li aiuta se hanno qualcosa di prezioso all'interno del sistema. Numeri di previdenza sociale? Carte di credito? Se conservano tali informazioni per i propri dipendenti o clienti, ora sono mie.

Questo non è un problema di sicurezza isolato. Tali cose non esistono mai nella pratica.

    
risposta data 15.01.2018 - 20:03
fonte

Leggi altre domande sui tag