Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bezpieczeństwo aplikacji internetowych
Forum PHP.pl > Inne > Hydepark
bełdzio
Hi, chciałbym poznać Wasze zdanie na poniższe pytanie:

Czy aplikacja, która nie modyfikuje danych wejściowych / wyjściowych (a co za tym idzie jest podatna na SQL Injection) może być bezpieczna dla danych w niej zawartych?

:-)

i trochę zabawy smile.gif

www.beldzio.com/calypso/
www.beldzio.com/calypso/index.txt

Zupełny brak modyfikacji danych wejściowych / wyjściowych. Spróbuj się zalogować.

1. Konto test się nie liczy - zostało ono założone by pokazać, że można się zalogować test :: test

2. Żeby złamać Calypso należy się do niego zalogować lub napisać na czym polega zabezpieczenie.

Info proszę na PW żeby nie psuć zabawy innym.
nospor
Cytat
Czy aplikacja, która nie modyfikuje danych wejściowych / wyjściowych (a co za tym idzie jest podatna na SQL Injection) może być bezpieczna dla danych w niej zawartych?

No skoro można sie wlamac na twoja strone, to raczej dane nie sa bezpieczne.

Cytat
i trochę zabawy
Przeciez to sie lamie podstawowym kodem SQL INjection. Czemu ten test/zabawa ma sluzyc?
mwojcik
Nie filtrujac danych wejsciowych zawsze otwierasz drzwi potencjalnym wlamywaczom, wiec to logiczne, ze nie jest bezpieczna dla przechowywanych danych.
SQL Injection - na PW.
athabus
Hmmm a mi coś dziwnie (nie)działa.
Po odpowiednim stringu w loginie mam ciasteczka ustawione na John i hasło w md5 ale jak klikam sprawdzenie to mi wyskakuje, że jednak się nie zalogowałem... Ręcznie sprawdzając widzę, że ciasteczka są jednak prawidłowe...

Dodam że jestem na linux i ostatnio też miałem jakieś problemy z odczytywaniem ciasteczek przy jednym ze swoich projektów, więc może to jest przyczyna?

Czy może po prostu jestem jakiś nieudolny?
bełdzio
Cytat(nospor @ 31.07.2007, 14:08:16 ) *
No skoro można sie wlamac na twoja strone, to raczej dane nie sa bezpieczne.

Przeciez to sie lamie podstawowym kodem SQL INjection. Czemu ten test/zabawa ma sluzyc?

podeślij mi dane logowania na pw

Cytat(mwojcik @ 31.07.2007, 14:27:24 ) *
Nie filtrujac danych wejsciowych zawsze otwierasz drzwi potencjalnym wlamywaczom, wiec to logiczne, ze nie jest bezpieczna dla przechowywanych danych.
SQL Injection - na PW.

Twój sposób nie pozwala na zalogowanie się smile.gif

Cytat(athabus @ 31.07.2007, 14:52:38 ) *
Dodam że jestem na linux i ostatnio też miałem jakieś problemy z odczytywaniem ciasteczek przy jednym ze swoich projektów, więc może to jest przyczyna?

nie smile.gif

polecam przed stwierdzeniem, że to jest lame zalogowanie się
Hacker
SqlInjection na PW poszło...

Co robi plik 'calypso.php', bo na localu, jak to wyrzucę to mój sqlinjection działa nawet na potwierdzeniu, a tak to nie...
bełdzio
@Hacker tak jak pisałem wyżej zaloguj się na te dane i spr czy na pewno to działa. Plik calypso.php ma być odp na pytanie postawione przeze mnie w 1. poście smile.gif
Hacker
Pokaż jeszcze swój pliczek .htaccess głównie chodzi mi o modrewrite tongue.gif
Jeżeli nie ma w nim przekierowania z calypso.php i plik calypso.php zachowuje się tak samo niezależnie od tego czy jest require-owany, czy nie, to jednak zmieniasz dane wejściowe... (i/lub zamykasz połączenie do bazy tongue.gif)
mwojcik
Da sie zrobic takie zapytanie, zeby w odpowiedzi dostac "Hmmmm you hacked Calypso :-) Congratulation." (i nie mowie tutaj o zalogowaniu sie na test:test), wiec nie ma tam zadnych przekierowan ani innych sztuczek. Mi sie udalo za 2 podejsciem (dluzszym), jednak czekam na wyjasnienie co, jak i dlaczego tak sie dzieje, bo sprawa jest zastanawiajaca.
bełdzio
@mwojcik smile.gif puściłem Ci inho na PW smile.gif zrobiłem błąd w kodzie smile.gif idea zabezpieczenia nadal nienaruszona ;-)

gratki smile.gif
Hacker
Ale...

Cytat
[4]=>
array(2) {
["login"]=>
string(4) "test"
["passwd"]=>
string(32) "e54aa2684ec70a80814a8a4f438d8a18"
}


