W tym artykule rozwiążemy 25. zadanie z witryny
informacje organizacyjneSpecjalnie dla tych, którzy chcą nauczyć się czegoś nowego i rozwijać w dowolnym obszarze informacji i bezpieczeństwa komputerowego, napiszę i opowiem o następujących kategoriach:
- PWN;
- kryptografia (krypto);
- technologie sieciowe (Sieć);
- rewers (Inżynieria Odwrotna);
- steganografia (Stegano);
- wyszukiwanie i wykorzystywanie luk w zabezpieczeniach sieci WWW.
Oprócz tego podzielę się swoim doświadczeniem w kryminalistyce komputerowej, analizie złośliwego oprogramowania i oprogramowania sprzętowego, atakach na sieci bezprzewodowe i sieci lokalne, przeprowadzaniu pentestów i pisaniu exploitów.
Stworzyłem, abyś mógł dowiedzieć się o nowych artykułach, oprogramowaniu i innych informacjach
Wszystkie informacje są podane wyłącznie w celach edukacyjnych. Autor tego dokumentu nie ponosi odpowiedzialności za jakiekolwiek szkody wyrządzone komukolwiek w wyniku wykorzystania wiedzy i metod uzyskanych w wyniku studiowania tego dokumentu.
Rozwiązanie zadania otp
Kontynuujmy drugą część. Od razu powiem, że jest bardziej skomplikowany niż pierwszy, ale tym razem nie podają kodu źródłowego programu. Nie zapomnij o dyskusjach tutaj (https://t.me/RalfHackerPublicChat) i tutaj (https://t.me/RalfHackerChannel). Zaczynajmy.
Kliknij na ikonkę z podpisem otp. Podajemy adres i port, z którym możemy się połączyć.
Łączymy się i rozglądamy po serwerze.
Flaga, której nie możemy odczytać, program i jego kod źródłowy. Spójrzmy na źródło.
Uporządkujmy to. Program jako argument przyjmuje hasło.
Następnie losowe 16 bajtów jest przechowywanych w zmiennej otp.
W folderze tmp tworzony jest plik o losowej nazwie (pierwsze 8 bajtów to otp) i zapisywanych jest do niego losowe 8 bajtów (drugie 8 bajtów to otp).
Z jakiegoś powodu wartość utworzonego pliku jest odczytywana i porównywana z wprowadzonym hasłem.
Tutaj pojawia się luka. Polega na pośrednim zapisaniu wygenerowanego numeru do pliku. Możemy ograniczyć rozmiar pliku np. do 0, wtedy przy zapisie i czytaniu z hasłem porównywane będzie 0. Można to zrobić w ten sposób.
# ulimit -f 0
Teraz uruchommy program.
Otrzymujemy błąd. Nie ma to znaczenia, można to przetworzyć przy użyciu tego samego Pythona.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')"
Dostajemy flagę i łatwe 100 punktów. I kontynuujemy: w następnym artykule dotkniemy sieci. Możesz do nas dołączyć o godz
Źródło: www.habr.com