Sfruttare i parametri _GET stampati in PHP

0

Sto cercando di imparare come sfruttare i parametri $ _GET poco protetti nel mio sito Web per scopi di ricerca. Voglio solo eseguire cose di base come phpinfo (). Il codice vulnerabile è così:

if(isset($_GET['s_location'])) {
    $search_location = $_GET['s_location'];
}

$search_location viene quindi stampato sulla pagina web:

<div id="recap_location" class="recap-item"><span class="text"><?php print $search_location; ?></span></div>

Ho provato molti modi senza risultati:

  • URL/?s_location=phpinfo();

  • URL/?s_location=eval(chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111).chr(40).chr(41).chr(59));

  • URL/?s_location=eval('phpinfo();');

posta rak007 06.12.2016 - 11:29
fonte

1 risposta

3

Non sarai in grado di sfruttare l'esecuzione del codice in questo modo. Il tuo codice è vulnerabile allo scripting cross-site (XSS), ma non all'esecuzione del codice. Per questo è necessario qualcosa come eval() , o una chiamata implicita php eval più sottile.

Tuttavia, puoi sfruttare XSS nell'esempio precedente iniettando Javascript, prova qualcosa come <script> alert(1) </script> per l'input dell'utente e vedi il popup in Javascript. :) Un utente malintenzionato potrebbe usare questo per passare un collegamento con il javascript dell'attaccante a un utente ignaro, che quando apre il collegamento, esegue il javascript degli hacker, potenzialmente dando via qualsiasi cosa dall'interfaccia utente dell'applicazione o dagli archivi lato client all'attaccante. L'autore dell'attacco sarebbe quindi in grado di fare tutto ciò che può fare Javascript, quando viene eseguito nel browser di un utente nel contesto dell'applicazione (ad esempio in esecuzione sull'origine dell'applicazione).

Molte più informazioni su XSS sono qui per esempio.

Aggiornamento (sfruttamento dell'esecuzione di codice)

Quindi non è possibile eseguire PHP dall'input dell'utente in questo modo. Per renderlo vulnerabile all'esecuzione del codice (cioè per poter eseguire PHP dall'input dell'utente) devi utilizzare una variabile con input dell'utente in qualcosa come eval() , come ad esempio <?php eval($search_location) ?> nel tuo esempio.

Un altro tipico modo in cui un'applicazione potrebbe essere vulnerabile a questo è include($_GET['myinclude']) , nel qual caso potresti provare a fornire http://some.site.tld/yourscript.php come myinclude e vedere come viene caricato ed eseguito sul server delle applicazioni.

Ancora un altro esempio per farlo eseguire il codice php sarebbe utilizzare il modificatore e in un'espressione regolare con input dell'utente, come descritto qui .

Potrebbero essercene molti di più, ma la semplice stampa di una variabile è "solo" XSS, non l'esecuzione di codice (fortunatamente, dato il numero di siti Web effettivamente vulnerabili a XSS). :)

    
risposta data 06.12.2016 - 11:40
fonte

Leggi altre domande sui tag