Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]SQL Injection - podstawy
Forum PHP.pl > Forum > Przedszkole
Delleg
  1. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  2. <HEAD>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. </HEAD>
  5. <BODY>
  6. <?php
  7. $user = $_POST['user'];
  8. $pass = $_POST['pass'];
  9. $link = mysqli_connect("serwerxxxxx.home.pl", "xxxxxxx_sqlin", "HasL0o", "xxxxxxx_sqlin");
  10. if (!$link) {
  11. echo"Błąd: " . mysqli_connect_errno() . " " . mysqli_connect_error();
  12. }
  13. mysqli_query($link, "SET NAMES 'utf8'");
  14. $result = mysqli_query($link, "SELECT * FROM users WHERE (user='$user') AND (pass='$pass')");
  15. //echo '<pre>' . print_r($result) . '</pre>';
  16.  
  17. $rekord = mysqli_fetch_array($result);
  18. echo '<pre>' . print_r($rekord) . '</pre>';
  19. if (!$rekord) {
  20. mysqli_close($link);
  21. echo "Brak użytkownika o takim loginie !";
  22. } else {
  23. if ($rekord['pass'] == $pass) {
  24. echo "Logowanie Ok. User: {$rekord['user']}. Hasło: {$rekord['pass']}";
  25. } else {
  26. mysqli_close($link);
  27. echo "Nie udało się zalogować. User: {$rekord['user']}. Hasło: {$rekord['pass']}";
  28. }
  29. }
  30. ?>
  31. </BODY>
  32. </HTML>


  1. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  3. </head>
  4. Formularz logowania
  5. <form method="post" action="weryfikuj.php">
  6. Login:<input type="text" name="user" maxlength="20" size="20"><br>
  7. Hasło:<input type="text" name="pass" maxlength="20" size="20"><br>
  8. <input type="submit" value="Send"/>
  9. </form>
  10. </BODY>
  11. </HTML>

  1. CREATE TABLE `users` (
  2. `id` smallint(6) NOT NULL,
  3. `user` varchar(128) COLLATE utf8_polish_ci NOT NULL,
  4. `pass` varchar(128) COLLATE utf8_polish_ci NOT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  6.  
  7. ALTER TABLE `users`
  8. ADD PRIMARY KEY (`id`);
  9.  
  10. ALTER TABLE `users`
  11. MODIFY `id` smallint(6) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
  12.  
  13. INSERT INTO `users` (`id`, `user`, `pass`) VALUES
  14. (1, 'user1', 'pass1'),
  15. (2, 'user2', 'pass2');


Mam rzekomo banalnie proste zadanie z którym nie daje sobie rady. Nie jestem w stanie wstrzyknąć kodu SQL przez pole input. Zadanie polega na zalogowaniu się nie znając hasła ani loginu. Jak rozumiem powinienem się zalogować wpisując w oba pola ciąg znaków
  1. 1 OR '1' = '1

co powinno dać w efekcie
  1. SELECT * FROM users WHERE (user='1 OR '1' = '1') AND (pass='1 OR '1' = '1')")

Rozumiem że metoda ta polega na wprowadzeniu w przypadku tego zadania kodu pomiędzy apostrofy (zmienna $user i $pass) dodatkowego kodu SQL. Czyli pokaż wszystkich użytkowników gdzie hasło ma wartość 1 lub 1 = 1 co powinno dać true i dać się zalogować niestety walczę z tym bezskutecznie
markuz
  1. if ($rekord['pass'] == $pass) {

Czyli hasło musisz znać. Możesz nie znać loginu.

Hasło możesz jednak poznać bo wcześniej robisz:
  1. echo '<pre>' . print_r($rekord) . '</pre>';


Tak w ogóle to zapytanie którego oczekujesz jest błędne:
  1. SELECT * FROM users WHERE (user='1 OR '1' = '1') AND (pass='1 OR '1' = '1')")


Sam pisałeś ten kod czy taki dostałeś?
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.