
शैक्षिक प्रयोगशाला जो CVE-2017-8291 (PIL/GhostScript RCE) को PNG एक्सटेंशन के साथ क्राफ्टेड EPS फ़ाइल अपलोड के माध्यम से प्रदर्शित करती है, जिसमें Docker सेटअप और PoC निष्पादन शामिल है।
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin के माध्यम से V2 में अपग्रेड करेंsudo apt remove docker docker-engine docker.io containerd runc -ysudo apt updatesudo apt install -y ca-certificates curl gnupg lsb-releasesudo mkdir -p /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgecho "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/nullsudo apt updatesudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugindocker compose versiongit clone https://github.com/vulhub/vulhub.git
क्लोन करने के बाद, जिस कमज़ोरी का अभ्यास करना है उसके पथ में प्रवेश करें
यहाँ /vulhub/python/PIL-CVE-2017-8291
निम्न yml फ़ाइल का संदर्भ लेते हुए अभ्यास करें
docker compose up -d : कंटेनर बनाने और बैकग्राउंड में चलाने का कमांड
उसके बाद localhost:8000/ पर जाकर फ़ाइल अपलोड करने योग्य वेब पेज की पुष्टि करें

उसी पथ में स्थित संशोधित poc.png अपलोड करें
अपलोड करने पर निम्न प्रकार का परिणाम देखा जा सकता है

सामान्य कार्यक्षमता में, png फ़ाइल अपलोड करने के बाद छवि की चौड़ाई और ऊँचाई प्रदर्शित होती है। हालाँकि, चूँकि बैकएंड फ़ाइल हेडर के आधार पर छवि प्रकार का वर्गीकरण करता है, एक्सटेंशन को अनदेखा करते हुए, निष्पादन योग्य कमांड वाली EPS फ़ाइल को PNG एक्सटेंशन में बदलकर अपलोड किया जा सकता है
इसका उपयोग करके, poc.png अपलोड करते समय 'tocuh /tmp/aaaaa' कमांड निष्पादित करना संभव हो जाएगा, और POC फ़ाइल के भीतर के कमांड को रिवर्स शेल कमांड में बदलने पर शेल प्राप्त किया जा सकता है
उस फ़ाइल को अपलोड करने के बाद, docker में प्रवेश कर /tmp पर जाकर देखने पर कमांड द्वारा aaaaa फ़ाइल निर्मित होने की पुष्टि की जा सकती है
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, # 입력 파일 지정
]
try:
with open(os.devnull, 'w+b') as devnull:
subprocess.check_call(command, stdin=devnull, stdout=devnull)
im = Image.open(outfile)

यह कमज़ोरी Python Imaging Library (PIL) में उत्पन्न हुई है और CVE-2017-8291 को लक्षित करती है। यह कमज़ोरी PIL की उस विशेषता के कारण उत्पन्न होती है जिसमें यह फ़ाइल एक्सटेंशन के आधार पर नहीं, बल्कि फ़ाइल हेडर के आधार पर छवि प्रकार का निर्धारण करती है। इसके माध्यम से, वास्तव में EPS प्रारूप की फ़ाइल होने के बावजूद, केवल एक्सटेंशन को PNG में बदलकर अपलोड करने पर, सर्वर पक्ष पर GhostScript के कॉल होते समय फ़ाइल में डाले गए मनमाने कमांड निष्पादित हो सकते हैं — इस समस्या की पुष्टि की जा सकी।
परियोजना के दौरान, संशोधित poc.png फ़ाइल अपलोड करके सर्वर के अंदर /tmp/aaaaa फ़ाइल के निर्माण की पुष्टि करके यह दोहराया गया कि यह कमज़ोरी वास्तव में कमांड निष्पादन (RCE, Remote Code Execution) का रूप ले सकती है। साथ ही, यह भी देखा जा सकता है कि यह कमज़ोरी मूल रूप से इच्छित छवि प्रसंस्करण कार्यक्षमता का दुरुपयोग करके रिवर्स शेल जैसे उन्नत हमलों तक विस्तारित होने की संभावना रखती है।