2011-08-29 14 views
21

Mam problemy z XSS. W szczególności miałem indywidualny alarm wtrysku JS pokazujący, że moje wejście ma luki. Zrobiłem badania na XSS i znalazłem przykłady, ale z jakiegoś powodu nie mogę ich zmusić do pracy.Przykłady XSS, których mogę użyć do przetestowania wprowadzania mojej strony?

Czy mogę uzyskać przykład (y) XSS, który mogę wprowadzić do mojego pliku wejściowego i kiedy wysyłam go z powrotem do użytkownika, widzę jakąś zmianę, taką jak alert informujący, że jest podatny na atak?

Używam PHP i zamierzam zaimplementować htmlspecialchars(), ale najpierw próbuję odtworzyć te luki.

Dzięki!

+4

Code luk wtryskowych, takich jak XSS lub SQL injection są zawsze wynikiem niewłaściwego użytkowania lub brak ucieczki danych. W PHP * musisz * używać 'htmlspecialchars()' on * everything *, które wyprowadzasz na stronę, która nie ma być znacznikiem. Aby zaoszczędzić trochę pisania możesz użyć funkcji 'h ($ s)' zwróć {return htmlspecialchars (s); } 'i używaj' h() 'wszędzie. – Tomalak

+0

Jaki jest sens testowania luk XSS ** przed ** implementujesz 'htmlspecialchars()' (lub 'htmlentities()')? – Mike

+0

Pamiętaj też o "poziomie kodu", w którym się znajdujesz: Na przykład: Pisząc dane generowane przez użytkownika do komentarza HTML, naprawdę nie musisz 'htmlspecialchars()' go, ale * musisz * pamiętać usuń wszelkie wystąpienia '->' z tych danych lub masz tam możliwą lukę XSS. – Tomalak

Odpowiedz

14

Można użyć tej firefox dodatek:

XSS-Me to narzędzie Exploit-Me wykorzystywane do testowania odbitego Cross-Site Scripting (XSS). Obecnie NIE testuje zapisanego XSS.

Narzędzie działa poprzez przesłanie formularzy HTML i podstawienie wartości w postaci za pomocą łańcuchów reprezentatywnych dla ataku XSS. Jeśli wynikowa strona HTML ustawia określoną wartość JavaScript (document.vulnerable = true), to narzędzie oznacza stronę jako wrażliwą dla danego ciągu XSS. Narzędzie nie próbuje zagrozić bezpieczeństwu danego systemu. Szuka możliwych punktów wejścia do ataku na system. Nie ma skanowania portów, sniffingu, hakowania haseł lub ataków firewall wykonywanych przez narzędzie .

Możesz myśleć o pracy wykonanej przez narzędzie tak samo, jak testerach QA dla witryny ręcznie wprowadzającej wszystkie te ciągi znaków w polach formularza w polu .

+1

To narzędzie jest niesamowite, bardzo polecam! Wkręcanie na nowo koła –

+0

To nie jest obsługiwane w wersji 5.0. Czy ktoś użył go w wersji 5.0 z powodzeniem? – KRB

4

Na przykład:

<script>alert("XSS")</script> 
"><b>Bold</b> 
'><u>Underlined</u> 
1

Ad-hoc badania jest OK, jednak ja również polecam wypróbowanie aplikacji internetowych narzędzie skanowania słabych punktów, aby zapewnić, że nie mają niczego przegapić.

Acunetix jest bardzo dobry i ma bezpłatną wersję próbną wniosku:

http://www.acunetix.com/websitesecurity/xss.htm

(Uwaga nie mam powiązań z tej firmy, jednak użyłem produkt do testowania własnych aplikacji).

+0

Niestety, skrypty cross-site to jedna z rzeczy, które automatyczne skanery są naprawdę straszne w znalezieniu. Tęsknią za większością wrażliwych konfiguracji w dziczy i strzelają tylko najprostszym szeroko otwartym kodem. – Cheekysoft

3

Bardzo dobrze jest korzystać z niektórych automatycznych narzędzi, jednak nie uzyskasz od nich żadnego wglądu ani doświadczenia.

Celem ataku XSS jest wykonanie javascript w oknie przeglądarki, które nie jest dostarczane przez witrynę. Najpierw musisz sprawdzić, w jakim kontekście dane użytkownika są drukowane na stronie internetowej; może znajdować się w obrębie bloku kodu <script></script>, może znajdować się w obrębie bloku <style></style>, może być używany jako atrybut elementu <input type="text" value="USER DATA" /> lub na przykład w <textarea>.W zależności od tego zobaczysz, jakiej składni użyjesz, aby uciec od kontekstu (lub użyć go); na przykład jeśli jesteś w tagach <script>, może być wystarczające zamknięcie paretki funkcji i zakończenie linii średnikiem, aby ostateczny zastrzyk wyglądał jak ); alert(555);. Jeśli podane dane są używane jako atrybuty html, wtrysk może wyglądać jak " onclick="alert(1)", co spowoduje wykonanie js, jeśli klikniesz na element (ten obszar jest bogaty w grę, szczególnie w html5). Chodzi o to, że kontekst xss jest tak samo ważny jak wszelkie funkcje filtrowania/sanatyzacji, które mogą być na miejscu, i często mogą występować małe niuanse, których automatyczne narzędzie nie będzie przechwytywać. Jak widać powyżej, nawet bez cudzysłowów i znaczników html, w ograniczonej liczbie przypadków możesz być w stanie ominąć filtry i wykonać js.

Należy również rozważyć kodowanie przeglądarki, na przykład można obejść filtry, jeśli docelowa przeglądarka ma kodowanie UTF7 (i kodujecie w ten sposób swój zastrzyk). Filtrowanie uchylania się to zupełnie inna historia, jednak obecne funkcje PHP są dość kuloodporne, jeśli są używane poprawnie.

Również tutaj jest dość długa lista XSS vectors

jako ostatnią rzeczą, o to rzeczywisty przykład ciąg XSS, który został znaleziony na miejscu, a ja gwarantuję, że nie jeden skaner będzie już stwierdzono, że (były różne filtry i czarne listy haseł, strona wolno wkładać podstawowe formatowanie HTML, aby dostosować stronę profilu):

<a href="Boom"><font color=a"onmouseover=alert(document.cookie);"> XSS-Try ME</span></font>

Powiązane problemy