![如何检查 Web 服务器日志中是否存在 SQL 注入?](https://linux22.com/image/609796/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%A5%E5%BF%97%E4%B8%AD%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%20SQL%20%E6%B3%A8%E5%85%A5%EF%BC%9F.png)
如果我有一个在 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
。