2010-08-20 10 views
9

Wikipedia zapewnia information about one of the most common scenarios na wykorzystywanie odbitego cross site scripting ataku - przy użyciu pewnego stopnia inżynierii społecznej, aby skłonić nieświadomych użytkowników do kliknięcia niebezpiecznego łącza:Jakie są możliwe wektory ataku dla odbitych skryptów cross site?

  1. Alice często odwiedza daną stronę internetową, która jest prowadzona przez Boba . Strona internetowa Boba pod numerem pozwala Alice zalogować się za pomocą nazwy użytkownika/hasła i przechowuje poufne dane, takie jak informacje o płatnościach .
  2. Mallory zauważa, że ​​witryna Boba zawiera odzwierciedlenie luki XSS .
  3. Mallory wykonuje adres URL, aby wykorzystać lukę w zabezpieczeniach, i wysyła Alice e-mail z numerem , zachęcając ją do kliknięcia linku pod adresem dla adresu URL pod fałszywymi pretekstami. Ten adres URL będzie wskazywać stronę internetową Boba pod numerem , ale będzie zawierał złośliwy kod Mallory'ego, , który zostanie odzwierciedlony w witrynie.
  4. Alicja odwiedza adres URL podany przez Mallory po zalogowaniu się na stronie Boba pod adresem .
  5. Złośliwy skrypt osadzony w adresie URL jest uruchamiany w przeglądarce Alice, , tak jakby pochodzi bezpośrednio z serwera Boba (jest to faktyczna luka XSS ). Skrypt może być użyty do wysłania ciasteczka sesji Alice do Mallory. Mallory może następnie użyć pliku cookie sesji, aby wykraść poufne informacje dostępne dla Alicji (dane uwierzytelniające, informacje o płatnościach itd.) Bez wiedzy Alicji.

Teraz to zwykle bywa bardzo dobry przykład, gdy strona dzieje się aplikacja strona napędzane - luka jest wykorzystywana przez coraz użytkownikowi przesłać szkodliwą funkcję do aplikacji (co ważniejsze , wysyłając żądanie GET po zalogowaniu), które znajduje odzwierciedlenie w odpowiedzi.

Czy istnieją bardziej interesujące wektory ataku, szczególnie te, które należy wziąć pod uwagę, gdy aplikacja wykorzystuje dużo AJAX, a większość żądań jest wykonywanych za pośrednictwem POST HTTP?

EDIT

W przypadku nie było jasne, chciałbym wiedzieć, różne rodzaje ataków wektory dotyczy odzwierciedlenie atakom XSS, zwłaszcza gdy warstwa po stronie klienta aplikacji jest realizowane inaczej . Aplikacje oparte na stronie miałyby wektor ataku obejmujący żądania HTTP GET wydane przez użytkownika, ale byłoby interesujące wiedzieć, jak to się dzieje w przypadku grubych aplikacji klienckich, szczególnie tych korzystających z obiektów XMLHttpRequest, które wystawiają żądania HTTP POST. Różne mechanizmy stosowane w renderowaniu po stronie klienta będą oczywiście wymagały badania różnych wektorów ataku. W niektórych przypadkach mogą nie być stosowane żadne wektory ataku; pytanie jest wyrażane w celu wywołania takiej odpowiedzi.

+0

Sugeruję ServerFault może być bardziej odpowiednie miejsce na to pytanie, a może http://webmasters.stackexchange.com/ –

+0

@ricebowl, ale dlaczego miałbym umieścić go na ServerFault? Nie szukam porady na temat stwardnienia serwera. Próbuję wydedukować zestaw wektorów ataku na aplikację internetową. To jest coś, na co ludzie dobrze zorientowani w bezpieczeństwie mogą odpowiedzieć. Sposób, w jaki to widzę, to pytanie dotyczące bezpieczeństwa - czy wrażliwość na odbite XSS powinna być brana poważnie, jeśli aplikacja jest napisana w określony sposób? –

+0

