Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2017-8291 — CVE-2017-8291(GhostButt) 취약점을 Python PIL/Pillow EPS 이미지 처리를 통해 악용하는 Docker 기반 실습 환경. 취약한 웹 애플리케이션과 개념 증명 익스플로잇을 포함합니다. | Kitploit
도구/GitHubGitHub/shun1403/cve-2017-8291
Vulnerability AnalysisExploitationWeb Application ExploitationCTFLearning & EducationLabs & Practice
GitHubshun1403/cve-2017-8291

CVE-2017-8291

CVE-2017-8291(GhostButt) 취약점을 Python PIL/Pillow EPS 이미지 처리를 통해 악용하는 Docker 기반 실습 환경. 취약한 웹 애플리케이션과 개념 증명 익스플로잇을 포함합니다.

저장소 보기
1년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Python PIL/Pillow 원격 명령 실행 (GhostButt / CVE-2017-8291)

中文版本(Chinese version)

Python PIL(Pillow)은 Python에서 널리 사용되는 이미지 처리 라이브러리입니다. 다양한 이미지 형식을 지원하며 강력한 이미지 조작 기능을 제공합니다.

Python 이미지 처리 모듈 PIL(Pillow)은 EPS 이미지를 처리하기 위해 내부적으로 GhostScript를 호출하기 때문에 GhostButt 취약점(CVE-2017-8291)의 영향을 받습니다. 이 취약점으로 인해 공격자는 대상 시스템에서 임의의 명령을 실행할 수 있습니다.

PIL은 이미지를 처리할 때 파일 헤더(매직 바이트)를 기반으로 이미지 유형을 결정합니다. 만약 EPS 파일(헤더가 %!PS로 시작)로 식별되면, 해당 파일을 PIL/EpsImagePlugin.py로 전달하여 처리합니다.

이 모듈에서 PIL은 시스템의 GhostScript 명령(gs)을 호출하여 이미지 파일을 처리합니다:

root@kitploit:~
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 플래그(safe mode)가 설정되어 있지만, GhostScript의 샌드박스 우회 취약점(GhostButt CVE-2017-8291)으로 인해 이 안전 메커니즘을 우회하여 임의의 명령을 실행할 수 있습니다.

이 글을 작성하는 시점에서 최신 공식 GhostScript 버전 9.21도 여전히 이 취약점의 영향을 받습니다. 따라서 운영 체제에 GhostScript가 설치되어 있는 한 PIL은 명령 실행에 취약합니다.

참고 자료:

  • Exploiting Python PIL Module Command Execution Vulnerability
  • CVE-2017-8291 Details
  • GhostScript Security Advisory

환경 설정

다음 명령을 실행하여 CVE-2017-8291 취약점에 취약한 웹 애플리케이션을 시작합니다:

root@kitploit:~
docker compose up -d

시작한 후 http://your-ip:8000/에 접속하여 업로드 페이지에 접근합니다.

취약점 악용

이 애플리케이션의 정상적인 기능은 사용자가 PNG 파일을 업로드할 수 있도록 합니다. 백엔드는 PIL을 사용하여 이미지를 로드하고 크기를 출력합니다. 그러나 실행 가능한 EPS 파일의 확장자를 PNG로 변경하여 업로드함으로써 이를 악용할 수 있습니다. 백엔드는 확장자가 아닌 파일 헤더를 기준으로 이미지 유형을 결정하므로 파일 확장자 검사를 우회할 수 있습니다.

예를 들어, poc.png를 업로드하면 서버에서 touch /tmp/aaaaa 명령이 실행됩니다. POC의 명령을 리버스 셸 명령으로 수정하면 서버에 대한 셸 액세스 권한을 얻을 수 있습니다:

취약점 악용

도구 다운로드