“fastcgi_split_path_info”ని ఉపయోగించి URL యొక్క భాగాలను వేరు చేయడం మరియు PATH_INFO ఎన్విరాన్మెంట్ వేరియబుల్ని నిర్వచించడం ద్వారా PHP-FPMకి ఫార్వార్డింగ్ చేసే nginx కాన్ఫిగరేషన్లలో దాడి సాధ్యమవుతుంది, అయితే మొదట “try_files $fastcgi_script_ని ఉపయోగించి ఫైల్ ఉనికిని తనిఖీ చేయకుండా. ఆదేశం లేదా “if (!-f $) document_root$fastcgi_script_name)". సమస్య కూడా
స్థానం ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
మీరు ఈ పేజీలలో పంపిణీ కిట్లలో సమస్య పరిష్కారాన్ని ట్రాక్ చేయవచ్చు:
try_files $fastcgi_script_name =404;
ఫైల్లో పాయింటర్లను మార్చడంలో లోపం కారణంగా సమస్య ఏర్పడింది
fastcgi_split_path_info డైరెక్టివ్ న్యూలైన్-సెన్సిటివ్ రెగ్యులర్ ఎక్స్ప్రెషన్ని ఉపయోగించి స్క్రిప్ట్ పాత్ను విభజించడాన్ని నిర్దేశిస్తే (ఉదాహరణకు, చాలా ఉదాహరణలు "^(.+?\.php)(/.*)$"ని ఉపయోగించమని సూచిస్తున్నాయి), అప్పుడు దాడి చేసే వ్యక్తి ఒక ఖాళీ విలువ PATH_INFO పర్యావరణ వేరియబుల్కు వ్రాయబడింది. ఈ సందర్భంలో, అమలుతో పాటు
ఒక నిర్దిష్ట మార్గంలో ఫార్మాట్ చేయబడిన URLని అభ్యర్థించడం ద్వారా, దాడి చేసే వ్యక్తి “_fcgi_data_seg” నిర్మాణం యొక్క మొదటి బైట్కి path_info పాయింటర్ని మార్చవచ్చు మరియు ఈ బైట్కి సున్నా రాయడం వలన “char* pos” కదలికకు దారి తీస్తుంది. గతంలో ఉన్న మెమరీ ప్రాంతానికి పాయింటర్. FCGI_PUTENV అని పిలువబడే తదుపరిది ఈ మెమరీలోని డేటాను దాడి చేసేవారు నియంత్రించగలిగే విలువతో ఓవర్రైట్ చేస్తుంది. పేర్కొన్న మెమరీ ఇతర FastCGI వేరియబుల్స్ యొక్క విలువలను కూడా నిల్వ చేస్తుంది మరియు వాటి డేటాను వ్రాయడం ద్వారా, దాడి చేసే వ్యక్తి కల్పిత PHP_VALUE వేరియబుల్ని సృష్టించి, వాటి కోడ్ అమలును సాధించగలడు.
మూలం: opennet.ru