SQLi con filtro quote?

0

Sto facendo alcuni corsi di hacking, e in una delle lezioni, ho un possibile SQLi, ma nel codice sorgente di Python c'è una clausola if poco prima dell'istruzione SQL, che filtra il simbolo della citazione:

user="user"
pass="pass"

if "'" in user+pass:
  print "error"

else:
  db.execute("select * from users where username = '%s' and password = '%s'" % (username,password))

Quindi quando provo a iniettare asdf' or '1'='1 in uno qualsiasi dei campi, la clausola if mi ferma. Ho provato a codificare il simbolo di citazione in diverse codifiche (hex, base64, html, ecc.), Ma non funziona ancora.

Qualche idea?

    
posta g0ldrush 23.12.2018 - 13:17
fonte

2 risposte

2

Utilizza una barra rovesciata come ultimo carattere dell'utente. Ad esempio, per gli input user\ e or 1=1 -- viene eseguita la seguente query:

select * from users where username = 'user\' and password = ' or 1=1 -- '

Dove la stringa di input è interpretata in questo modo:

seleziona * dagli utenti dove username = ' utente \' e password = 'o 1 = 1 -'

    
risposta data 23.12.2018 - 15:11
fonte
1

Controlli due ingressi. Ciò significa che è possibile terminare il primo con un carattere di escape, estenderlo in modo efficace all'inizio del secondo input e quindi inserire SQL arbitrario nel secondo. Per evitare una citazione senza corrispondenza alla fine del secondo input, devi commentare il resto della query.

    
risposta data 23.12.2018 - 13:50
fonte

Leggi altre domande sui tag