Nie rozumiem problemów składni sql, które otrzymuję podczas uruchamiania iniekcji, więc każda pomoc wyjaśniająca je jest bardzo doceniane. Mam docelowy skrypt logowania php, który pobiera komendę nazwa użytkownika/hasło, a następnie po prostu działa.SQL Inline Boilean Składnia
Select * FROM users WHERE username='$username' AND password='$password'
Kiedy dostarczamy podstawowe
$username = ' OR '1=1
$password = ' OR '1=1
system loguje mnie jako admin, ponieważ ocenia się
Select * FROM users WHERE username='' OR '1=1' AND password='' OR '1=1'
i dostaje coś pasującego do pierwszego wpisu użytkownika w bazie danych (Admin). Teraz próbuję pobrać skrypt, aby zalogować mnie jako dowolnego użytkownika o nazwie adrian. Moja myśl była dostarczyć
$username = adrian
$password = ' OR (1=1 AND username='adrian') --
które myślałem, że ocenia się
Select * FROM users WHERE username='adrian' AND password='' OR (1=1 AND username='adrian') -- '
Myślałem, że logiczna kolejność operacji została lewej do prawej strony, gdy nie nawiasy są wliczone:
Select * FROM users WHERE [[[username='adrian'] AND password=''] OR (1=1 AND username='adrian')] -- '
ale to nie rejestruje mnie jako kogoś (i nie daje mi żadnych błędów). Nawet jeśli ORAZ są oceniane jako ostatnie, to oświadczenie będzie oceniać jako
Select * FROM users WHERE [username='adrian'] AND [password='' OR (1=1 AND username='adrian')]
Co nadal będzie prawdziwe dla użytkownika adrian. Tymczasem
$username = adrian
$password = 'or(1=1 and username='adrian') --
loguje mnie jak Adrian prawidłowo, co ocenia się
Select * FROM users WHERE username='adrian' AND password=''or(1=1 AND username='adrian') -- '
Więc dlaczego moje podejście z „LUB” nie działa, gdy moje podejście z „lub” nie działa?
SOLVED: Dziękuję za wskazówki. Rozumiem sql teraz lepiej, ale moim prawdziwym problemem było to, że autofill było usunięcie spacji po „-” Musiałem zawiedli po raz pierwszy, a potem głupio powoływać się na Autouzupełnianiu Odtąd poza
Przepraszam, że ... został on ponownie otwarty. – Orangepill
Pierwszeństwo operatora to: '=', następnie 'AND', następnie' OR'. – Gumbo
Oto jedna z porad: Jeśli twoja platforma (w tym przypadku [PHP] (https://secure.php.net/manual/en/pdo.prepared-statements.php)) obsługuje przygotowane instrukcje i powiązanie parametrów, możesz powinien ich użyć. Zasadniczo rozwiązuje to wszystkie problemy uciekające dla ciebie. – Powerlord