有没有办法通过 SQL 注入攻击查看 MySQL 数据库是不是已被访问?
Posted
技术标签:
【中文标题】有没有办法通过 SQL 注入攻击查看 MySQL 数据库是不是已被访问?【英文标题】:Is there a way to see if MySQL database has been accessed through SQL Injection attack?有没有办法通过 SQL 注入攻击查看 MySQL 数据库是否已被访问? 【发布时间】:2017-11-05 11:10:53 【问题描述】:我最近发现我的网站有一个页面存在 SQL 注入漏洞。经过测试,它很容易使用像sqlmap
这样的渗透测试工具来利用。我如何确定站点数据库是否已被 SQL 注入攻击访问,可能利用了这个漏洞?服务器正在运行Apache/2.4.18
和mysql Ver 14.14 Distrib 5.7.16
。
【问题讨论】:
最明显的方法是检查 Apache 的访问日志。这些最常见于/var/log/apache2
。
【参考方案1】:
不,没有真正确定的方法来检测 SQL 注入攻击。
一些近似检测的方法依赖于保留应用程序运行的已知合法 SQL 查询的“白名单”。然后,如果查询日志包含任何未知内容,则可能是它们来自非法来源的线索。否则它们可能已由 DBA 在查询工具中运行。
还要求您记录每个 SQL 查询,并准备好已知良好查询的白名单。
正如@alexn 上面评论的那样,您可以查看您的 Apache 日志(如果您认为 SQL 注入直接来自 http 请求,并非所有 SQL 注入漏洞都如此)。为此,您将在日志中搜索所有可能利用您在代码中发现的漏洞的 http 请求,然后使用该搜索结果,过滤掉所有看起来有合法请求的请求(例如 @ 987654321@ 不错,但?id=123 OR 1=1
很可疑)。
还有其他产品会监控查询流量,并在 SQL 查询发生时尝试猜测是合法查询还是可疑查询,但这些产品容易出现误报和误报。
【讨论】:
感谢您的描述性回答!我已经启用了所有查询的日志记录,所以我可以(希望)通过它。有没有办法将这些查询映射到它们来自的 IP 地址,以便我可以将这些 IP 列入黑名单? 查询日志有提交查询的客户端的IP,但是MySQL的“客户端”是运行你的应用程序的主机,而不是用户的主机。用户的 IP 在 Apache 日志中。通常很难将 MySQL 日志与 Apache 日志关联起来,除非您的请求流量非常少,以至于您每秒只有一个或更少的请求。【参考方案2】:如果没有正确的日志记录,就无法检查。 为了降低风险,我建议更改密码并告诉您的用户更改密码。
【讨论】:
以上是关于有没有办法通过 SQL 注入攻击查看 MySQL 数据库是不是已被访问?的主要内容,如果未能解决你的问题,请参考以下文章