PortSwigger: Unprotected admin functionality - rozwiązanie labu

cyberbezpieczeństwobezpieczeństwo webowelabyportswigger

Cel - znalezienie panelu administratora

Celem tego laboratorium jest znalezienie adresu URL prowadzącego do panelu administratora, a następnie skorzystanie z tego, że panel nie sprawdza w żaden sposób, czy posiadamy uprawnienia administratora. Aby zadanie zostało uznane za zaliczone, musimy usunąć użytkownika imieniem Carlos.

Krok 1: analiza pliku robots.txt

Robots.txt a SEO - do czego wykorzystuje się plik robots.txt

Robots.txt to plik, z którego często korzystają specjaliści zajmujący się SEO (Search Engine Optimization). Specjaliści SEO starają się tak optymalizować zadoby związane ze stroną, by strona była lepiej widoczna w wyszukiwarkach.

W pliku robotx.txt zazwyczaj umieszczane są adresy URL, które nie powinny być widoczne w wynikach wyszukiwania. Dyrektywa Disallow sugeruje robotom indeksującym ignorowanie tak oznaczonych linków. Są to zazwyczaj linki do zasobów mniej istotnych dla zrozumienia treści strony.

Jeśli dany adres opisany jest dyrektywą Disallow, to znaczy, że nie chcemy, by robot marnował czas na sprawdzanie tego zasobu. Tym samym sugerujemy, że dla lepszego zrozumienia strony taki robot może lepiej wykorzystać czas zaglądając gdzieś indziej.

Jest to istotne z punktu widzenia SEO. Każdy robot indeksujący treści na stronie ma przydzielone zasoby (czas, częstotliwość skanowania), które może wykorzystać na skanowanie danej strony. Jeśli więc podpowiemy mu, że pewne strony są mniej ważne od innych, możemy pomóc mu spędzić więcej czasu na skanowaniu i analizowaniu tych podstron, które chcemy, by były widoczne w wyszukiwarce, co przekłada się na budowanie widoczności strony w sieci.

Plik ten jednak ma swoje ograniczenia - nie każda przeglądarka obsługuje zawarte w niej reguły, nie każdy robot tak samo interpretuje składnie, a także może się okazać, że strona i tak będzie zaindeksowana - jeśli prowadzą do niej linki z innych witryn. Dlatego też lepszym sposobem jest użycie tagu noindex lub zabezpieczenie strony hasłem (źródło: developers.google.com).

Zazwyczaj w robots.txt znajduje się również adres prowadzący do pliku sitemap.xml - mapy strony z linkami, które chcemy, by były indeksowane.

Niewątpliwie link do panelu administratora będzie linkiem, który z punktu widzenia SEO nic nie wnosi - istotniejsze są np. linki do bloga czy innych podstron - jednak jeśli umieścimy go w tym miejscu to jest to jedno z tych miejsc, w które atakujący raczej zajrzy - a potem nie omieszka skorzystać z tak umieszczonego linku. Zatem plik robots.txt, poza tym, że może pomóc w działaniach SEO, może też być źródłem wielu ciekawych informacji z punktu widzenia atakującego.

Co atakujący może znaleźć w pliku robots.txt?

Zazwyczaj atakujący przy takiej okazji skorzysta ze słowników zawierających słowa kluczowe, które dodawane są do narzędzi skanujących stronę. Pozwalaja one sprawdzić, czy przypadkiem nie ma na danej stronie dodanych zasobów, których adres URL kończy się na jedno z dodanych w słowniku słów. Z takimi "znanymi" adresami spotykaliśmy się wielokrotnie: to np. adresy kończące się na /login, /logowanie, /sdmin, /panel, /wp-login (dla WordPressa), /user, /dashboard etc.

Czasem developerom wydaje się, że można w taki sposób dodać jakieś zasoby na stronę - np. dodatkowe pliki do pobrania, kopię zapasową etc.. Można być przekonanym, że dodanie adresów do takich zasobów do robots.txt lub, jeśli ktoś nieco lepiej wie, jak działają roboty indeksujące, dodanie tagu "noindex" do strony wystarczy, by nikt tam nie zajrzał. Niestety, w rzeczywistości atakujący mając do dyspozycji narzędzia skanujące stronę i słowniki i tak mają szansę znaleźć dany adres URL.

Żebny rozwiązać lab od PortSwiggera nie potrzeba aż tak zaawansowanej i nieco czasochłonnej analizy. Wystarczy, że zajrzymy do pliku robots.txt. Kiedy to zrobimy, to znajdziemy tam taką zawartość:

User-agent: *
Disallow: /administrator-panel

To wygląda już nieźle. Mamy jak na tacy podany adres, który chyba ktoś chciał przed nami ukryć... Zobaczmy więc, co się pod nim kryje.

Krok 2: zaglądamy pod adres /administrator-panel

Kiedy zajrzymy pod adres losowy-adres-uruchomionego-laba.web-security-academy.net/administrator-panel naszym oczom ukazuje się bardzo ciekawa strona...

Panel administracyjny w labie Portswigger

I pozamiatane. Możemy usunąć użytkownika o imieniu Carlos - i tym samym rozwiązać lab.

Robots.txt - przykładowe znaleziska

Jeszcze jakiś czas temu spotykałam się z dodawaniem paneli logowania w robots.txt po to, by smętnie nie wisiały w wynikach wyszukiwania. Jednak w robots.txt może się pojawić o wiele więcej informacji, które można wykorzystać.

Przykładowo wtyczka Yoast SEO dodaje do robots.txt blok: "START YOAST BLOCK" na początku i "END YOAST BLOCK" na końcu. Jeśli więc pojawi się jakaś podatność w tej wtyczce, to atakujący ma już pierwszą potrzebną informację - wie, że na stronie jest zainstalowana ta wtyczka.

Oczywiście, takie tagi pozwalają określić, który fragment kodu pochodzi z danej wtyczki, a który mógł zostać dodany przez inną wtyczkę / samodzielnie przez użytkownika. Jest to jednak informacja, która może zostać wykorzystana w innych kontekstach i warto o tym pamiętać.