Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sql Injection - analiza kodu
Forum PHP.pl > Forum > PHP
Xart
Witam przedstawię tutaj pewien kod służący do logowania i prosiłbym bardzo o wypowiedzenie się czy możliwy jest atak (zalogowanie się na konto o loginie "admin")
Jeśli tak to w jaki sposób z góry thx smile.gif

  1. <?
  2. include("config.php");
  3.  
  4. $login=$_POST['USRlogin'];
  5. $haslo=$_POST['USRhaslo'];
  6.  
  7. $wynik = mysql_query("SELECT * FROM users WHERE login='".$login."'") or die("<center>błąd w pytaniu</center>");
  8. $rekord = mysql_fetch_assoc($wynik);
  9. if(md5($haslo)==$rekord['haslo']){
  10. $log=md5("zalogowanyOKzalogowany");
  11. ?>
Spawnm
http://pl1.php.net/mysql_real_escape_string
Xart
@UP
Jeśli niby tak to podaj co mam wpisać w nazwie użytkownika i haśle smile.gif
Bo mi się wydaje że to ciężkie będzie.
Login to oczywiście admin smile.gif i co dalej ?

@EDIT
Wpisuje login:admin
haslo: ' OR ''='
i nie działa widocznie nie da się tak łatwo tutaj włamać

Zauważ też że ja nie wykonuję zapytania
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";

tylko pobieram login a hasło sprawdzam później

$wynik = mysql_query("SELECT * FROM users WHERE login='".$login."'") or die("<center>błąd w pytaniu</center>");
$rekord = mysql_fetch_assoc($wynik);
if(md5($haslo)==$rekord['haslo']){
markonix
A czemu nie możesz od razu zweryfikować loginu i hasła (pary)?
Bezpieczeństwem hasła nie musisz się przejmować bo hashem nic złego nie da się zrobić z zapytaniem.
com
Sql Injection do zapytania można wstrzyknąć na wiele sposobów nie koniecznie w ten sposób i w tym miejscu, jeśli pobierasz go od usera i robisz to na mysql to używasz tego co podał Spawn wątek nie ma sensu, masz temat przepięty Temat: SQL Injection Insertion a wgl polecam już przejść na mysqli/pdo wink.gif
werdan
Filtruj dane od usera, jak podał kolega powyzej. Da się "zalogować na konto admin", jesli hasło nie bedzie zbyt wyszukane. Kod podatny na sql injection.
Damonsson
Nieistotne jest czy pobierasz login i hasło, czy sam login, czy numer buta admina, ważne że robisz połączenie z MySQL i przekazujesz coś od usera.

  1. $login=$_POST['USRlogin'];
  2. mysql_query("SELECT * FROM users WHERE login='".$login."'")


to jest podatne, bo mogę sobie wyciągnąć całą bazę danych wraz z loginem i hasłem admina. Oczywiście nie podam Ci co trzeba wpisać, żeby wyciągnąć te dane.


Jeśli zaś chodzi Ci o uzyskanie dostępu tylko dla tego jednego logowania, bez znajomości loginu i hasła admina, to jest to niemożliwe, bo cokolwiek wpiszesz w $_POST['USRhaslo'] i tak zostanie zamienione na MD5.
Xart
Czyli nie da rady się włamać ?
Można zrobić takie coś hasło zostawić puste a w login wpisać:

' AND 1=2 UNION SELECT login, haslo AS SQLINJECTION FROM users WHERE login='dowolnylogin

jednak w tym przypadku to nie działa a chyba powinno
werdan
>Czyli nie da rady się włamać ?

Jak nie posłuchałeś zaleceń na temat escepowania danych, to da.

O szczegoły pytaj na haker.com.pl lub podobnych.
Damonsson
Weź jakiś darmowy serwer, wstaw tam swój przykład, umieść w bazie konto admina i pierwszy lepszy user Ci udowodni, że się da wink.gif

Nie da się tego zrobić tak jak Ty nieudolnie próbujesz. Ale da się zrobić, poprzez wyciągnięcie loginu i hasła bezpośrednio z bazy danych.
Xart
To w takim razie powiedz mi jakie zapytanie użyć bo wątpię w to smile.gif
Turson
Przejdź na PDO lub MySQLi
Xart
@UP wiem ;d
chce tylko tak wiedzieć czy na taki kod da się włamać a jeśli tak to jakie zapytanie i gdzie wpisać
zakładamy że skrypt jest podany wyżej
istnieje u,zytkownik o loginie admin w zakodowanym haśle md5
przy logowaniu wyświetla się login i hasło
tabela w bazie users kolumny id login haslo
in5ane
Takie zapytanie wyjdzie, gdy podasz w polu login podasz taką wartość: blablabla' OR '1' = '1 (dokładnie zerknij na apostrofy).
  1. SELECT * FROM users WHERE login = 'blablabla' OR '1' = '1'
I po takim zapytaniu wyświetli Ci wszystkich użytkowników ze wszystkimi danymi.

@edit: co oznacza, że jak przejdzie Ci taka wartość, tzn. że masz skrypt nie zabezpieczony. A rozwiązania podawali Ci już wyżej.
Damonsson
Wyświetlić, to mu akurat dokładnie to zapytanie, nic nie wyświetli bo niby gdzie? wink.gif

Co nadal nie zmienia faktu, że włamać się da radę
Xart
Oczywiście masz rację ale nic się nie dzieje po prostu nic nie zwraca tylko ładuje się od nowa formularz logowania ...
a teorytycznie powinno zadziałać ale nie ma gdzie tego wyświetlić bo skrypt wygląda tak...

  1. <?
  2. include("config.php");
  3.  
  4. $login=$_POST['USRlogin'];
  5. $haslo=$_POST['USRhaslo'];
  6.  
  7. $wynik = mysql_query("SELECT * FROM users WHERE login='".$login."'") or die("<center>błąd w pytaniu</center>");
  8. $rekord = mysql_fetch_assoc($wynik);
  9. if(md5($haslo)==$rekord['haslo']){
  10. $log=md5("zalogowanyOKzalogowany");
  11. ?>
  12. <frameset cols="175px,*">
  13. <frame src="menu.php"/>
  14. <frame src="pusty.html" name='okno'/>
  15. </frameset>
  16. <?
  17. }else{
  18. header("Location: index.php");
  19. };
  20. ?>


A tak plik index.php (tamten był index2.php)


  1. <form name="form1" method="post" action="index2.php">
  2. Login:
  3. <input name="USRlogin" type="text" class="form1" id="USRlogin" size="20" maxlength="80"><br>
  4. Hasło:
  5. <input name="USRhaslo" type="password" class="form1" id="USRhaslo" value="" size="20" maxlength="80"><br>
  6. <input name="Submit" type="submit" class="form1" value=" Zaloguj ">
werdan
Daj to najlepiej online.
Damonsson
[ ciach ] nie zalogujesz się tak bo ta linijka
  1. if(md5($haslo)==$rekord['haslo']){

jest lepsza niż PDO i MySQLi razem wzięte.

Więc musisz podać poprawny login i hasło w formularzu normalnie.

Ale tylko i wyłącznie jeśli chodzi o wejście tym sposobem.

Cały czas podatność jest w innym miejscu.



Wyobraź sobie polanę i zagrodę pełną owiec, ogrodzoną wysokim na 1m murem. I gdzieś na środku tej polany stoją pancerne drzwi, zabetonowane i pod prądem, których nikt w życiu nie przejdzie. Tylko po co ma przechodzić te drzwi, jak owce są wszędzie dostępne, tylko wystarczy przeskoczyć metrowy mur i je sobie wyciągnąć z zagrody, nie trzeba wcale otwierać tych drzwi.

Wystąpili:
Polana - baza danych
Drzwi - skrypt logowania
Metrowy mur - konstrukcja Twoich zapytań do bazy danych
Owce - Twoje dane
Xart
Dobre biggrin.gif uśmiałem się smile.gif
To teraz powiedz mi jakim zapytaniem wyciągnąć dane z bazy żeby wyświetlić dane jak pomoże to zaraz mogę wrzucić to na hosting.
sowiq
Cytat(Xart @ 9.01.2014, 15:10:39 ) *
To teraz powiedz mi jakim zapytaniem wyciągnąć dane z bazy żeby wyświetlić dane

  1. SELECT * FROM tabela;


Kolego, chyba źle trafiłeś. Na tym forum nie pomagamy w obchodzeniu zabezpieczeń. Zapytałeś w którym miejscu masz dziurę w zabezpieczeniach i dostałeś odpowiedź. Jeśli chcesz dowiedzieć się jak się włamać, to już ktoś Ci podał adres - hacking.pl
Xart
ja nie chcę się dowiedzieć jak się włamać bo to moja strona ....
tylko w jaki sposób się da ominąć taki skrypt czytaj...

Wrzuciłem to na hosting

http://tescikphp.esy.es/admin/

to adres mam nadzieje że komuś się uda i wytłumaczy jak smile.gif)

Podaję dodatkowo pełną strukturę tabelki

  1. CREATE TABLE IF NOT EXISTS `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `login` char(40) COLLATE latin1_general_ci NOT NULL,
  4. `haslo` char(32) COLLATE latin1_general_ci NOT NULL,
  5. KEY `id` (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=74 ;
Damonsson
Wrzuć to na hosting, który nie blokuje wielu połączeń z jednego IP.
Xart
ten nie blokuje a zresztą co ma jedno do drugiego...
Damonsson
To możesz sobie sam udowodnić, przedzwoń do nich.

To ma jedno do drugiego, że żeby przeskoczyć Twój metrowy mur, trzeba spróbować kilka razy, a Twój hostingodawca ma wieżyczkę strażniczą na której obserwuje mur i po kilku próbach odstrzela delikwenta z AK-47 wink.gif
Xart
dobra zaraz wrzucę to cba ;d

Wrzuciłem smile.gif
http://testphp2014.cba.pl/admin/index.php

Dodam że po zalogowaniu wyświetli się pusta strona ale z adres index2.php, który nie będzie wywalał smile.gif

Ale jako iż ten hosting jest ruski to polecam testowąc tutaj

http://tescikphp.esy.es/admin/
Damonsson
admin
pikapll

wink.gif
Xart
@UP
dobra ;d teraz powiedz jakim cudem odkryłeś hasło biggrin.gif
Damonsson
Ucz się dużo, czytaj książki i sam dojdziesz kiedyś do tego. Nie mogę Ci tego powiedzieć niestety. Słuchaj innych, którzy mają więcej doświadczenia i wierz im czasem na słowo wink.gif
Kshyhoo
Zamykam wątek, bo robi się zbyt gorący. To nie forum hakerskie, żeby poruszać takie tematy. O SQL-Injection jest przyklejony wątek, więc od niego proszę zacząć (link w moim podpisie).
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.