Wprowadzenie

Rozwiązałem challange “Editor” który jest w kategorii Web. Więcej informacji o tym CTFie można znaleźć tutaj

Editor

Editor

Wszedłem na stronę, która znajdowała się w opisie challange’u i wyświetlił mi się tekst “Forbidden”

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)

forbidden

sprawdziłem source code tej strony

source code

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:

flag

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ę.