sql injection, count () as

1

Sto provando a migliorare le mie capacità e la comprensione di SQL injection e di difesa da esso.

la query assume due forme a seconda di cosa sto cercando di passare:

1)

    SQL Error: The used SELECT statements have a different number of columns at /home/xxxxxxxx/www/system/models/additional_user_news.class.php line 215
Array
(
    [code] => 1222
    [message] => The used SELECT statements have a different number of columns
    [query] => SELECT * FROM cms_news WHERE node_id=45 AND topic_id = 18 AND active='1'  AND title LIKE '%' union select 1 # %' ORDER BY sort DESC, dateCreated DESC LIMIT 0,10
    [context] => /home/xxxxxxxx/www/system/models/additional_user_news.class.php line 215
)

nel caso in cui sto cercando di passare 'union select 1 #

2)

SQL Error: The used SELECT statements have a different number of columns at /home/xxxxxxxx/www/system/models/additional_user_news.class.php line 197
Array
(
    [code] => 1222
    [message] => The used SELECT statements have a different number of columns
    [query] => SELECT COUNT(id) as cnews FROM cms_news WHERE node_id = 45  AND topic_id=18 AND active='1' AND dateCreated<=1475703392
                  AND title LIKE '%' union select 1,2 #%'  
                  LIMIT 0,1
    [context] => /home/xxxxxxxx/www/system/models/additional_user_news.class.php line 197

)

se sto cercando di passare qualcosa del genere: 'union select 1,2 #

Semplicemente non capisco perché mi dia 2 query diverse per tag di ricerca diversi. E come è possibile in questo modo trovare il giusto numero di colonne?

    
posta Anton Rak 05.10.2016 - 23:46
fonte

2 risposte

0

Stai facendo l'iniezione in due query diverse, che hanno un numero di colonne diverso.

La prima query alla riga 197 seleziona una colonna, quindi ' union select 1 # funziona senza interrompere la query. La seconda query alla riga 215 tuttavia seleziona un diverso numero di colonne e quindi si interrompe.

Puoi comunque eseguire un'iniezione SQL:

  • Basato sull'errore: l'injection basato sull'errore nella prima query funzionerà, poiché vengono mostrati errori.
  • Blind: se gli errori non vengono mostrati, è possibile eseguire un'iniezione cieca basata sulla temporizzazione nella prima query (a seconda del codice esatto, potrebbe anche funzionare in base al contenuto).
risposta data 06.10.2016 - 12:12
fonte
0

Se vedi la prima riga nei tuoi esempi, vedi che i numeri di riga sono diversi. Il codice conta innanzitutto quante news stanno creando dopo una data impostata, quindi ottiene i dati effettivi. Sembra quindi che il sito sia protetto da questo particolare attacco utilizzando query inefficienti, poiché le due query restituiscono un numero diverso di colonne

    
risposta data 06.10.2016 - 08:26
fonte

Leggi altre domande sui tag