Как найти php backdoor на сайте? После поиска зловреда на сайте заказчика решил систематизировать свои знания по этому вопросу.
Самый короткий пример позволяющий исполнить произвольный php код удаленно:
1 |
eval($_REQUEST['phpshell']); |
1. Поискать на сайте "опасные" функции:
а) eval() — исполняем php код
б) passthru(), exec() и им подобные — испололняем команду ОС
в) fopen(), chmod(), touch(), … — функции для работы с файловой системой
Для того чтобы искать, понадобится шелл доступ и некоторые знания *nix комманд. Пример, как найти в текущей директории рекурсивно все *.php файлы содержащие функцию eval()
1 |
find ./ -name "*.php" -print | xargs grep "eval(" |
Пример, как найти последние измененные файлы за неделю:
1 |
find ./ -mtime -7 -name "*.php" -prune -print |
find — великолепная утилита для поиска в никсах, но синтаксис сложно запомнить, для ленивых есть отличный онлайн find помощник .
2. Проверить .htaccess файлы на наличие чего нибудь подозрительного. Например можно засунуть php код в *.html так
1 2 |
RewriteEngine on RewriteRule ^(.*)\.html $1\.php |
Или даже в css и jpg, чтоб никто не догадался!
1 |
AddHandler application/x-httpd-php .php .css .jpg |
3. Анализируем логи. Если известно примерное время, после которого замечен бэкдор, то можно поискать подозрительное в логах. Хотя на сайте с высокой посещаемостью это будет нелегко.
Пример:
1 2 |
"GET /path/footer.inc.php?act=edit&file=<span style="background-color:#ffff00;">/home/account/public_html/.htaccess</span> HTTP/1.1" 200 4795 "http://website/path/footer.inc.php?act=filemanager" "Mozilla/5.0..." |
Многие наивно думают, что не используя самописные скрипты — застрахованы от зловредов. Это не так. Шелл-код нередко встречается и в CMS и форумах. Обычно этим грешат нулленые версии. А иногда и в плагинах.
Ну и наконец полезные ссылки по теме:
Бэкдоры: PhpRemoteView , r57shell
NeoPI скрипт на Питоне для поиска "опасного" кода
Статья на securitylab.ru
Свежие комментарии