Назад | Перейти на главную страницу

Как проверить журналы веб-сервера на наличие SQL-инъекции?

Если у меня есть PHP-сайт, размещенный на Apache, и кто-то взломает его с помощью SQL-инъекции, есть ли способ узнать, какой именно сценарий вызвал это, просмотрев журналы моего веб-сервера?
Или другим способом?

Я использовал эту командную строку Linux для определения возможных инъекций SQL:

egrep -i '\bUNION\b|\bSELECT\b|\bCHAR\b' $access_log

Вы также можете добавить другие ключевые термины, но это те, которые я находил в своих журналах.

Чтобы сгенерировать список оскорбительных IP-адресов, сделайте это немного поинтереснее:

egrep -i '\bUNION\b|\bSELECT\b|\bCHAR\b' $access_log | sed -n 's/\([0-9\.]\+\).*/\1/p' | sort | uniq -c

Что подсчитывает IP-адреса-нарушители по количеству экземпляров:

    335 160.153.153.31
   1197 175.138.67.67
    508 76.72.165.79
    208 92.60.66.184
    111 95.143.64.185

Если в журналах вашего веб-сервера регистрируются параметры запроса, выполните поиск известного SQL (например, SELECT) через логи.

Если они не регистрируют параметры запроса, вы вряд ли что-нибудь найдете при поиске в журналах, скорее вам придется искать шаблоны - например, повторяющийся URL-адрес, который обычно не повторяется.

Я использую тот же подход, что и Кен, но предпочитаю awk.

$ access_logs='/var/log/httpd/*access*log*'
$ grep -E -hi '\bUNION\b|\bSELECT\b|\bCHAR\b' $access_logs | awk '{print $1}' | sort | uniq -c | sort -nr | head

Чтобы получить список 10 лучших IP. Это также будет искать любые старые журналы доступа, которые были сжаты с помощью logrotate.