Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
PIL-CVE-2017-8291-study | Kitploit
ツール/GitHubGitHub/shun1403/pil-cve-2017-8291-study
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用学習と教育ラボと実践
GitHubshun1403/pil-cve-2017-8291-study

PIL-CVE-2017-8291-study

リポジトリを見る
1年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

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
  • バージョンが確認できれば、正常に表示されれば OK

git clone

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

  • clone 後、実施したい脆弱性のパスへ移動

  • ここでは /vulhub/python/PIL-CVE-2017-8291

  • 次のような yml ファイルを参考に演習を実施

  • docker compose up -d : コンテナを作成し、バックグラウンドで実行するコマンド

  • その後 localhost:8000/ にアクセスし、ファイルアップロード可能な Web ページを確認 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)につながることを再現した。また、この脆弱性は、本来意図された画像処理機能を悪用して、リバースシェルなどの高度な攻撃へ拡張される可能性を内包していることを確認できる。

ツールをダウンロード