Nie sugeruję, że SF * jest * właściwym miejscem, po prostu patrzę na dwa bliskie głosy sugerujące migrację * do * SF. Osobiście uważam, że webmasters.stackexchange.com byłby lepszym wyborem, ale każdy z nich - moim zdaniem - byłby lepszym wyborem niż SO, właśnie ze względu na skupienie się na serwerze tych stron (i skupienie na aplikacji internetowej tego pytania). Użytkownicy tych stron mogą oczywiście odczuwać inaczej niż ja. –

Odpowiedz

3

Tak, w rzeczywistości istnieje kilka odmian odblaskowego ataku XSS. Zasadniczo jest to Samy Worm. W skrócie Samy użył XSS do odpalenia XHR na MySpace.com, aby odczytać token CSRF i stworzyć żądanie POST. W rzeczywistości jest to ogólny wzorzec ataku, który jest przydatny do atakowania witryn, które używają httponly cookies. Ponieważ korzystanie z ciasteczek httponly staje się coraz popularniejsze, podobnie jak ten wzór ataku.

Kolejną ładownością xss jest XSS Shell. Zapewnia to atakującemu interaktywny kanał do przeglądarki.

XSS służy do przeprowadzenia ataku "Drive-By-Download".

Xss może być również używany do fake the news. W przypadku regularnego znajdowania xss przeciwko news sources jest to raczej poważny problem.

Edytuj: Możesz również być zainteresowany, jak fundacja Apache got owned używa xss i tinyurl. Here to exploit, który napisałem, który używa ataku w stylu Samy w celu uzyskania CSRF.

+0

Dzięki za odpowiedź; niektóre z linków są interesujące. Właśnie skończyłem czytać artykuł o XSS Shell. Aby wyjaśnić, czego szukam, faktycznie interesowało mnie więcej informacji na temat początkowego "zakażenia" bardziej niż to, co można osiągnąć po infekcji. Z grubsza mówiąc, pytanie brzmi: "Jak wykorzystać lukę w zabezpieczeniach XSS w aplikacji przy użyciu inżynierii społecznej?". Biorąc pod uwagę, że nie wszystkie aplikacje są zbudowane podobnie, wycofanie ataku na Gmaila będzie inne niż w przypadku CNN; ten przykład może być zbyt wąski, ale mam nadzieję, że wpadniesz na ten pomysł. –

+0

@Vineet Reynolds Szczerze mówiąc, jest to kwestia programowania i bardziej interesuje mnie pisanie kodu exploitów niż nakłanianie ludzi do klikania linków. Jeśli interesuje Cię inżynieria społeczna, powinieneś zajrzeć gdzie indziej. Może jednak zainteresowałeś się moją edycją. – rook

+0

Rook, na wszelki wypadek, gdybym nie został źle zrozumiany, nie interesuje mnie także aspekt inżynierii społecznej. Jeśli chodzi o przygotowanie exploitów, nie widziałem nic poza prostym atakiem typu "link-in-an-mail". Właśnie dlatego interesuje mnie wiedza o tym, w jaki sposób można wykorzystać exploity, jeśli formularz HTTP zostanie przesłany lub XHR musi zostać użyty. Wierzę, że drugi link zawiera odpowiedź na to, czego szukam. –

2

Odbicie XSS występuje, gdy strona wyświetla złośliwe dane wejściowe użytkownika. Pytanie "jakie są wektory ataku?" jest zatem synonimem "jakie dane wejściowe użytkownika może uzyskać strona?"

Niektóre źródła są:

  • Ciąg zapytania żądania GET, które mogą pochodzić z:
    • URL w wiadomości e-mail
    • przekierowanie (przez js, 301 odpowiedzi, lub meta tag) od hakera lub złośliwej witryny
  • ciało żądania POST, które mogą pochodzić z:
    • żądanie AJAX POST z dowolnej domeny (sama polityka pochodzenia nie zatrzymać żądanie, po prostu parsowania odpowiedzi)
    • dowolnej postaci method = „post” action = a „XSSed_site.com”. Formularze można publikować za pośrednictwem js lub klikając przycisk, który można wykonać za pomocą kliknięcia.
  • Inne formy wejścia takie jak:
    • zewnętrznych plików js jak sortowniki stołowych lub bibliotek że zaatakowana strona wykorzystujące
    • komunikacji serwer-serwer, który jest wyświetlany na zaatakowanej stronie
    • wszelkie inne dane wyświetlane na stronie atakowany, że może być zmieniona przez atakującego

