提问人:James Paterson 提问时间:7/15/2022 更新时间:7/17/2022 访问量:151
查找此尝试的 SQL 注入查询的解释
Looking for an explanation of this attempted SQL injection query
问:
查看我的日志,我发现以下查询字符串是尝试执行 SQL 注入的尝试,可能来自自动化工具:
(select*from(select+sleep(10)union/**/select+1)a)
据我所知,它正在尝试基于时间的攻击,以查看我数据库中是否有任何表以“a”开头 - 睡眠函数仅在联合查询匹配时才会运行?但我对攻击的其他部分有点困惑:
- 为什么查询的各个部分之间有加号?
- 为什么查询字符串中有注释?
会对任何答案感兴趣 - 我相当确定我的网站没有受到损害,因为我没有扫描该查询的进一步活动,也无法让它自己执行,所以只是想知道我的直觉是否正确。干杯!
答:
我不认为这是在尝试寻找以 a 开头的表,只需在可能的递归查询上运行睡眠,如果一堆递归查询执行,这可能会导致您的数据库出现问题。
+ 号可能是尝试进行一些字符串连接......这是我的猜测
无论如何,我都会强烈考虑追溯它的来源并清理您网站上的输入,以便原始输入(潜在的 sql )不会被放入查询中。
评论
sleep(10)
我不知道这有什么意义,也不知道试图弄清楚这一点的意义何在。注射比逆向工程更容易阻止,后者对前者没有多大贡献。
+ 和 /**/ 的点可能几乎相同,它们在不使用空格的情况下分隔标记。据推测,有人认为空格会触发某种警报或阻塞。
“a”只是一个别名,可能是为了避免错误“错误:FROM 中的子查询必须具有别名”
这在库存 PostgreSQL 中不起作用,因为没有拼写的函数。他们可能以不同的 DBMS 为目标,或者可能是使用特定应用程序/框架的 PostgreSQL,该应用程序/框架会创建自己的功能。sleep
sleep
如果系统没有向最终用户返回有意义的消息,则可能会出现睡眠。如果需要 10 秒才能获得响应,那么您就知道睡眠已执行。如果它立即返回,您知道它没有执行,但不知道为什么它没有执行。
这是为了通过定时攻击来检测 SQL 注入(可能通过 HTML 参数)。插入的注释(正如其他人所提到的)旨在删除空格,同时仍然允许查询解析以试图欺骗自定义(设计不当)清理。“+”很可能是在经过 HTML 解码后被解码为空格。
如果替换空格并添加缩进,则更容易看到发生了什么:
select * <-- match any number of columns on the original query
from
(select <-- nested sub-query in the from clause
sleep(10) <-- timing attack meant to detect whether the SQL ran
union <-- not sure why the union is needed
select 1) a <-- alias the subquery to "a"
) <-- close off matching parens in injected SQL?
评论