如何检查 Web 服务器日志中是否存在 SQL 注入?

如何检查 Web 服务器日志中是否存在 SQL 注入?

如果我有一个在 Apache 上托管的 PHP 网站,有人使用 SQL 注入攻击了该网站,我可以通过查看我的 Web 服务器日志来准确找出导致此问题的脚本吗?
或者使用其他方法?

答案1

如果您的 Web 服务器日志记录了查询参数,则请SELECT通过日志搜索已知 SQL(例如)。

如果他们没有记录查询参数,那么您不太可能通过搜索日志找到任何内容,而是必须寻找模式 - 例如通常不会重复的重复 URL。

答案2

我一直在使用这个 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

答案3

我使用与 Ken 类似的方法,但我更喜欢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 列表。这还将搜索使用 gzip 压缩的任何旧访问日志logrotate

相关内容