Hash md5('test') to 098f6bcd4621d373cade4e832627b4f6, a nie e54aa2684ec70a80814a8a4f438d8a18...

A więc jak mówiłem modyfikujesz dane wejściowe
bełdzio
jak już pisałem nie modyfikuje smile.gif
Hacker
więc kod podany na www.beldzio.com/calypso/index.txt to jakaś ściema?
calypso.php zachowuje się tak samo niezależnie od tego czy jest require-owany, czy nie?
bełdzio
ad1. nie ściema index.txt == index.php
ad2. nie zachowuje, w końcu po coś on jest dołączony
Kicok
Po sprawdzeniu nagłówków wysyłanych przez przeglądarkę podczas "sprawdzania zalogowania" dla użytkownika test oraz Mike doszedłem do wniosku, że plik calypso.php ma treść:
  1. <?php
  2.  
  3. if( $_GET['action'] == 'login-check' && $_COOKIE['login'] != 'test' ) 
  4. {
  5. die( 'Ups. You are not logged in :-( Try again.' );
  6. }
  7.  
  8. ?>


tongue.gif


Co nie zmienia faktu, że da się odczytać loginy i hash'e haseł innych użytkowników - tyle że nie chce mi się ściągać tęczowych tabel żeby to łamać.
Hacker
@Kicok

plik calypso.php tak nie wygląda...
-zaloguj się na test i zobacz jaki hash zwraca zapytanie
-zrób SqlInjection i zobacz jaki hash zwróci zapytanie dla użytkownika test...

EDIT:
Hmmm... czy skrypt wykonuje zapytania w niezmienionej formie (tj. w takiej w jakiej wyświetla)? Bo zdaje mi się, że nie..
Jabol
@Kciok. Zdecydownie się zgadzam. Jeżeli ten kod index.txt to nie jest ten z index.php.
Kicok
@Hacker masz rację, nie zauważyłem tego wcześniej. Za to zauważyłem inną rzecz: skrypt ingeruje w wysyłane dane. Wpisz sobie w miejsce loginu: "+" i popatrz na wyświetlone zapytanie - to powinno ci nasunąć sposób myślenia.

Mi się udało zdobyć oryginalny hash hasła do konta Mike i moje wysiłki zostały nagrodzone napisem "Hmmmm you hacked Calypso :-) Congratulation." biggrin.gif



Swoją drogą ciekawe jak to jest zrobione. Sam wymyśliłem taką teorię spiskową, że rozszerzenie mysql jest na jego serwerze wyłączone (a włączone jest mysqli albo PDO), a w pliku calypso.php znajdują się napisane w PHP funkcję mysql_connect(), mysql_query() itp.
Dzięki takiemu trickowi bełdzio mógł zastosować proste sprawdzanie składni zapytania SQL, a my myśleliśmy, że to czary ;]
Hacker
@Kicok
Lol to z plusem to żadne odkrycie... wpisz w gogle w zmienną get q pomiędzy dwa wyrazy...
Po prostu urldecode zamienia...
Btw. podeślij mi na priva (żeby innym zabawy nie psuć) jak to Mikem zrobiłeś
bełdzio
Cytat(Kicok @ 1.08.2007, 19:09:03 ) *
@Hacker masz rację, nie zauważyłem tego wcześniej. Za to zauważyłem inną rzecz: skrypt ingeruje w wysyłane dane. Wpisz sobie w miejsce loginu: "+" i popatrz na wyświetlone zapytanie - to powinno ci nasunąć sposób myślenia.

co do "+" to zauważ że w kodzie jest :

  1. <?php
  2. $_POST = array_map( 'urldecode', $_POST );
  3. ?>


chyba reszty nie muszę wyjaśniać? smile.gif

a ten przykładowy kodzik calypso fajny ;-D guitar.gif

@Hacker kod "na Majka" Ci już nic nie da :-) mały bład w kodzie był ;-) tzn linijkę trzeba było przenieść wyżej ;-) mimo to nie wpłyneło to na ideę zabezpieczenia smile.gif

@Kicok gr smile.gif)
Kicok
Cytat
@Kicok
Lol to z plusem to żadne odkrycie... wpisz w gogle w zmienną get q pomiędzy dwa wyrazy...


Cytat
co do "+" to zauważ że w kodzie jest :

  1. <?php
  2. $_POST = array_map( 'urldecode', $_POST );
  3. ?>


chyba reszty nie muszę wyjaśniać? smile.gif


Wiem na co jest zamieniany plus. Po prostu nie zauważyłem tych array_mapów w kodzie i myślałem, że jest to wynik działania calypso.php

Sama idea używania urldecode na danych wejściowych jest dla mnie niezrozumiała. Co jeśli na stronce zabezpieczonej tym sposobem będę chciał napisać "2 + 2 = 4"? Będę musiał ręcznie to kodować, żeby po odkodowaniu tekst nie stracił sensu?
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.