使用 UNION 语句进行 SQL 注入的目的是什么?[关闭]

What is the purpose of SQL Injection using UNION statement? [closed]

提问人:MGibbons 提问时间:2/3/2023 最后编辑:BarmarMGibbons 更新时间:2/3/2023 访问量:235

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

10个月前关闭。

我的PHP应用程序通过在用户名的输入中添加UNION语句而受到攻击。具体来说,在我检查输入有效用户名的地方,sql被修改为

select username from user where username = '-8546' UNION ALL SELECT CONCAT(0x71626a7071,0x6d6557557a76694b6c4d,0x71786b7a71)#

这已经持续了好几天,用户名有各种变体,有多个连续的 attepts

这导致我收到 sql 错误“使用的 SELECT 语句具有不同数量的列”的通知。

因为我被告知了这个错误,所以我认为没有造成任何损害,但黑客想要达到什么目的?

我添加了代码来检测黑客的 IP 地址,将其邮寄给我并将其添加到我在 webmin 中的拒绝地址列表中。$_SERVER['REMOTE_ADDR']

php mysql sql 注入

评论

0赞 Daniel A. White 2/3/2023
它试图获取比原始查询应该返回的信息更多的信息
4赞 Sammitch 2/3/2023
您应该不那么关心他们选择注入或禁止他们的 IP,而应该关心修复他们正在利用的漏洞。您可以随心所欲地玩 IP 地址打地鼠游戏,但您仍然允许新的攻击者得逞。
3赞 Stu 2/3/2023
您应该立即修复此问题以使用参数化查询。
0赞 Barmar 2/3/2023
它基本上是返回他们在 中指定的用户名,而不是输入的用户名。CONCAT()

答:

2赞 Bill Karwin 2/3/2023 #1

黑客想要达到什么目的?

黑客只是想找出他们可以利用哪些网络请求。他们尝试使用负数作为用户名,这几乎肯定会得到不匹配。然后,他们使用可以检查的文本值联合一行。也就是说,如果他们能让你的网站响应用户“qbjpqmeWUzviKlMqxkzq”的存在,那么他们就知道他们已经成功地利用了SQL注入漏洞。

一旦他们确定了这一点,他们就可以利用该漏洞来读取其他更敏感的信息。

我同意上面的评论,您不应该只是阻止攻击者的 IP 地址。他们只需使用 VPN 伪装成不同的 IP 地址,然后再次开始攻击。

你应该做的是修复你的代码。您的代码中显然存在一些 SQL 注入缺陷,例如直接在 SQL 字符串中使用请求变量。

您应该使用查询参数,而不是将不安全的变量复制到 SQL 中。查询参数确保将内容视为字符串文字,而不是像 这样的 SQL 语法,因此无论其 IP 地址如何,任何尝试的攻击都不会成功。UNION...

这是一个明确且早已为人所知的解决方案的问题。您没有理由在具有 SQL 注入漏洞的 Internet 上运行代码。

1赞 nvogel 2/3/2023 #2

UNION 在 SQL 注入中的重要性在于,它可以允许攻击者访问其他表并返回额外信息,而不会破坏合法查询,尤其是当相关查询仅返回一行并且客户端代码没有注意到额外行的存在时。您看到一个探测器,该探测器试图确定哪些此类查询将起作用。

如果您的网站确实允许任意查询执行,那么您非常容易受到攻击,您应该尽快修复该漏洞。不要因为您收到这些错误的通知而感到任何保证。很可能有大量成功注入的查询正在泄漏信息或造成其他损害,而没有报告任何错误。

评论

0赞 MGibbons 2/3/2023
这些尝试已经持续了好几天,使用相同的 UNION 子查询对用户输入进行了更改,通常每次大约有 20 个请求。每组尝试的时间戳都是相同的,因此我认为它们是在循环中提交的。当我通过 get 请求模仿查询时,它不会返回结果,所以我猜它们是不安全的。尽管如此,我还是认真对待了这些建议,并希望实施 phpdelusions.net/mysqli/simple 的解决方案