这是我应该关注的网络攻击吗 - 尝试为表单变量输入代码

信息安全 Web应用程序 攻击 sql注入
2021-08-24 13:48:00

我创建了一个在 Web 服务器上运行的简单 CGI 脚本,用户可以使用用户名和密码登录。用户名和密码通过 html 表单输入,表单 POST 将数据发送到 Web 服务器。

我记录了登录,这就是我发现反复发生的事情 - 大约 10 次尝试

对于用户名,他们正在输入:

') 声明@q varchar(8000) 选择@q = 0x57414954464F522044454C4159202730303A30303A313527 exec(@q) --

和密码:

1

很多细微的变化。这是另一个尝试:

用户名:John 密码:1 declare @q varchar(8000) select @q = 0x57414954464F522044454C4159202730303A30303A313527 exec(@q) --

这是某种 SQL 命令吗?存储过程?你认为他们想要达到什么目的?

我应该采取哪些措施来防止这种事情发生?

3个回答

这里这里似乎有一个很好的答案

1 declare @q varchar(8000) select @q = 0x57414954464F522044454C4159202730303A30303A313527 exec(@q) --

如果我们简单化上述内容,我们可以了解正在发生的事情:

declare @q varchar(8000)
select @q = 0x57414954464F522044454C4159202730303A30303A313527
exec(@q)
--
  • 第 1 行:将q变量声明为具有 8000 个字符的 varchar。
  • 第 2 行:将编码字符串分配给q变量。
  • 第 3 行:执行q变量。
  • 第 4 行:注释掉注入查询的其余部分。

根据20x57414954464F522044454C4159202730303A30303A313527字符串是WAITFOR DELAY '00:00:15'十六进制编码的。一种定时盲 SQL 注入攻击技术,它告诉服务器在响应之前等待 15 秒。一旦负载被注入,如果服务器需要 15 秒来响应,那么它很可能容易受到 SQL 注入的攻击。这可以通过增加DELAY时间来进一步检查。

我绝不是专家,但这似乎是一次尝试的 SQL 注入。他们希望他们以某种方式输入的内容由您的服务器执行,从而导致变量 content @q 如果成功则运行。我猜这是一个以某种方式编码的 sql 命令,即“0x5741 ....”字符串。但我想,这里有人可以比我更清楚地说明这一点。

阅读 SQL Injections 并检查您的代码是否足以免疫。如果您的代码看到一定数量的此类尝试,我想您也可以实现阻塞机制(一段时间内的源 IP)。

欢迎来到互联网。在 Internet 上运行公共 Web 服务器意味着您将受到攻击。你真的没有办法阻止它。可以做的是尝试阻止攻击成功。这涉及安全编码实践、使您的软件保持最新状态,并可能引入一些安全控制。

正如其他人所提到的,这种特殊的攻击是一种盲目的 SQL 注入尝试。自己试试;如果您的服务器在响应之前等待 15 秒,那么您的 CGI 脚本很容易受到攻击。那里有很多关于防止 SQL 注入的资源,所以我不会在这里详细介绍。

我肯定会建议为您的网站使用一些安全控制。您可以尝试诸如mod_security 之类的预防性控制或网络日志审核程序之类的检测性控制。我只运行一个带有一个静态页面的业余爱好网站,所以我有一个爱好者的解决方案:我的 Web 日志的自定义fail2ban过滤器可以检测到一些常见的攻击,然后限制与该 IP 的连接。对于一个需要保护真实资产的站点,我真的不建议这样做,但它说明了一点,您可以自己进行简单的安全控制,以增强其他人正在使用的经过验证的解决方案。