如果我有一个在 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
。