zmień dział


Skontaktuj się z nami:
+48 12 656 51 58


Aktualności

Generacja Padu-Padu

Generacja Padu-Padu 27 lutego dwaj programiści naszej firmy Michał "PicH" Piszczek oraz Sebastian "Eax" Mróz wykryli krytyczne błędy w portalu Generacja Gadu-Gadu.
Administratorzy gg zostali poinformowani o błędzie mailem o następującej
treści:
To:   'generacja@gadu-gadu.pl'
Cc:   'tech@gadu-gadu.pl'
----------------------
Szanowni Państwo,
Podczas przeglądania serwisu  
http://generacja.gadu-gadu.pl/ natknęliśmy się na krytyczne błędy w kodzie
PHP. Zmienne z formularza przeszukiwanie grup nie są należycie filtrowanie,
co pozwala na zastosowanie tak zwanego Blind SQL Injection.
Przykład pozwalający na zdobycie nazwy bazy oraz wersji serwera SQL oraz
nazwy dystrybucji.

' and 1=0 union select
NULL,database(),version(),NULL,NULL,NULL,NULL,NULL,NULL,NULL/*

Z poważaniem :
Michał "PicH" Piszczek
Sebastian "Eax" Mróz
----------------------
Jak na razie Gadu-Gadu Sp. z o. o. nie ustosunkowała się do publikacji.
Błędy zostały poprawione w środę 1 marca między godziną 22 a 24
O technice injection:
Istnieje wiele technik ataków na aplikacje oparte na językach server-side
oraz bazach SQL. Jedną z najpopularniejszych i najniebezpieczniejszych jest
SQL Injection. Technika ta polega na zmuszeniu atakowanego skryptu (w tym
przypadku wyszukiwarki) do akceptowania spreparowanych danych wejściowych w
celu manipulowania zapytaniami SQL. Zapytanie SQL jest tworzone czesto za
pomocą dwóch ciągów znaków - jeden jest zapisany na stałe w kodzie, zaś
drugi pobierany z formularza. Bez odpowiedniego filtrowania 2 części
zapytania można wstrzyknąć kod do zapytania i uzyskać praktycznie dowolne
dane z bazy.
Ja działa błąd na generacji gg.

' and 1=0 union select NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL/*

' zamknięcie poprzedzającego fragmentu zapytania and 1=0 wymusza
nieprawidłowość warunku logicznego w 1 części zapytania - bez tego warunku
zapytanie do bazy jest zbyt obciążające i nie zostaje wykonane.
union select - pozwala na wykonanie serii zapytań (łączy wyjście z dwóch
zapytań)

/* - wszystko dalej jest traktowane przez sql jako komentarz.
Wykonując kilka tego typu zapytań
' and 1=0 union select NULL,
database(),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL/*
' and 1=0 union select NULL,
version(),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL/*
' and 1=0 union select NULL,user(),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL/*

Możemy zdobyć ciekawe dane jak:
System : 4.1.11-Debian_4sarge2-log (4.1.11 to wersja mysql'a) Nazwa bazy:
gg2
User i host: 10.0.40.x - tu widzimy ze system obsługuje kilka maszyn bo
adresy ip zmieniają się w obrębie jednej klasy.
Natomiast podające konkretne nazwy pól w zapytaniu, co wcale nie jest trudne
do odgadnięcia, można uzyskać już bezpośredni dostęp do zasobów bazy o
nazwie gg2. Jeśli warunki są "sprzyjające" (gdy uda nam się podać poprawne
nazwy innych baz i posiadamy do nich uprawnienia) większość danych Portalu
Generacji może zostać tą metodą wypisane wraz ze strumieniem wyjściowym
skryptów PHP.

Rozwiązanie :
Najprościej jest poprawić zapytanie sql, a dokładniej sposób pobierania
danych z geta/requesta - wystarczy jedna funkcja więcej przy pobieraniu
Można też zmienić konfiguracje serwera - włączyć magic_quotes_gpc w php.ini.

Ale ogólnie addslashes na danych powinno pomoc, to funkcja która wstawia
przed znaki specjalne jak choćby " i ' znak \ który powoduje ich ignorowanie
przez sql i traktowanie jako zwykły tekst.
Dygresja :
Zaskakujący wydaje się fakt że w/w błędy i metody ich zwalczania są
opisywane w każdym internetowym kursie php oraz w każdym podręczniku w
rozdziale bezpieczeństwo. Pojawia się otwarte pytanie ile takich błędów
zawiera cały portal generacji, skoro na głównej stronie po zalogowaniu w
podstawowym formularzu jakim jest wyszukiwarka zmienne nie są należycie
filtrowane. Przecież programista który dopuścił się tego przeoczenia na
pewno napisał znacznie więcej komponentów w systemie niż samą wyszukiwarkę.
W tym kontekście zastanawiające wydaje być również pytanie czy nasz dane
gromadzone przez Gadu-Gadu Sp. z o. o są należycie chronione..

Szczegóły oraz dokumentacja graficzna (screeny) :  tu
http://83.19.17.2/

   
Powrót