Cosa si può dire di questo modulo quando dà errore interno con '; -' e non '; -?

5

Sto facendo un test black-box su un sito web. Ha una forma e lo stavo testando con diversi input. Quando inserisco alcuni input specifici, restituisce un errore interno.

Alcuni input che danno errore interno:

  • ';--'
  • ';---'

Alcuni input che non danno errore:

  • ';--
  • ';-f-'
  • ";--"
  • ;--'

Come puoi vedere, non è un difetto di iniezione SQL normale. Se si trattava di una normale iniezione SQL, i risultati per ';-- e ';--' e ';-- ' non dovrebbero differire.

Se hai qualche approfondimento sul modo in cui questo input è testato o sul difetto che sto trattando. Btw Posso testare più input se necessario.

    
posta Moradnejad 09.08.2016 - 11:41
fonte

2 risposte

3

Ho cercato di spiegarlo in righe simili di risposta SilverlightFox utilizzando alcuni spazi nella costruzione della query sql.

Ma con questo approccio non sono in grado di spiegare perché ';-f-' e ' AND nonsense=1 non hanno prodotto un errore interno.

Quindi, suppongo che l'errore interno non sia effettivamente causato da un errore di SQL Sql.

È causato da una funzione di disinfezione applicata a userinput. Esempio di Php utilizzando preg-match di seguito.

function inputSanitiser($userinput)
{
$string1=$userinput;
$semicolonExist=preg_match("/';--/",$string1); //search for location(int) of ';-- in $string 1

$string2 =substr ( $string1 , stripos ( $string1 , "';--")+3); //substring from $string1 after the location  ';-- to end of $string1
$commentCloseExist=preg_match("/'/",$string2); //search for location(int) of ' in $string2


    if($commentCloseExist&&$semicolonExist)
    {
        produceInternalError();
    }
    else
    {
        runDbQuery($string1); //runDbQuery will not through Internal error and will silently fail
    }

}

In poche parole, la funzione inputSanitiser sta verificando alcuni pattern come

';-- followed by '

and may be ' UNION ' anywhere in the string

e pochi altri.Così, suppongo che ';--somethinghere--' e ';--somethinghere-' debbano produrre anche un errore interno.

    
risposta data 17.08.2016 - 19:01
fonte
3

Dai campioni dati sembra che si tratti di una normale iniezione SQL con una stringa.

Per amor di discussione, dì che la query era

select * from users where username='<user data>' ;

È corretto che i primi due causino un errore poiché generano SQL non valido:

select * from users where username='';--'' ;
select * from users where username='';---'' ;

Per quanto riguarda i commenti MySQL :

the “-- ” (double-dash) comment style requires the second dash to be followed by at least one whitespace or control character (such as a space, tab, newline, and so on)

Prova ';-- '

Probabilmente non è necessario un singolo estratto finale.

I restanti prodotti sono incompleti (vale a dire senza virgolette singole di chiusura) o SQL validi, quindi non producono alcun errore:

select * from users where username='';--' ;
select * from users where username='";--"' ;
select * from users where username=';--'' ;

Nota che

select * from users where username='';-f-'' ;

dovrebbe errore. Vorrei confermare se il risultato di questo test case è corretto.

    
risposta data 09.08.2016 - 12:46
fonte

Leggi altre domande sui tag