Zadanie "Bezpieczny blog" z CTFa pwning2017 - prośba o wskazówkę

0

Cześć
Od niedawna próbuję zdobyć flagę z zadania "Bezpieczny blog" z CTFa pwning2017, jednak nie potrafię dojść do rozwiązania. Jestem początkujący, zacząłem od niżej punktowanych zadań z tego CTFa i z pwning2016. Dużo czasu zajmowało mi znalezienie flagi nawet w łatwiejszych zadaniach, jednak teraz natrafiłem na ścianę której nie potrafię przejść.
Treść zadania:

Niedawno postanowiłem ochronić swój blog przed rozmaitymi cyberzagrożeniami poprzez wdrożenie na nim Content-Security-Policy. Nigdy więcej cyberataków!
Mój blog: https://blog.pwning2017.p4.team/

Rzeczy które znalazłem:

  • Na stronie można dodawać komentarze, w których możemy zamieścić kod javascript. Jednak nie wiem jak to wykorzystać - myślałem że może działa jakiś bot udający użytkownika, dla którego by został wykonany kod ale niestety to nie to (próbowałem poprzez wrzucenie tagu img z src ustawionym na adres do mojego vpsa, gdzie sprawdzałem logi access z apache'a)
  • Każdy unikalny użytkownik dostaje identyfikator instancji. Pierwsze co przyszło mi do głowy, to że w jakiś sposób muszę wykraść identyfikator instancji użytkownika, który w komentarzach będzie miał flagę. Flaga httponly w cookie, oraz to że nie widzę żeby ktoś próbował odczytać wrzucony przeze mnie obrazek spowodował że odrzuciłem ten pomysł, bo nie wiedziałem jak mógłbym to osiągnąć.
  • Formularz ma ukryte pole "post_id" które zawsze ma ustawioną wartość 1. Próbowałem zmieniać ten post_id na różne wartości, wtedy komentarz nie dodaje się w mojej instancji, ale też nie wiem czy dodaje się gdzieś indziej - próbowałem użyć też tego tagu img z adresem mojego serwera, ale w logach dalej milczy.
  • Czytałem w jaki sposób działa Content-Security-Policy, ale nie widzę przykładowo w HTTP response żeby był dołożony nagłówek Content-Security-Policy
  • Gdy ja odświeżę stronę, a w komentarzach wcześniej dodałem skrypt js albo obrazek, to js się wykonuje oraz jest w logach na moim serwerze informacja że ktoś próbował odczytać obrazek który nie istnieje

Czy mógłby ktoś mnie nakierować, dać jakąś wskazówkę? Dzięki wielkie!

1

To zadanie nie jest związane (wbrew opisowi) z client-side security/CSP/javascriptem.

1

Faktycznie ten opis zadania jest tu trochę mylący i sugeruje zupełnie inną klasę podatności. Niemniej jednak musiałeś mieć dużo (nie)szczęścia jeśli dodałeś tam komentarze z JSem i jednocześnie nie triggerowałeś faktycznej podatności w tym zadaniu. Pofuzzuj trochę inputy różnymi danymi ;)

Niemniej nawet wiedząc jaka jest podatność to zadanie to spora zgadywanka, więc tak osobiście to polecałbym je olać i zająć się jakimś sensowniejszym.

0

Dzięki za podpowiedzi, teraz już rozumiem że podatnością w tym zadaniu jest sposób, w jaki przetwarzane są dane z formularza (dodanie znaku cudzysłowu zwraca error 500). Trochę się z tym pobawię, ale chyba skorzystam z Twojej wskazówki @Shalom i przeskoczę do bardziej sensownego zadania.

0

@Shalom: Mógłbyś mi dać małą wskazówkę jak rozwiązać to zadanie? Oto do czego doszedłem:

  1. Parametr post_id musi być liczbą, w przeciwnym wypadku dostajemy error 500 (zapewne jest bezpośrednie sprawdzenie czy dany ciąg znaków zawiera tylko liczby, przed wysłaniem zapytania do bazy danych).
  2. Parametry who i text są podatne na blind SQL injection poprzez dodanie cudzysłowu, tylko nie rozumiem użytej składni SQL. Jeśli dla przykładu wyślemy
text=foo" #

to nie ma błędu, a powinien być, bo przecież składnia INSERT to 'INSERT INTO table VALUES (v1, v2, .., vn)', więc poprzez dodanie komentarza ignorujemy wszystko co jest dalej, łącznie z zamykającym nawiasem, co powinno spowodować błąd składniowy.

0

Mógłbyś mi dać małą wskazówkę jak rozwiązać to zadanie?

Spróbuj injectować w oba pola jednocześnie, żeby "wyciągnąć" format w jakim idą tam dane.

bo przecież składnia INSERT to 'INSERT INTO table VALUES (v1, v2, .., vn)'

Niekoniecznie ;) Poczytaj sobie https://dev.mysql.com/doc/refman/8.0/en/insert.html i zobaczysz, że to nie jest jedyna dostępna składnia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1