Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+sql]SQL INSERTION - UPDATE
Forum PHP.pl > Forum > PHP
daniel1302
Jest to pytanie abym poznał o co chodzi w SQL INJECTION

Mam taki plik

  1. <?php
  2. mysql_connect('localhost', 'root', '');
  3. mysql_select_db('testowa');
  4. $query = &#092;"UPDATE uzytkownicy SET login='\".$_GET['user'].\"'\";
  5. mysql_query($query) or die(mysql_error());
  6. ?>


i w bazie jeden rekord
i jesli odpale link
example0x.php?user=daniel1302',%20pass='Daniela

to login zmienia na
daniel1302', pass='Daniel

Dlaczego nie zmienia hasła
Mlodycompany
a nie lepiej tak zrobić
  1. <?php
  2. mysql_connect('localhost', 'root', '');
  3. mysql_select_db('testowa');
  4. $user = addslashes($_GET['user']); 
  5. $pass = addslashes($_GET['pass']);
  6. $query = "UPDATE uzytkownicy SET login='".$user."', pass='".$pass."'";
  7. mysql_query($query) or die(mysql_error());
  8. ?>

i wtedy adres: index.php?user=user&pass=pass
Crozin
@Mlodycompany: ale kiedy autor tematu chce właśnie sobie "popsuć" bazę winksmiley.jpg

Być może magic_quotes są włączone na serwerze
Dodaj sobie echo $query; i zobacz jakie jest wykonywane zapytanie
Mlodycompany
no wiesz. chce nie chce ja podalem mu skrypt ktory dziala w 100%
daniel1302
Mlodycompany, nie o to mi chodziło, chciałem sprawdzić jak taki atak działa


UPDATE uzytkownicy SET login='daniel1302\', pass=\'Daniela'
takie zapytanie zostało zwrócone, czyli nie muszę zabezpieczać na moim serwerze zmiennych
l0ud
daniel1302, NIGDY nie ufaj magic_quotes. To, że u Ciebie na serwerze działa to poprawnie, nie oznacza, że gdzie indziej będzie tak samo. Poza tym później napotkasz się z problemami z wydobywaniem danych z bazy, bo nie do końca wiadomo będzie kiedy użyć stripslashes() (i po co, skoro nie używaliśmy addslashes()?)

Zawsze ręcznie filtruj zmienne wyjściowe.
Mlodycompany
atak dziala normalnie. jest pelno filmow w necie jak takie ataki sa robione.
daniel1302
Jak jest magic quotes to nieda próbowałem 4 godziny i nic ale atak typu select/unionselect działa
Crozin
  1. <?
  2.  
  3. //z formularza
  4. $_GET['user'] = "test', pass = 'qwerty";
  5.  
  6. $query = "UPDATE uzytkownicy SET login='".$_GET['user']."'";
  7. //UPDATE uzytkownicy SET login='test', pass = 'qwerty'
  8. //SQJ INJECTION zadziała - zmieni sie login,pass
  9.  
  10. //Ale gdy mamy magic_quotes:
  11. //Zmienna z formularza jest escape'owana
  12. $_GET['user'] = "test', pass = 'qwerty";
  13.  
  14. $query = "UPDATE uzytkownicy SET login='".$_GET['user']."'";
  15. //UPDATE uzytkownicy SET login='test', pass = 'qwerty'
  16. //Czyli zostanie zmieniony jedynie login na: test', pass = 'qwerty
  17. //Ale samo haslo nie zostanie zmienione
  18.  
  19. ?>
Tak więc jak widzisz, magic_quotes mogą ochronić czasem słabych programistów winksmiley.jpg No chyba, że Ci jeszcze przed wykonaniem zapytania, użyją na tablicach _POST i _GET stripslashes" title="Zobacz w manualu PHP" target="_manual biggrin.gif
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.