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

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

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

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

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

Категории

Все категории
Loading categories
PIL-CVE-2017-8291-study — Учебная лаборатория, демонстрирующая CVE-2017-8291 (PIL/GhostScript RCE) через загрузку специально созданного EPS-файла с расширением PNG, включая настройку Docker и выполнение PoC. | Kitploit
Инструменты/GitHubGitHub/shun1403/pil-cve-2017-8291-study
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеЛаборатории и Практика
GitHubshun1403/pil-cve-2017-8291-study

PIL-CVE-2017-8291-study

Учебная лаборатория, демонстрирующая CVE-2017-8291 (PIL/GhostScript RCE) через загрузку специально созданного EPS-файла с расширением PNG, включая настройку Docker и выполнение PoC.

Репозиторий
51 год назадЕщё не проверено

Популярное

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

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

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

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

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

PIL-CVE-2017-8291

  • Белый шляпник Школа 3-го выпуска, 13-я группа, Пэк Сын Хун (@shun1403) https://github.com/shun1403/PIL-CVE-2017-8291.git
  • Окружение: Ubuntu Linux

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

  • sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin — обновление до V2
  • При ошибках выполнения переустановите docker с помощью следующих команд:
  • sudo apt remove docker docker-engine docker.io containerd runc -y
  • sudo apt update
  • sudo apt install -y ca-certificates curl gnupg lsb-release
  • sudo mkdir -p /etc/apt/keyrings
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • sudo apt update
  • sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • docker compose version
  • Если версия отображается успешно, всё в порядке.
  • git clone

    git clone https://github.com/vulhub/vulhub.git

    • После клонирования перейдите в директорию уязвимости, с которой будете работать

    • Здесь: /vulhub/python/PIL-CVE-2017-8291

    • Следуйте yml-файлу для выполнения практики

    • docker compose up -d : команда для создания контейнера и запуска в фоновом режиме

    • После этого откройте localhost:8000/ и увидите веб-страницу, позволяющую загружать файлы image

    • Загрузите подделанный файл poc.png, находящийся в той же директории

    • После загрузки должно появиться следующее:

    • image

    • В нормальном режиме после загрузки png-файла выводятся ширина и высота изображения. Однако сервер определяет тип изображения по заголовку файла, игнорируя расширение. Таким образом, EPS-файл, содержащий выполняемые команды, можно переименовать в расширение .png и загрузить.

    • Используя это, при загрузке poc.png можно выполнить команду 'touch /tmp/aaaaa', а заменив команду в POC-файле на реверс-шелл, можно получить доступ к оболочке.

    • После загрузки файла подключитесь к docker, перейдите в /tmp и убедитесь, что по команде был создан файл aaaaa.

    root@kitploit:~
    command = ["gs",
                "-q",                         # тихий режим (минимум вывода)
                "-g%dx%d" % size,             # размер выходного изображения (в пикселях)
                "-r%fx%f" % res,              # разрешение входного изображения (DPI)
                "-dBATCH",                    # автоматическое завершение после выполнения
                "-dNOPAUSE",                  # непрерывное выполнение без пауз между страницами
                "-dSAFER",                    # включение безопасного режима
                "-sDEVICE=ppmraw",             # установка устройства вывода в ppmraw
                "-sOutputFile=%s" % outfile,   # путь к выходному файлу
                "-c", "%d %d translate" % (-bbox[0], -bbox[1]), 
                                                # коррекция начала координат изображения (сдвиг)
                "-f", infile,                  # входной файл
              ]
    

    Код проверки установки GhostScript опущен

    root@kitploit:~
    try:
        with open(os.devnull, 'w+b') as devnull:
            subprocess.check_call(command, stdin=devnull, stdout=devnull)
        im = Image.open(outfile)
    

    Результат

    image

    Заключение

    Данная уязвимость произошла в библиотеке Python Imaging Library (PIL) и была проанализирована как CVE-2017-8291. Уязвимость вызвана тем, что PIL определяет тип изображения на основе заголовка файла, а не его расширения. Это позволяет загрузить файл с расширением .png, который на самом деле является EPS-файлом, содержащим произвольные команды. При вызове GhostScript на стороне сервера эти команды выполняются.

    В ходе проекта была загружена подделанная poc.png, что привело к созданию файла /tmp/aaaaa внутри сервера. Таким образом, подтверждено, что уязвимость может привести к выполнению команд (RCE, Remote Code Execution). Кроме того, данная уязвимость может быть расширена до более продвинутых атак, таких как реверс-шелл, путём злоупотребления изначально предназначенной функцией обработки изображений.

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