Come bypassare la funzione htmlentities () in PHP per ottenere un XSS?

1

Ecco la funzione del filtro PHP con cui ho a che fare:

function xss_check_2($data)
  {
    return htmlentities($data, ENT_QUOTES);
  }

Il codice sorgente dell'output (l'output è il nome, Peter Wazinck, in basso):

<div id="main">

<h1>HTML Injection - Reflected (GET)</h1>

<p>Enter your first and last name:</p>

<form action="/work/bwapp/bWAPP/htmli_get.php" method="GET">

    <p><label for="firstname">First name:</label><br>
    <input id="firstname" name="firstname" type="text"></p>

    <p><label for="lastname">Last name:</label><br>
    <input id="lastname" name="lastname" type="text"></p>

    <button type="submit" name="form" value="submit">Go</button>  

</form>

<br>
Welcome Steve Wozniak
</div>

Qualche metodo per aggirarlo?

    
posta Yacine 21.12.2017 - 20:43
fonte

2 risposte

3

Dal contesto che hai fornito, questo filtro sembra sicuro.

Il tuo output si trova nello stato dei dati (al di fuori di qualsiasi tag o valore di attributo). Pertanto un utente malintenzionato dovrebbe iniettare almeno una parentesi angolare di apertura ( < ) per introdurre un nuovo codice HTML.

Poiché htmlentities() converte tutte le parentesi angolari di apertura nella loro rappresentazione di entità HTML ( &lt; ) , non esiste un modo ovvio per ignorare il filtro.

    
risposta data 21.12.2017 - 21:07
fonte
0

Nell'applicazione bWAPP ci sono 2 set (3 set in realtà) di protezioni XSS. Livello 2 e Livello 3.

function xss_check_2($data)
{

    // htmlentities - converts all applicable characters to HTML entities

    return htmlentities($data, ENT_QUOTES);


}


function xss_check_3($data, $encoding = "UTF-8")
{
    // htmlspecialchars - converts special characters to HTML entities    
    // '&' (ampersand) becomes '&amp;' 
    // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
    // "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set
    // '<' (less than) becomes '&lt;'
    // '>' (greater than) becomes '&gt;'  

    return htmlspecialchars($data, ENT_QUOTES, $encoding);

}

Se guardi i filtri di livello 3 stanno impostando la codifica $ su UTF-8 che invalida UTF-7 e altri tipi di codifiche. Puoi cercare le altre codifiche nel Livello 2 per vedere se riesci a trovare un filtro bypass che funzioni per te.

    
risposta data 11.01.2018 - 21:26
fonte

Leggi altre domande sui tag