提问人:MGibbons 提问时间:2/3/2023 最后编辑:BarmarMGibbons 更新时间:2/3/2023 访问量:235
使用 UNION 语句进行 SQL 注入的目的是什么?[关闭]
What is the purpose of SQL Injection using UNION statement? [closed]
问:
我的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']
答:
黑客想要达到什么目的?
黑客只是想找出他们可以利用哪些网络请求。他们尝试使用负数作为用户名,这几乎肯定会得到不匹配。然后,他们使用可以检查的文本值联合一行。也就是说,如果他们能让你的网站响应用户“qbjpqmeWUzviKlMqxkzq”的存在,那么他们就知道他们已经成功地利用了SQL注入漏洞。
一旦他们确定了这一点,他们就可以利用该漏洞来读取其他更敏感的信息。
我同意上面的评论,您不应该只是阻止攻击者的 IP 地址。他们只需使用 VPN 伪装成不同的 IP 地址,然后再次开始攻击。
你应该做的是修复你的代码。您的代码中显然存在一些 SQL 注入缺陷,例如直接在 SQL 字符串中使用请求变量。
您应该使用查询参数,而不是将不安全的变量复制到 SQL 中。查询参数确保将内容视为字符串文字,而不是像 这样的 SQL 语法,因此无论其 IP 地址如何,任何尝试的攻击都不会成功。UNION...
这是一个明确且早已为人所知的解决方案的问题。您没有理由在具有 SQL 注入漏洞的 Internet 上运行代码。
UNION 在 SQL 注入中的重要性在于,它可以允许攻击者访问其他表并返回额外信息,而不会破坏合法查询,尤其是当相关查询仅返回一行并且客户端代码没有注意到额外行的存在时。您看到一个探测器,该探测器试图确定哪些此类查询将起作用。
如果您的网站确实允许任意查询执行,那么您非常容易受到攻击,您应该尽快修复该漏洞。不要因为您收到这些错误的通知而感到任何保证。很可能有大量成功注入的查询正在泄漏信息或造成其他损害,而没有报告任何错误。
评论
上一个:原生sql查询-SQL注入攻击
下一个:将安全漏洞告知潜在客户?
评论
CONCAT()