У цій статті вирішимо 25-те завдання із сайту
Організаційна інформаціяСпеціально для тих, хто хоче дізнаватися щось нове і розвиватися в будь-якій із сфер інформаційної та комп'ютерної безпеки, я писатиму і розповідатиму про наступні категорії:
- PWN;
- криптографія (Crypto);
- мережеві технології (Network);
- реверс (Reverse Engineering);
- стеганографія (Stegano);
- пошук та експлуатація WEB-уразливостей.
До того ж я поділюся своїм досвідом у комп'ютерній криміналістиці, аналізі малварі та прошивок, атаках на бездротові мережі та локальні обчислювальні мережі, проведенні пентестів та написанні експлоїтів.
Щоб ви могли дізнаватися про нові статті, програмне забезпечення та іншу інформацію, я створив
Вся інформація представлена виключно з освітньою метою. Автор цього документа не несе жодної відповідальності за будь-які збитки, заподіяні будь-кому в результаті використання знань і методів, отриманих в результаті вивчення цього документа.
Рішення завдання otp
Продовжуємо другий розділ. Скажу відразу, що складніше першого, але цього разу надають вихідний код програми. Не забуваємо про обговорення тут (https://t.me/RalfHackerPublicChat) та тут (https://t.me/RalfHackerChannel). Почнемо.
Натискаємо на значок з підписом otp. Нам дають адресу та порт для підключення.
Підключаємось та оглядаємося на сервері.
Прапор, який ми не можемо прочитати, програма та її вихідний код. Давайте подивимося вихідник.
Робимо його. Програма приймає як аргумент пароль.
Далі змінну otp зберігається рандомні 16 байт.
У папці tmp створюється файл із випадковим ім'ям (перші 8 байт otp) і записується рандомні 8 байт (другі 8 байт otp).
Для чогось і створеного файлу зчитується значення і порівнюється з введеним паролем.
Тут і є вразливість. Вона полягає в проміжному збереженні генерованого числа файлу. Ми можемо обмежити розмір файлу, наприклад до 0, тоді за запису і зчитуванні з паролем порівнюватиметься 0. Зробити це можна так.
# ulimit -f 0
Тепер запустимо програму.
Отримуємо помилку. Не біда, її можна обробити за допомогою того ж пітона.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')"
Отримуємо прапор та свої легкі 100 очок. І ми продовжуємо: у наступній статті торкнемося Web. Ви можете приєднатися до нас у
Джерело: habr.com