Testy_Penetracyjne/README.md
2020-06-18 02:12:46 +00:00

6.3 KiB

Agata Lenz - Testy Penetracyjne

Zadanie zaliczeniowe z przedmiotu Wprowadzenie do Testowania

Opis

Moim zadaniem zaliczeniowym było utworzenie raportu na podstawie przeprowadzonych testów penetracyjnych strony https://google-gruyere.appspot.com/part1. W tym celu wygenerowałam unikalne id, dlatego testy zostały przeprowadzone na stronie https://google-gruyere.appspot.com/427718249942042260769664292874039511420/.

Spis treści

Lista użytych narzędzi

Testy zostały przeprowadzone przy użyciu przeglądarki FireFox, dostępnego w niej zestawu narzędzi deweloperskich oraz dodatkowego rozszerzenia Web Developer dla tejże przeglądarki.

Znalezione podatności

Manipulacja zapytań http

Wskutek obsługi formularzy przy użyciu metody GET zamiast POST, przekazywane zapytania widoczne są w adresie url, tym samym narażone zostają na ataki, a manipulacja przekazywanymi danymi jest bardzo prosta. Np. fragment zapytania tworzącego nowe konto użytkownika: https://.../saveprofile?action=new&uid=agata&pw=agata&is_author=True można łatwo zmanipulować na: https://.../saveprofile?action=update&uid=agata&is_admin=True.

Cross site scripting

Zarówno pola formularzy, jak i upload plików czy nawet adres url są narażone na ataki XSS - bez problemu można dokonać wstrzyknięcia kodu skryptu.

Nieprawidłowe uprawnienia administratora

Po otwarciu linku https://google-gruyere.appspot.com/427718249942042260769664292874039511420/quitserver następuje zamknięcie serwera - taką możliwość powinien mieć wyłącznie administrator, tymczasem nie trzeba być nawet zalogowanym użytkownikiem, aby do tego doprowadzić.

Możliwość SQL Injection

Aplikacja nie jest odporna na wprowadzanie zapytań SQL do bazy.

Wrażliwe dane przechowywane w ciasteczkach

Ciasteczka przechowują dane w formie: hash|username|admin|author.

Scenariusze testów

Nadanie uprawnień administratora zwykłemu użytkownikowi

  1. Utwórz nowe konto użytkownika
  2. Zmień adres url na: https://google-gruyere.appspot.com/427718249942042260769664292874039511420/saveprofile?action=update&uid=username&is_admin=True, gdzie username to Twoja nazwa użytkownika
  3. Aplikacja powinna zalogować Cię do Twojego konta
  4. Wyloguj się
  5. Zaloguj się z powrotem przy pomocy takich samych danych, jak przy tworzeniu nowego konta
  6. W prawym górnym rogu pojawi się zakładka Manage this serwer, dostępna tylko dla użytkowników z uprawnieniami administratora; nowe uprawnienia są także widoczne w ciasteczku:

Widok administratora strony

Atak XSS poprzez formularz

  1. Zaloguj się na wybrane konto użytkownika
  2. Wybierz z górnego paska opcję New Snippet
  3. W treści formularza wprowadź następujący tekst: My Snippet 1
  4. Kliknij Submit
  5. Wyloguj się z konta i zaloguj na konto innego użytkownika
  6. Spróbuj otworzyć utworzony wcześniej snippet
  7. Wstrzyknięty javascript sprawi, że zostanie wyświetlone ciasteczko z danymi logowania obecnego użytkownika:

My Snippet 1

Atak XSS poprzez upload pliku

  1. Zaloguj się na konto użytkownika

  2. Wybierz z górnego paska opcję Upload

  3. Załaduj plik .html o zawartości:

    <html>
        <script>
            alert(document.cookie);
        </script>
    </html>
    

    (plik do pobrania z repozytorium pod nazwą xss2.html)

  4. Kliknij Upload i przejdź do linku, który zostanie wyświetlony. Skrypt zostanie zrealizowany:

Upload

Atak XSS poprzez adres url

  1. Zaloguj się na konto użytkownika
  2. Wpisz adres url strony: https://google-gruyere.appspot.com/427718249942042260769664292874039511420/%3Cscript%3Ealert(document.cookie)%3C/script%3E
  3. Ponownie skrypt zostanie zrealizowany:

Upload

Zamknięcie serwera

  1. Wpisz adres url strony: https://google-gruyere.appspot.com/427718249942042260769664292874039511420/quitserver
  2. Nastąpi zamknięcie serwera, a jego ponowne uruchomienie wymagać będzie czasu:

Upload

Wyświetlenie zawartości bazy danych

  1. Zaloguj się na konto użytkownika
  2. Wybierz zakładkę Profile
  3. Jako treść formularza wprowadź: {{_db:pprint}}
  4. Wybierz Update
  5. Przejdź do Private Snippet Show i wyświetl swój prywatny snippet
  6. Wyświetlone zostaną wrażliwe dane użytkowników:

Upload

Możliwe zastosowania znalezionych podatności

Manipulacja zapytań http

Poprzez manipulację zapytać http, którą można przeprowadzić choćby przy pomocy edycji adresu url, można nadać sobie (lub dowolnemu użytkownikowi znając jedynie jego nazwę) uprawnienia administratora. Daje to możliwości resetowania oraz zamykania serwera, ale także edycji dowolnych danych wszystkich użytkowników mających konta w serwisie (łącznie z pozostałymi administratorami strony), a także dodanie bądź pozbawienie uprawnień. Same zapytania można manipulować na wiele sposobów, co umożliwia zatem wprowadzenie wielu zmian w ustawieniach konta itp z poziomu adresu url.

Ataki XSS

Ponieważ ciasteczko przechowuje wrażliwe dane o zalogowanym użytkowniku, dane te można z łatwością przechwycić przy użyciu XSS (co zostało zaprezentowane wyżej w trzech wariantach). Atakujący ma tutaj jednak możliwość wstrzyknięcia dowolnego skryptu, a zatem oprócz przechwytywania ciasteczek może również wykorzystać XSS do dynamicznego podmieniania zawartości stron, uruchomić keyloggera w przeglądarce ofiary, bądź hostować złośliwe oprogramowanie z wykorzystaniem zaatakowanej aplikacji.

SQL injection

Manipulacja zaptaniami do bazy danych, tak jak w wymienionym wyżej przykładzie, pozwala swobodnie wyświetlać jej zawartość. Zapytania do bazy mogą być również generowane dzięki nieodpowiedniemu filtrowaniu znaków ucieczki z danych wejściowych, co pozwala m.in. na modyfikację zapytania niezgodnie z intencją programisty, albo nawet przekazanie dodatkowych zapytań niszczących dane. Atak ten może być także wykorzystany do zamknięcia serwera, na przykład poprzez wstrzyknięcie zapytania kosztownego obliczeniowo.