Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
PIL-CVE-2017-8291 — Образовательный PoC для CVE-2017-8291 (GhostButt), демонстрирующий удалённое выполнение команд посредством обработки EPS-изображений в Python PIL/Pillow с обходом песочницы GhostScript. | Kitploit
Инструменты/GitHubGitHub/daniilorchikov/pil-cve-2017-8291
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеЭксплуатация Бинарных ФайловЛаборатории и Практика
GitHubdaniilorchikov/pil-cve-2017-8291

PIL-CVE-2017-8291

Образовательный PoC для CVE-2017-8291 (GhostButt), демонстрирующий удалённое выполнение команд посредством обработки EPS-изображений в Python PIL/Pillow с обходом песочницы GhostScript.

Репозиторий
1710 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Удаленное выполнение команд в Python PIL/Pillow (GhostButt / CVE-2017-8291)

Китайская версия

Python PIL (Pillow) — популярная библиотека обработки изображений для Python. Она поддерживает различные форматы изображений и предоставляет мощные возможности для работы с изображениями.

Модуль обработки изображений PIL (Pillow) подвержен уязвимости GhostButt (CVE-2017-8291), поскольку он внутренне вызывает GhostScript для обработки EPS-изображений. Эта уязвимость позволяет злоумышленникам выполнять произвольные команды в целевой системе.

Когда PIL обрабатывает изображение, он определяет тип изображения по заголовку файла (магическим байтам). Если он идентифицирует EPS-файл (заголовок начинается с %!PS), он передает файл в PIL/EpsImagePlugin.py для обработки.

В этом модуле PIL вызывает системную команду GhostScript (gs) для обработки файла изображения:

command = ["gs",
            "-q",                         # quiet mode
            "-g%dx%d" % size,             # set output geometry (pixels)
            "-r%fx%f" % res,              # set input DPI (dots per inch)
            "-dBATCH",                    # exit after processing
            "-dNOPAUSE",                  # don't pause between pages,
            "-dSAFER",                    # safe mode
            "-sDEVICE=ppmraw",            # ppm driver
            "-sOutputFile=%s" % outfile,  # output file
            "-c", "%d %d translate" % (-bbox[0], -bbox[1]),
                                            # adjust for image origin
            "-f", infile,                 # input file
            ]

# Code to check if GhostScript is installed is omitted
try:
    with open(os.devnull, 'w+b') as devnull:
        subprocess.check_call(command, stdin=devnull, stdout=devnull)
    im = Image.open(outfile)

Хотя установлен флаг -dSAFER (безопасный режим), уязвимость обхода песочницы GhostScript (GhostButt CVE-2017-8291) позволяет обойти этот механизм защиты, что приводит к выполнению произвольных команд.

На момент написания даже последняя официальная версия GhostScript 9.21 по-прежнему подвержена этой уязвимости. Поэтому, пока GhostScript установлен в операционной системе, PIL уязвима к выполнению команд.

Ссылки:

  • Эксплуатация уязвимости выполнения команд в модуле Python PIL
  • Детали CVE-2017-8291
  • Уведомление о безопасности GhostScript

Настройка окружения

Выполните следующую команду, чтобы запустить веб-приложение, уязвимое к CVE-2017-8291:

docker compose up -d

После запуска перейдите по адресу http://your-ip:8000/, чтобы открыть страницу загрузки.

Эксплуатация уязвимости

Обычный функционал этого приложения позволяет пользователям загружать PNG-файлы. Бэкенд использует PIL для загрузки изображения и вывода его размеров. Однако мы можем воспользоваться этим, изменив расширение исполняемого EPS-файла на PNG и загрузив его. Поскольку бэкенд определяет тип изображения по заголовку файла, а не по расширению, проверку расширения можно обойти.

Например, мы можем загрузить poc.png, который выполнит команду touch /tmp/aaaaa на сервере. Изменив команду в POC на команду reverse shell, мы получим доступ к оболочке сервера:

Эксплуатация уязвимости

Скачать инструмент