Wprowadzenie
Rozwiązałem challange “Editor” który jest w kategorii Web. Więcej informacji o tym CTFie można znaleźć tutaj
Editor
Wszedłem na stronę, która znajdowała się w opisie challange’u i wyświetlił mi się tekst “Forbidden”
Skonfigurowałem serwer webowy lokalnie, pobierając załącznik, a następnie przechodząc do backendu i wpisując python server.py
wszedłem na stronę, którą zhostowałem lokalnie (i ponownie Forbidden)
sprawdziłem source code tej strony
i dodałem następujący fragment kodu do <head>
<meta http-equiv="refresh" content="0;url=http://chals.swampctf.com:47821/flag.txt">
Po tym pojawiła się flaga:
swampCTF{c55_qu3r135_n07_j5}
Dlaczego to działa?
- Wstawiłem meta tag do HTML:
<meta http-equiv="refresh" content="X;url=Y">
który mówi przeglądarce, by przekierowała stronę,content="0"
oznacza natychmiastowe przekierowanie (0 sekund delay’u),url=http://chals.swampctf.com:47821/flag.txt
wskazuje lokalizację przekierowania. W tym przypadku jest to również miejsce gdzie znajduje się flaga.
- Gdy strona renderuje HTML:
- Przeglądarka myśli, że ładuje zwykłą stronę,
- meta refresh zmusza przeglądarkę do zrobienia redirecta, czyli do przejścia w lokalizację flagi.
- Obejście restrykcji serwera Flask:
- Flask sprawdza header
Referer
, by zablokować bezpośredni dostęp do plików, - Ponieważ jednak meta refresh pochodzi z dozwolonego źródła (mojej lokalnie hostowanej witryny), serwer traktuje je jako prawidłowe żądanie,
- Przeglądarka podąża za redirectem i wyświetla flagę.
- Flask sprawdza header