Hyökkäys on mahdollinen nginx-kokoonpanoissa, joissa edelleenlähetys PHP-FPM:ään suoritetaan erottamalla URL-osoitteen osat käyttämällä "fastcgi_split_path_info" ja määrittelemällä PATH_INFO-ympäristömuuttuja, mutta tarkistamatta ensin tiedoston olemassaoloa komennolla "try_files $fastcgi_script_name". direktiivi tai "if (!-f $) document_root$fastcgi_script_name)". Ongelma on myös
sijainti ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Voit seurata ongelman ratkaisua jakelusarjoissa näillä sivuilla:
try_files $fastcgi_script_name =404;
Ongelma johtuu virheestä käsiteltäessä osoittimia tiedostossa
Jos fastcgi_split_path_info-direktiivi määrittää komentosarjapolun jakamisen rivinvaihdolle herkän säännöllisen lausekkeen avulla (esimerkiksi monet esimerkit ehdottavat "^(.+?\.php)(/.*)$" käyttöä, hyökkääjä voi varmistaa, että tyhjä arvo kirjoitetaan PATH_INFO-ympäristömuuttujaan. Tässä tapauksessa eteenpäin suoritusta
Pyydämällä tietyllä tavalla muotoiltua URL-osoitetta hyökkääjä voi siirtää polkuinfo-osoittimen "_fcgi_data_seg" -rakenteen ensimmäiseen tavuun, ja nollan kirjoittaminen tähän tavuun johtaa "char* pos" -merkin liikkumiseen. osoitin aiemmin löytyneelle muistialueelle. Seuraavaksi kutsuttu FCGI_PUTENV korvaa tämän muistin tiedot arvolla, jota hyökkääjä voi hallita. Määritetty muisti tallentaa myös muiden FastCGI-muuttujien arvot, ja kirjoittamalla niiden tiedot hyökkääjä voi luoda kuvitteellisen PHP_VALUE-muuttujan ja suorittaa koodinsa.
Lähde: opennet.ru