
W tym artykule rozwiążemy 25. zadanie z strony .
Informacje organizacyjneSpecjalnie dla tych, którzy chcą poznawać coś nowego i rozwijać się w dowolnej dziedzinie bezpieczeństwa informacyjnego i komputerowego, będę pisać i mówić o następujących kategoriach:
- PWN;
- kryptografia (Crypto);
- technologie sieciowe (Network);
- odwracanie (Reverse Engineering);
- steganografia (Stegano);
- szukanie i eksploatacja WYPADKÓW WEB.
Dodatkowo podzielę się swoim doświadczeniem w dziedzinie kryminalistyki komputerowej, analizie złośliwego oprogramowania i oprogramowania, atakach na sieci bezprzewodowe i lokalne sieci komputerowe, przeprowadzaniu testów penetracyjnych i pisaniu exploitów.
Abyście mogli poznawać nowe artykuły, oprogramowanie i inne informacje, stworzyłem i w dziedzinie ITE CB. Również Wasze osobiste prośby, pytania, sugestie i zalecenia .
Wszystkie informacje przedstawione są wyłącznie w celach edukacyjnych. Autor tego dokumentu nie ponosi żadnej odpowiedzialności za jakiekolwiek szkody wyrządzone komukolwiek w wyniku wykorzystania wiedzy i metod uzyskanych w wyniku studiowania tego dokumentu.
Rozwiązanie zadania otp
Kontynuujemy drugą część. Poinformuję, że jest trudniejsze od pierwszej, ale tym razem nie dostarczono kodu źródłowego programu. Nie zapominajcie o dyskusji tutaj(https://t.me/RalfHackerPublicChat) i tutaj (https://t.me/RalfHackerChannel). Zaczynajmy.
Klikamy na ikonę oznaczoną otp. Otrzymujemy adres i port do połączenia.

Łączymy się i rozglądamy po serwerze.

Flaga, której nie możemy odczytać, program i jego kod źródłowy. Zobaczmy kod źródłowy.

Rozdzielamy go. Program przyjmuje jako argument hasło.

Następnie w zmiennej otp przechowywane są losowe 16 bajtów.

W folderze tmp tworzony jest plik o losowej nazwie (pierwsze 8 bajtów otp) i zapisuje się w nim losowe 8 bajtów (drugie 8 bajtów otp).

Z jakiegoś powodu odczytywana jest wartość z utworzonego pliku i porównywana z wprowadzonym hasłem.

Tutaj pojawia się luka. Polega ona na pośrednim zapisywaniu generowanej liczby w pliku. Możemy ograniczyć rozmiar pliku, na przykład do 0, wtedy podczas zapisu i odczytu hasła będzie porównywane 0. Można to zrobić w ten sposób.
# ulimit -f 0 ![]()
Teraz uruchomimy program.
![]()
Otrzymujemy błąd. Nie ma problemu, możemy go obsłużyć za pomocą Pythona.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')" ![]()
Zdobywamy flagę i łatwe 100 punktów. Kontynuujemy: w następnym artykule omówimy Web. Możesz dołączyć do nas w .
Źródło: habr.com
