Skip to content

Latest commit

 

History

History
32 lines (19 loc) · 2.32 KB

exploit_format.md

File metadata and controls

32 lines (19 loc) · 2.32 KB

Формат эксплоита

Эксплоит может быть скриптом на любом языке или бинарным исполняемым файлом.

Пример эксплоита

При написании эксплоита:

  1. Принимайте хост (IP или домен) атакуемой команды в первом аргументе командной строки (sys.argv[1]).

  2. Выводите флаги в stdout или stderr. Кроме флагов, туда можно выводить и любую другую информацию.

    Флаги извлекаются из stdout и stderr с помощью регулярного выражения (формата флага), заданного в файле config.py на сервере фермы (например, [A-Z0-9]{31}= на RuCTF(E)).

  3. Указывайте интерпретатор, если эксплоит является скриптом. В случае Linux и macOS добавьте в начало файла shebang:

    #!/usr/bin/env python3

    Не пишите #!/usr/bin/python3 (например, на macOS интерпретатор расположен в другом месте).

    В случае Windows клиент фермы попытается сам определить интерпретатор по расширению файла (см. таблицу SCRIPT_EXTENSIONS). Если ему не удастся сделать это правильно, укажите интерпретатор явно через опцию --interpreter.

  4. После вывода флагов добавляйте перевод строки и выполняйте flush(stdout):

    print(html_with_flags, flush=True)

    Без этого часть флагов может быть потеряна. А именно, в случае, когда клиент фермы «убивает» долго работающие процессы, флаги останутся в буфере stdout эксплоита и не будут прочитаны клиентом фермы.