Часто бывает так, что сайт непонятно почему не работает так, как нам нужно. Например, если перейти с гугл поиска, то мы попадаем на чужой сайт вместо нашего. Или начинаем наблюдать жуткие тормоза в работе сайта. Самое время сделать аудит безопасности. Поиск веб шелов (вирусов на сайте) не такая уж и сложная задача, но требует времени и внимательности. Данные рецепты не являются панацеей от всех бед, а лишь вариантами решения проблемы. Можете быть открыты к эксперементам и проверке своих идей. Кроме того, данные советы будут периодически дополняться новой информацией.

Итак, условия задачи: у нас на серваке есть шелл и нужно его найти. У нас есть ssh.

Следующая команда покажет нам все php файлы модифицированные за последние 7 дней. То есть, если сайт достаточно зрелый, а шел был загружен в течении последней недели, то эта команда здорово поможет в нашем исследовании.

find . -type f -name '*.php' -mtime -7

 

Нам пригодится следующая команда:
find . -name \* | xargs -n 1 grep -Hn "default_action"
Она ищет все файлы содержащие в себе подстроку default_action

вместо default_action нам нужно подставить характерную для шела подстроку. Например, это может быть HTTP_USER_AGENT:
find . -name \* | xargs -n 1 grep -Hn "HTTP_USER_AGENT"</p>

Или другие:

array("Google", "Slurp", "MSNBot"<br />
find . -name \* | xargs -n 1 grep -Hn "array(\"Google\", \"Slurp\", \"MSNBot\""

preg_replace("
find . -name \* | xargs -n 1 grep -Hn "preg_replace(\""

default_action = "FilesMan"
find . -name \* | xargs -n 1 grep -Hn "\"FilesMan\""

eval(base64_decode
find . -name \* | xargs -n 1 grep -Hn "eval(base64_decode"

Вот еще несколько полезных комманд:
egrep -rlZ -e "eval\(gzinflate\(" /usr/home
egrep -rlZ -e "gzinflate" /usr/home
egrep -rlZ -e "eval\(str_replace" /usr/home
grep -Rl "r57shell|c99madshell|eval\|base64_decode" /home
grep -RPn "(passthru|shell_exec|system|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile) *\(" public_html/

Поиск текста «eval» во всех файлах с расширением .php с заданной директории:
find /dir/to/find/ -type f -iname "*.php" -exec grep -Him1 'eval' {} \;

Поиск «eval» среди файлов, у которых выставлены права 777
find /dir/to/find/ -perm 2 -type f -iname "*.php" -exec grep -Him1 'eval' {} \;

Простой поиск php-скриптов в заданной папке
find /dir/to/find/ -perm 2 -type f -iname "*.php"

Поиск .php файлов, созданных или измененных за последние 7 дней
find /dir/to/find/ -type f -iname "*.php" -mtime -7

Баш скрипт
#!/bin/bash
cd /var/www
grep -rl "FilesMan" *
grep -rl "auth" *
grep -rl "shell" *
grep -rl "FilesMan" *
grep -rl "Self remove" *
grep -rl "phpinfo" *
grep -rl "Exec" *
grep -rl "make dir" *
grep -rl "r57" *
exit 0

Еще один:
#!/bin/bash

grep -rl "eval(" * > log
grep -rl "system(" * > log
grep -rl "phpinfo" * > log
grep -rl "debug" * > log
grep -rl "auth" * > log
grep -rl "FilesMan" * > log
grep -rl "base64_decode" * > log
sleep 1.0
echo "l."
sleep 0.3
echo "lo.."
sleep 0.3
echo "loa..."
sleep 0.3
echo "load...."
sleep 0.3
echo "loadi....."
sleep 0.3
echo "loadin......"
sleep 0.3
echo "loading......."
sleep 0.3

echo "Scan is complete"

find . \( -name "*.php" \) -exec grep -Hn "[\t]*eval(base64_decode(.*));" {} \; -exec sed -i 's/[\t]*eval(base64_decode(.*));//g' {} \;
find . \( -name "*.php" \) -exec grep -Hn "[\t]*phpinfo(.*);" {} \; -exec sed -i 's/[\t]*phpinfo(.*);//g' {} \;
find . \( -name "*.php" \) -exec grep -Hn "[\t]*FilesMan*;" {} \; -exec sed -i 's/[\t]*FilesMan*;//g' {} \;
echo "All files have been updated,check log"

 

Похожие материалы

Добавить комментарий