javascript injection tutorial
Co to jest wstrzykiwanie JavaScript?
Javascript jest jedną z najpopularniejszych technologii i jest najczęściej używany w przypadku stron internetowych i aplikacji internetowych.
Może służyć do realizacji różnych funkcjonalności serwisu. Jednak ta technologia może powodować pewne problemy z bezpieczeństwem, o których deweloper i tester powinni być świadomi.
Javascript można wykorzystać nie tylko do dobrych celów, ale także do niektórych złośliwych ataków. Jednym z nich jest wtrysk JavaScript. Istotą JS Injection jest wstrzyknięcie kodu JavaScript, który będzie uruchamiany po stronie klienta.
W tym samouczku dowiemy się więcej o tym, jak sprawdzić, czy JavaScript Injection jest możliwy, jak można wykonać JS Injection i jakie są konsekwencje, jakie może przynieść JS Injection.
Czego się nauczysz:
- Ryzyko wstrzyknięcia kodu JavaScript
- Dlaczego tak ważne jest testowanie wtrysku JS?
- Porównanie z innymi atakami
- Sprawdzanie wtrysku JavaScript
- Modyfikacja parametrów
- Modyfikacja projektu witryny
- Jak testować pod kątem iniekcji JavaScript
- Możliwa ochrona przed tym atakiem
- Wniosek
- rekomendowane lektury
Ryzyko wstrzyknięcia kodu JavaScript
JS Injection daje złośliwemu użytkownikowi wiele możliwości modyfikowania projektu witryny internetowej, uzyskiwania informacji z witryny internetowej, zmiany wyświetlanych informacji witryny internetowej i manipulowania parametrami (na przykład plików cookie). Dlatego może to spowodować poważne uszkodzenia witryny, wyciek informacji, a nawet włamanie.
Głównym celem JS Injection jest zmiana wyglądu strony internetowej i manipulowanie parametrami. Konsekwencje JS Injection mogą być bardzo różne - od uszkodzenia projektu witryny internetowej po dostęp do konta innej osoby.
Dlaczego tak ważne jest testowanie wtrysku JS?
Wiele osób zapytałoby, czy testowanie JS Injection jest naprawdę konieczne.
Sprawdzanie luk w zabezpieczeniach JS Injection jest częścią testów bezpieczeństwa. Testowanie bezpieczeństwa jest zwykle wykonywane tylko wtedy, gdy zostało uwzględnione w planowaniu projektu, ponieważ wymaga czasu, dużej uwagi i sprawdzenia wielu szczegółów.
Zauważyłem, że podczas realizacji projektu dość często pomija się testy pod kątem ewentualnych ataków - w tym JS Injection. W ten sposób zespoły starają się zaoszczędzić czas projektu. Jednak ta praktyka bardzo często kończy się na reklamacji klienta.
Należy wiedzieć, że testowanie bezpieczeństwa jest wysoce zalecane, nawet jeśli nie jest uwzględnione w planach projektu. Należy przeprowadzić sprawdzanie głównych możliwych ataków - jednocześnie należy sprawdzić ewentualne podatności JS Injection.
Pozostawiając prosty Javascript Luki iniekcyjne w produkcie może kosztować jakość produktu i reputację firmy. Zawsze, gdy nauczyłem się testować przed możliwymi atakami i ogólnie testować bezpieczeństwo, nigdy nie pomijam tej części testów. W ten sposób mam większą pewność co do jakości produktu.
Porównanie z innymi atakami
Należy wspomnieć, że JS Injection nie jest tak ryzykowne jak Wstrzyknięcie SQL , ponieważ jest wykonywana po stronie klienta i nie dociera do bazy danych systemu, jak to się dzieje podczas ataku SQL Injection. Nie jest też tak ryzykowny jak atak XSS.
Podczas tego ataku czasami można zmienić tylko wygląd witryny, a głównym celem ataku XSS jest włamanie się do innych danych logowania.
Jednak JS Injection może również spowodować poważne uszkodzenia witryny. Może nie tylko zniszczyć wygląd witryny, ale także stać się dobrą podstawą do hakowania danych logowania innych osób.
Sprawdzanie wtrysku JavaScript
Kiedy zaczynasz testować JS Injection, pierwszą rzeczą, którą powinieneś zrobić, jest sprawdzenie, czy JS Injection jest możliwy, czy nie. Sprawdzenie tego typu możliwości wtrysku jest bardzo proste - po wejściu na stronę należy wpisać w przeglądarce kod kreskowy adresu w następujący sposób:
javascript: alert („Wykonano!”);
Jeśli pojawi się wyskakujące okienko z komunikatem „Wykonano!”, Oznacza to, że witryna jest podatna na wstrzyknięcie JS.
Następnie na pasku adresu witryny można wypróbować różne polecenia JavaScript.
Należy wspomnieć, że JS Injection jest możliwe nie tylko z paska adresu strony. Istnieje wiele innych elementów witryny, które mogą być podatne na wtrysk JS. Najważniejsze jest, aby dokładnie znać części witryny, na które może mieć wpływ wtrysk JavaScript i jak to sprawdzić.
Typowe cele wstrzyknięcia JS to:
- Różne fora
- Pola komentarzy do artykułu
- Księgi gości
- Wszelkie inne formularze, w których można wstawić tekst.
Aby sprawdzić, czy ten atak jest możliwy dla formularza zapisywania tekstu, pomimo podania zwykłego tekstu, wpisz kod JavaScript, jak wspomniano poniżej, i zapisz tekst w formularzu i odśwież stronę.
javascript: alert („Wykonano!”);
Jeżeli na nowo otwartej stronie znajduje się pole tekstowe z napisem „Wykonano!”, To tego typu atak typu injection jest możliwy dla testowanego formularza.
Jeśli w obu przypadkach pojawi się pole tekstowe z komunikatem, możesz spróbować rozbić witrynę za pomocą bardziej skomplikowanych metod JS Injection. Następnie możesz wypróbować różne typy wtrysku - modyfikację parametrów lub modyfikację projektu.
Oczywiście modyfikacja parametrów jest uważana za bardziej ryzykowną niż modyfikacja projektu. Dlatego podczas testowania więcej uwagi należy poświęcić modyfikacji parametrów.
Należy również pamiętać, że częściami witryn, które są bardziej narażone na wstrzykiwanie kodu JavaScript, są pola wejściowe, w których zapisywane są dowolne typy danych.
Modyfikacja parametrów
Jak wspomniano wcześniej, jednym z możliwych uszkodzeń spowodowanych wtryskiem kodu JavaScript jest modyfikacja parametrów.
Podczas tego ataku złośliwy użytkownik może uzyskać informacje o parametrach lub zmienić dowolną wartość parametrów( Przykład ,ustawienia plików cookies). Może to spowodować poważne zagrożenie, ponieważ złośliwy użytkownik może uzyskać poufną zawartość. Tego typu iniekcje można wykonać za pomocą niektórych poleceń Javascript.
Pamiętajmy, że polecenie Javascript zwracające plik cookie bieżącej sesji jest zapisywane odpowiednio:
javascript: alert (document.cookie);
Wpisany w pasku adresu przeglądarki, zwróci wyskakujące okienko z aktualnymi plikami cookie sesji.
Jeżeli serwis korzysta z plików cookies, możemy odczytać takie informacje jak identyfikator sesji serwera lub inne dane użytkownika zapisane w plikach cookies.
Należy wspomnieć, że zamiast funkcji alert () można zastosować dowolną inną funkcję JavaScript.
Na przykład ,jeśli znaleźliśmy podatną na ataki witrynę, która przechowuje identyfikator sesji w parametrze pliku cookie „session_id”. Następnie możemy napisać funkcję, która zmienia identyfikator bieżącej sesji:
javascript: void (document.cookie = “session_id =<>');
W ten sposób wartość identyfikatora sesji zostanie zmieniona. Możliwe są również inne sposoby zmiany parametrów.
Na przykład, złośliwy użytkownik chce się zalogować jako inne osoby. Aby dokonać logowania, złośliwy użytkownik najpierw zmieni ustawienia autoryzacji plików cookie na true. Jeśli ustawienia plików cookie nie są ustawione jako „prawdziwe”, wartość pliku cookie może zostać zwrócona jako „nieokreślona”.
jak grać na prywatnym serwerze World of Warcraft
Aby zmienić te wartości plików cookie, złośliwy użytkownik wykona zgodnie z poleceniem Javascript z paska adresu URL w przeglądarce:
javascript: void (document.cookie = „autoryzacja = prawda”);
W wyniku tego aktualny parametr pliku cookie autoryzacja = fałsz zostanie zmieniony na autoryzacja = prawda. W ten sposób złośliwy użytkownik będzie mógł uzyskać dostęp do poufnych treści.
Należy również wspomnieć, że czasami kod JavaScript zwraca dość poufne informacje.
javascript: alert (document.cookie);
Na przykład, jeśli programista witryny nie był wystarczająco ostrożny, może również zwrócić nazwy i wartości parametrów nazwy użytkownika i hasła. Następnie takie informacje można wykorzystać do włamania się do witryny lub po prostu zmiany wartości wrażliwego parametru.
Na przykład, poniższym kodem możemy zmienić wartość nazwy użytkownika:
javascript: void (document.cookie = ”nazwa_użytkownika = innyUser”);
W ten sposób można modyfikować również inne wartości parametrów.
Modyfikacja projektu witryny
Javascript można także używać do modyfikowania dowolnej formy witryny internetowej i ogólnie jej wyglądu.
Na przykład, przy pomocy Javascript możesz zmienić dowolne informacje wyświetlane na stronie:
- Wyświetlany tekst.
- Tło witryny.
- Wygląd formularza witryny internetowej.
- Wygląd wyskakującego okienka.
- Wygląd dowolnego innego elementu witryny.
Na przykład, w celu zmiany wyświetlanego adresu e-mail w serwisie należy użyć odpowiedniej komendy Javascript:
javascript: void (document.forms [0] .email.value = „Test@test.com”) ;
Możliwe jest również kilka innych skomplikowanych manipulacji przy projekcie witryny. Za pomocą tego ataku możemy również uzyskać dostęp do klasy CSS witryny i ją zmienić.
Na przykład, jeśli chcielibyśmy zmienić obraz tła witryny za pomocą JS Injection, to polecenie należy uruchomić odpowiednio:
javascript: void (document. background-image: url („inny-obraz.jpg“);
Ponadto złośliwy użytkownik może napisać kod JavaScript, który jest wymieniony poniżej w formularzu wstawiania tekstu i zapisać go.
javascript: void (alert („Cześć!”));
Następnie za każdym razem, gdy strona zostanie otwarta, pojawi się pole tekstowe z komunikatem „Hello!”.
Zmieniony projekt witryny z wtryskiem JavaScript jest mniej ryzykowny niż modyfikacja parametrów. Jeśli jednak projekt strony internetowej zostanie zmieniony w złośliwy sposób, może to kosztować reputację firmy.
Jak testować pod kątem iniekcji JavaScript
Można to przetestować na następujące sposoby:
- Ręcznie
- Z narzędziami do testowania
- Z wtyczkami do przeglądarki
Ewentualne luki w zabezpieczeniach Javascript można sprawdzić ręcznie, jeśli masz dobrą wiedzę na temat sposobu ich wykonywania. Można go również przetestować za pomocą różnych narzędzi do automatyzacji.
Na przykład, jeśli zautomatyzowałeś swoje testy na poziomie API za pomocą narzędzia SOAP UI, to możliwe jest również uruchomienie testów Javascript Injection z SOAP UI .
Mogę jednak tylko skomentować z własnego doświadczenia, że powinieneś mieć naprawdę dobrą wiedzę na temat narzędzia SOAP UI, aby przetestować go pod kątem JS Injection, ponieważ wszystkie kroki testu powinny być napisane bez błędów. Jeśli jakikolwiek krok testu zostanie napisany nieprawidłowo, może to również spowodować nieprawidłowe wyniki testów bezpieczeństwa.
Możesz też znaleźć różne wtyczki przeglądarki do sprawdzania pod kątem możliwego ataku. Jednak zaleca się, aby nie zapomnieć o ręcznym sprawdzeniu tego ataku, ponieważ zwykle zwraca on dokładniejsze wyniki.
Chciałbym powiedzieć, że ręczne testowanie przeciwko JavaScript Injection daje mi większą pewność co do bezpieczeństwa witryny. Dzięki temu masz pewność, że żaden formularz nie został pominięty podczas testu, a wszystkie wyniki są dla Ciebie widoczne.
Aby przeprowadzić test przeciwko JavaScript Injection, powinieneś mieć ogólną wiedzę na temat Javascript i wiedzieć, które części witryny są bardziej podatne na ataki. Należy również pamiętać, że strona może być chroniona przed JS Injection i podczas testów należy spróbować złamać tę ochronę.
W ten sposób będziesz mieć pewność, czy ochrona przed tym atakiem jest wystarczająco silna, czy nie.
Możliwa ochrona przed tym atakiem
Po pierwsze, aby zapobiec temu atakowi, każde otrzymane wejście powinno zostać sprawdzone. Dane wejściowe należy sprawdzać za każdym razem, a nie tylko wtedy, gdy dane są początkowo akceptowane.
Zdecydowanie zaleca się, aby nie polegać na weryfikacji po stronie klienta. Zaleca się również wykonanie ważnej logiki po stronie serwera.
Wiele osób próbuje chronić się przed wstrzyknięciem kodu JavaScript, zmieniając cudzysłowy na podwójne, a kod Javascript nie powinien być wykonywany w ten sposób.
Na przykład, jeśli w polu komentarza wpiszesz cokolwiek z cudzysłowami…, te cytaty zostaną zastąpione podwójnym -<>...<>. W ten sposób wprowadzony kod Javascript nie zostanie wykonany.
Zauważyłem, że zastępowanie cudzysłowów cudzysłowami jest dość powszechną praktyką w celu uniknięcia możliwych ataków JS Injection. Istnieje jednak kilka sposobów zakodowania cudzysłowów, aby wykonać kod JS Injection. Dlatego zmiana cudzysłowów na podwójne nie jest idealnym sposobem ochrony przed tym atakiem.
Wniosek
Należy zawsze pamiętać, że Javascript Injection jest jednym z możliwych ataków na strony internetowe, ponieważ Javascript jest jedną z najczęściej używanych technologii w tych witrynach. Dlatego podczas testowania witryn internetowych lub innych technologii internetowych nie należy zapominać o przetestowaniu pod kątem tego ataku.
Wykonując testy bezpieczeństwa, nie należy zapominać o JS Injection. Niektórzy uważają to testowanie za mniej ryzykowny atak, ponieważ jest przeprowadzany po stronie klienta.
Jest to jednak niewłaściwe podejście i zawsze powinniśmy pamiętać, że wstrzykiwanie kodu JavaScript może spowodować poważne uszkodzenie witryny internetowej, takie jak wyciek poufnych informacji, zmiana parametrów lub włamanie do kont użytkowników.
Dlatego powinniśmy traktować to jako ważną część testowania i jest to część inwestycji w dobry produkt i reputację firmy.
Testowanie JS Injection nie jest trudne. Po pierwsze, powinieneś mieć ogólną wiedzę o Javascript i wiedzieć, jak sprawdzić, czy ten atak jest możliwy dla obecnego rozwiązania internetowego, czy nie.
Również podczas testowania należy pamiętać, że strona internetowa może mieć ochronę przed tego typu atakami, ale może być zbyt słaba - również należy to sprawdzić. Inną ważną rzeczą do zapamiętania jest to, że istnieją różne typy ataków Javascript Injection i żadnego z nich nie należy zapomnieć o przetestowaniu.
Czy wykonałeś testowanie wtrysku JavaScript? Chętnie poznamy Twoją opinię, możesz podzielić się swoimi doświadczeniami w sekcji komentarzy poniżej.
rekomendowane lektury
- Dogłębne samouczki dotyczące Eclipse dla początkujących
- Jak skonfigurować środowisko testowe Node.js: samouczek dotyczący Node.js.
- Samouczek dotyczący wstrzykiwania HTML: typy i zapobieganie z przykładami
- Kurs testowania SQL Injection (przykład i zapobieganie atakowi SQL Injection Attack)
- Samouczek dotyczący refleksji w języku Java z przykładami
- Samouczek SVN: Zarządzanie kodem źródłowym przy użyciu Subversion
- Python DateTime Tutorial z przykładami
- Samouczek Tortoise SVN: Zmiany w repozytorium kodu