Dzisiaj w #od0dopentestera o…

Dzisiaj w #od0dopentestera o Reflected File Download.
Błąd ten występuje zazwyczaj w endpointach jsonp, kiedy nie sprawdzamy nazwy callbacku.
Przy jego pomocy możemy pobrać plik o dowolnym rozszerzeniu i z kontrolowaną przez nas treścią.
Załóżmy, że posiadamy API, które zwraca bieżący czas jako json i chcemy pobrać te dane przy pomocy #javascript
Przeglądarki nie pozwalają na wysłanie żądania ajax do innej domeny, chroni przed tym mechanizm Same Origin Policy.

header(‚Content-Type: application/json’);
header(„Content-Disposition: attachment”);

$callback = $ GET[‚callback’];
echo $callback.'(‚.jsonencode(array(‚czas’ => time())).’);’;

Można natomiast przy pomocy tagu script uruchomić dowolny kod z innej domeny.
Nie możemy jednak załadować pliku w formacie json jako #js.
Ale jeśli treść json opakujemy w wywołanie funkcji – interpreter zrozumie to jako instrukcje wykonania danej funkcji a json zostanie tam przekazany jako parametr.

Gdzie znajduje się dzisiejszy błąd?
Sporo #programista15k nie sprawdza nazwy funkcji.

Wykorzystamy format bat – tam komendy można oddzielić od siebie wykorzystując pipe.
Jeżeli jako callback podamy nazwę komendy, następnie pipe a całość zapiszemy do pliku bat, Windows będzie myślał że ma do czynienia z programem wsadowym.
Wykona więc podaną komendę a następnie dalszą część pliku.

Download

Jedyne co stoi nam na przeszkodzie to nazwa pliku – obecnie bowiem jest on pobierany jako json.
Na pomoc przychodzi atrybut download, który możemy przekazać do tagu href.
Dzięki temu plik zostanie pobrany jako .bat
Teraz wystarczy, że niczego nieświadomy użytkownik uruchomi tak spreparowany plik – zobaczy kalkulator.
Atak opiera się więc na socjotechnice i przekonaniu, że to co pobiera z danego serwisu jest OK.

Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.

#security #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki #php

Comments are closed.