Client Side Prototype Pollution
Odkrywanie za pomocą automatycznych narzędzi
Narzędzia https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap i https://github.com/kosmosec/proto-find można użyć do znalezienia podatności na zanieczyszczenie prototypu.
Ponadto można również użyć rozszerzenia przeglądarki PPScan do automatycznego skanowania stron, do których uzyskujesz dostęp, w poszukiwaniu podatności na zanieczyszczenie prototypu.
Debugowanie, gdzie jest używana właściwość
Znajdowanie przyczyny Prototypowego Zanieczyszczenia
Gdy podatność na zanieczyszczenie prototypowe zostanie zidentyfikowana przez którykolwiek z narzędzi, a jeśli kod nie jest zbyt skomplikowany, można znaleźć podatność, szukając słów kluczowych takich jak location.hash
, decodeURIComponent
lub location.search
w narzędziach deweloperskich Chrome. Ten podejście pozwala zlokalizować podatną sekcję kodu JavaScript.
Dla większych i bardziej złożonych baz kodu, prostą metodą odkrycia podatnego kodu jest wykonanie następujących kroków:
Użyj narzędzia do zidentyfikowania podatności i uzyskania ładunku zaprojektowanego do ustawienia właściwości w konstruktorze. Przykład dostarczony przez ppmap może wyglądać tak:
constructor[prototype][ppmap]=reserved
.Ustaw punkt przerwania na pierwszej linii kodu JavaScript, który zostanie wykonany na stronie. Odśwież stronę z ładunkiem, zatrzymując wykonanie w tym punkcie przerwania.
Gdy wykonanie JavaScript jest wstrzymane, wykonaj następujący skrypt w konsoli JS. Ten skrypt sygnalizuje, kiedy właściwość 'ppmap' zostanie utworzona, pomagając zlokalizować jej pochodzenie:
Przejdź z powrotem do zakładki Sources i wybierz „Wznów wykonywanie skryptu”. JavaScript będzie kontynuował wykonywanie, a właściwość 'ppmap' zostanie zanieczyszczona zgodnie z oczekiwaniami. Wykorzystanie dostarczonego fragmentu ułatwia zidentyfikowanie dokładnej lokalizacji, w której właściwość 'ppmap' jest zanieczyszczona. Analizując Stos wywołań, można zauważyć różne stosy, w których wystąpiło zanieczyszczenie.
Podczas decydowania, który stos zbadać, często przydatne jest skoncentrowanie się na stosach powiązanych z plikami bibliotek JavaScript, ponieważ zanieczyszczenie prototypu często występuje w tych bibliotekach. Zidentyfikuj odpowiedni stos, analizując jego załączenie do plików bibliotek (widoczne po prawej stronie, podobnie jak na dostarczonym obrazie wskazującym). W przypadku wielu stosów, takich jak te na liniach 4 i 6, logicznym wyborem jest stos na linii 4, ponieważ reprezentuje on początkowe wystąpienie zanieczyszczenia i tym samym korzeń podatności. Kliknięcie na stos spowoduje przekierowanie do podatnego kodu.
Znajdowanie Gadgetów Skryptowych
Gadget to kod, który będzie wykorzystywany po odkryciu podatności PP.
Jeśli aplikacja jest prosta, możemy szukać słów kluczowych takich jak srcdoc/innerHTML/iframe/createElement
i przejrzeć kod źródłowy, sprawdzając, czy prowadzi to do wykonania kodu JavaScript. Czasami wspomniane techniki mogą nie znaleźć żadnych gadżetów. W takim przypadku czysta analiza kodu źródłowego ujawnia kilka fajnych gadżetów, jak w poniższym przykładzie.
Przykład Znalezienia Gadżetu PP w kodzie biblioteki Mithil
Sprawdź ten opis: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
Rekompilacja ładunków dla podatnych bibliotek
Ominięcie oczyszczania HTML za pomocą PP
Ta badania pokazują gadżety PP do omijania oczyszczania dostarczanego przez niektóre biblioteki oczyszczające HTML:
sanitize-html
dompurify
Closure
Odnośniki
Last updated