Шукаємо php шелли на хостингу (php web shell)

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

Отже, умови задачі: у нас на серваке є шелл і потрібно його знайти. У нас є 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"

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"