Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Closed TopicStart new topic
> Sql Injection - analiza kodu
Xart
post
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


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. ?>
Go to the top of the page
+Quote Post
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




http://pl1.php.net/mysql_real_escape_string
Go to the top of the page
+Quote Post
Xart
post
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


@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']){

Ten post edytował Xart 8.01.2014, 23:06:30
Go to the top of the page
+Quote Post
markonix
post
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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.


--------------------
Go to the top of the page
+Quote Post
com
post
Post #5





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


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

Ten post edytował com 9.01.2014, 00:26:17
Go to the top of the page
+Quote Post
werdan
post
Post #6





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

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


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.
Go to the top of the page
+Quote Post
Damonsson
post
Post #7





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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.

Ten post edytował Damonsson 9.01.2014, 08:39:26
Go to the top of the page
+Quote Post
Xart
post
Post #8





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


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
Go to the top of the page
+Quote Post
werdan
post
Post #9





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

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


>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.
Go to the top of the page
+Quote Post
Damonsson
post
Post #10





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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.
Go to the top of the page
+Quote Post
Xart
post
Post #11





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


To w takim razie powiedz mi jakie zapytanie użyć bo wątpię w to smile.gif
Go to the top of the page
+Quote Post
Turson
post
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Przejdź na PDO lub MySQLi
Go to the top of the page
+Quote Post
Xart
post
Post #13





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


@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
Powód edycji: [Kshyhoo]: + ostrzeżenia za samo pytanie, pomyliłeś forum
Go to the top of the page
+Quote Post
in5ane
post
Post #14





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


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.

Ten post edytował in5ane 9.01.2014, 14:55:56


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Damonsson
post
Post #15





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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ę
Go to the top of the page
+Quote Post
Xart
post
Post #16





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


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 ">


Ten post edytował Xart 9.01.2014, 15:02:18
Go to the top of the page
+Quote Post
werdan
post
Post #17





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

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


Daj to najlepiej online.
Go to the top of the page
+Quote Post
Damonsson
post
Post #18





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


[ 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
Powód edycji: [Kshyhoo]: trochę kultury
Go to the top of the page
+Quote Post
Xart
post
Post #19





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


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.
Go to the top of the page
+Quote Post
sowiq
post
Post #20





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


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
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 12:53