Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][MySQL][PHP]SQL Injection - podstawy, 1 or 1, które nie działa nie wiedzieć czemu
Delleg
post 3.02.2017, 18:56:08
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 22.01.2013

Ostrzeżenie: (0%)
-----


  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

Ten post edytował Delleg 3.02.2017, 18:56:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
markuz
post 3.02.2017, 19:05:58
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


  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ś?

Ten post edytował markuz 3.02.2017, 19:08:52


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:51