Radekk jest pierwszą osobą, która rozwiązała najnowsze zadanie na bootcamp. Przy okazji dołączył do bardzo nielicznego grona osób, które poradziły sobie z wyzwaniem (swoją drogą zapraszam, dostępnych jest kilka wskazówek). Tym razem również nie podam dokładnego opisu rozwiązania, zarówno XSS (w ramach inspiracji: JS Ninja) jak i SQLi (jeśli ktoś potrzebuje pomocy: Lekcja 7: (blind) SQL injection) nie są wyjątkowo interesujące. W przykładzie tym ważne jest coś innego...
Bootcamp XVI: rozwiązanie
Podałem trzy podpowiedzi do zadania:
- skąd serwer "wie", jak nazywa się przekazywany plik,
- "co z tego, że tak nie można nazwać pliku?",
- trust boundary,
Na pierwsze pytanie łatwo odpowiedzieć patrząc na wysyłane przez przeglądarkę żądanie:

Nazwa (czasami również cała ścieżka) przekazywanego pliku zawarta jest w atrybucie filename, który ustawiany jest przez przeglądarkę na podstawie nazwy (ścieżki) wskazanego pliku. Praktycznie każdy system plików narzuca pewne ograniczenia odnośnie nazwy pliku, a i system operacyjny nie jest tu bez znaczenia. Ogólnie rzecz biorąc nazwa pliku nie może być dowolna.
Dwie kolejne podpowiedzi łączą się w zasadzie w jeden scenariusz: wartość atrybutu filename w żądaniu wysyłanym przez przeglądarkę może zostać dowolnie zmodyfikowana przez atakującego. Nowej nazwy pliku prawie nie dotyczą żadne z ograniczeń, które "wymusza" system operacyjny czy system plików. Innymi słowy jeśli ktoś oczekuje, że nazwa pliku nie będzie zawierała znaków typu < czy > tylko dlatego, że nie można utworzyć pliku o takiej nazwie, to jest w błędzie.
Przy okazji warto zauważyć, że w analogiczny sposób w jaki można zmienić "nazwę pliku", można zmienić również jego "typ". Typ (w sensie typu MIME) pliku przekazywany jest w atrybucie Content-Type i, podobnie jak filename, może zostać dowolnie zmodyfikowany przez atakującego. A co z tego wynika, łatwo można się domyślić.
Na zakończenie przypomnę jeszcze raz o wpisie File upload security recommendations. Warto zapoznać się z tymi zaleceniami i je stosować.
XSS daję radę spokojnie osadzić czy to poprzesz tag img czy form. Tylko nie mam pojęcia jak użyć w tym przykładzie SQLi - cały czas traktuje mi to zapytanie jako tekst (i wypisuje go).
Jakieś podpowiedzi?
Wojuję teraz z tym includem z innej stronki, ale coś mi szwankuje jak np. w tagu img src ustawiam na javascript[dwukropek]String.fromCharCode(cośtam) ale coś mi nie chce tego rozwiązać żadna przeglądarka? Dla alertu wszystko ślicznie zamieniła na znaki specjalne (ponieważ slashy nie można w taki prosty sposób tam wpisać).
Próbowałem to samo z eval'em ale też go coś nie zamienia, przynajmniej jak podglądam narzędziem developerskim (tym samym, które może przejąć mój komputer tak btw. jak się dowiedziałem
Jest jakiś inny sposób na dodanie tych slashy?
Z góry dzięki za pomoc!
Na priv'a podesłałem mój sposób