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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PIL-CVE-2017-8291-study — CVE-2017-8291 (PIL/GhostScript RCE)를 시연하는 교육용 실습 환경으로, PNG 확장자를 가진 조작된 EPS 파일 업로드, Docker 설정 및 PoC 실행을 포함합니다. | Kitploit
도구/GitHubGitHub/shun1403/pil-cve-2017-8291-study
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationLearning & EducationLabs & Practice
GitHubshun1403/pil-cve-2017-8291-study

PIL-CVE-2017-8291-study

CVE-2017-8291 (PIL/GhostScript RCE)를 시연하는 교육용 실습 환경으로, PNG 확장자를 가진 조작된 EPS 파일 업로드, Docker 설정 및 PoC 실행을 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PIL-CVE-2017-8291

  • 화이트 햇 스쿨 3기 13반 백승훈(@shun1403) https://github.com/shun1403/PIL-CVE-2017-8291.git
  • 환경 : 우분투 리눅스

환경 구성

  • 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

  • clone 후 진행하고자 하는 취약점 경로로 진입

  • 여기선 /vulhub/python/PIL-CVE-2017-8291

  • 다음과 같은 yml 파일을 참고하여 실습 진행

  • docker compose up -d : 컨테이너를 생성하고 백그라운드에서 진행하는 명령

  • 그 후 localhost:8000/ 에 접속하여 파일 업로드 가능한 웹 페이지를 확인 image

  • 동일한 경로에 있는 조작된 poc.png 업로드 진행

  • 업로드를 진행하면 다음과 같이 뜨는 것을 확인할 수 있음

  • image

  • 정상 기능이라면 png 파일 업로드 후 이미지의 가로, 세로 길이를 출력, 하지만 백엔드는 파일 헤더를 통해 이미지 유형을 분류하기 때문에, 확장자를 무시하고 실행 가능한 명령이 포함된 EPS 파일은 PNG 확장자로 변경하여 업로드 할 수 있음

  • 이를 이용하면 poc.png 파일을 업로드할 때 'tocuh /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이 파일 확장자가 아닌 파일 헤더를 기반으로 이미지 유형을 판별하는 특성 때문에 발생하며, 이를 통해 실제로는 EPS 포맷 파일임에도 불구하고 확장자만 PNG로 변경하여 업로드 하면, 서버 측에서 GhostScript를 호출하면서 파일 내에 삽입된 임의 명령어가 실행될 수 있는 문제를 확인할 수 있었다.

프로젝트 과정에서 조작된 poc.png 파일을 업로드하여 서버 내부의 /tmp/aaaaa 파일 생성을 확인 함으로써, 취약점이 실제로 명령어 실행(RCE, Remote Code Execution)으로 이어질 수 있음을 재현하였다. 또한, 해당 ㅊ ㅟ약점은 원래 의도된 이미지 처리 기능을 악용해 리버스 쉘과 같은 고급 공격으로 확장될 수 있는 가능성을 내포하고 있는 것을 확인할 수 있다.

도구 다운로드