Если у меня есть 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
.