Читать книгу Na tropie błędów. Przewodnik hakerski - Peter Yaworski - Страница 35

5.
HTML INJECTION I FAŁSZOWANIE TREŚCI
Wstrzyknięcie formularza na stronie Coinbase

Оглавление

Poziom trudności: Niski

URL: https://coinbase.com/apps/

Źródło: https://hackerone.com/reports/104543/

Data zgłoszenia: 10 grudnia 2015

Nagroda: 200 $

Niektóre strony używają filtrów w celu pozbycia się tagów HTML, chroniąc stronę przed atakami HTML injection; czasami jednak jesteś w stanie obejść to zabezpieczenie za pomocą encji HTML. W przypadku tej podatności autor zgłoszenia zauważył, że Coinbase dekodował encje HTML podczas wyświetlania tekstu w recenzjach użytkowników. W HTML-u niektóre znaki są zarezerwowane, ponieważ pełnią konkretną funkcję (tak jak nawiasy kątowe < >, które otwierają i zamykają tagi HTML). Zarezerwowane znaki powinny być renderowane przy użyciu ich encji HTML; na przykład znak > powinien być renderowany przez strony jako >, by uniknąć podatności typu injection. Jednakże nawet zwykły znak może zostać wyrenderowany jako zakodowany w HTML-u; na przykład encją litery a jest a.

W przypadku tego błędu, autor zgłaszenia najpierw wprowadził zwykły tekst HTML w pole tekstowe przygotowane do recenzji użytkowników:

<h1>This is a test</h1>

Filtr w serwisie Coinbase pozbywa się języka HTML i wyświetli powyższą wiadomość jako zwykły tekst. Będzie on dokładnie taki sam, z wyjątkiem usuniętych tagów HTML. Co innego jednak, jeśli użytkownik przesłał  od razu zakodowaną w HTML-u wiadomość, tak jak tutaj:

<h1>This is a test</h1>

W przypadku takiej wiadomości Coinbase pozostawił tagi, a następnie dekodował cały tekst na HTML, co skutkowało poprawnym renderowaniem tagów <h1> w przesłanej wiadomości:

This is a test

Używając zakodowanych w HTML-u wartości, autor zgłoszenia zademonstrował, jak mógł wyświetlić pole do wpisania nazwy użytkownika i hasła:

Username:<br><input type="text" name="firstname"><br>Password:<br><input type="password" name="lastname">

Powyższy tekst przetłumaczony do HTML-a wygląda następująco:

Username:<br>

<input type="text" name="firstname">

<br>

Password:<br>

<input type="password" name="lastname">

Renderuje on pola wejściowe dla tekstu, które wyglądają jak miejsce do wprowadzenia nazwy użytkownika i hasła. Złośliwy haker mógł użyć tej podatności w celu wyłudzenia od użytkowników ich danych do logowania, które następnie zostałyby przesłane na stronę przechwytującą. Ta podatność zależy jednak od tego, czy użytkownik da się oszukać, wierząc, że formularz jest prawdziwy. W konsekwencji Coinbase nagrodził hakera niższą wypłatą w porównaniu z podatnościami, które nie wymagają interakcji ze strony użytkownika.

Wnioski

Kiedy testujesz witrynę, sprawdź, w jaki sposób traktuje ona różne źródła wejścia, włączając w to zwykły i zakodowany tekst. Miej na uwadze strony, które przyjmują wartości kodowane w URI, takie jak %2F, a następnie renderują ich dekodowane odpowiedniki, co w tym przypadku dałoby nam /.

Pod adresem https://gchq.github.io/CyberChef/ znajdziesz bardzo praktyczną aplikację, która zawiera zbiór narzędzi do kodowania. Warto ją  sprawdzić.

Na tropie błędów. Przewodnik hakerski

Подняться наверх