Zdaję sobie sprawę, że sekcja "Inne formy wprowadzania" wygląda bardziej jak zapisana luka w zabezpieczeniach XSS, ale każda aplikacja jest unikalna, a niektóre mogą tłumaczyć dane wprowadzane przez użytkownika na sposób komponowania zewnętrznych elementów na stronie (stąd odzwierciedlenie).

Ciąg zapytania w żądaniu GET z phishingowej wiadomości e-mail z pewnością nie jest jedynym wektorem odzwierciedlonego XSS (ale dobre pytanie).

3

Benlbroussard poruszył to już, ale chcę powtórzyć to ze względu na wagę. Fat client, thin client, POST, GET, PUT; żadna z tych rzeczy nie ma znaczenia. Otwór XSS opiera się na witrynie niepoprawnie przekazującej niektóre dane do kogoś.

Jeśli szukasz ataku ściśle odbitego, to ładunek nie powinien być przechowywany w dowolnym miejscu docelowej aplikacji.W tym przypadku myślę, że masz rację, że gruby klient będzie dążył do bycia bardziej odpornym, ponieważ GET jest najłatwiejszym sposobem zainicjowania odbitego ataku XSS.

Jeśli chodzi o więcej wektorów ataku, jedną z interesujących rzeczy dotyczących architektury grubego klienta jest kodowanie encji. Cienki klient może encji wszystko i zrobić z nią, z wielką korzyścią. Gruby klient powinien encji zakodować odpowiedź do początkowego GET, ale asynchroniczne żądania z odpowiedziami skierowanymi na JavaScript nie mogą być (całkowicie) zakodowane i być prawidłowym JS. To cofanie zwiększa szansę na nie kodowanie czegoś, co powinno być, co jest dużym krokiem w kierunku stworzenia wektora XSS.

Sens?

Carl

+0

wszystko ma sens, z wyjątkiem kodowania encji żądań przez klienta. Uważam, że klienci powinni stosować zasady kodowania określone w protokole bazowym (HTTP), ponieważ posiadanie wielu kodowań w miejscu może prowadzić do ataków wykorzystujących wiele poziomów kodowania. Poza tym większość innych rzeczy ma sens - AJAX (z XML w odpowiedzi) jest lepszy niż AJAH (z HTML), jeśli trzeba chronić przed XSS to coś, co wyprowadziłem. –

+0

@ Valet, dobra oferta. Obawiam się, że mój post jest słabo napisany, w rzeczywistości odnosiłem się do kodowania encji odpowiedzi z serwera, a nie żądań od klienta. Duża różnica prawda? Nie rozumiem, jak XML jest lepszy niż HTML. Moją myślą jest tylko to, co się liczy, to w jaki sposób korzystasz z odpowiedzi w JS, a to informuje, w jaki sposób należy ją chronić. Oceniając je jako JS wprowadza pewne wektory, wstawienie go do DOM wprowadza inne. czego mi brakuje? – Carl

+0

DOM injection to interesujący temat. Tu znowu pojawia się pomysł - JavaScript, który jest obecny (w sekcji CDATA) w odpowiedzi serwera (który jest dokumentem XML), może być interpretowany, jeśli deweloper zaimplementował logikę prezentacji w ten sposób. Z pewnością nie jest to dobra praktyka, która nie powstrzyma ludzi przed zakodowaniem takiej potworności, która nadaje się jako droga do ataku. Nie myślałem o tym wcześniej, dlatego założyłem, że AJAX jest bezpieczniejszy niż AJAH. –

Powiązane problemy