有没有办法通过 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.18mysql 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 数据库是不是已被访问?的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入-基础

通过表单输入的 SQL 注入攻击

避免mysql注入应该避免都有哪些特殊字符

C# 和 MySQL .NET 连接器 - 有啥方法可以防止泛型类中的 SQL 注入攻击?

网站如何防止sql注入攻击的解决办法

我的电脑360报mysql漏洞被攻击怎么办