你能解释一下这个SQL注入吗?

Pen*_*uel 8 sql security sql-injection

我工作的网站最近试图被以下SQL注入脚本攻击

boys' and 3=8 union 
select 1, 
concat(0x232425,ifnull(`table_name`,0x30),char(9),ifnull(`table_rows`,0x30), char(9),0x252423),
3,4,5,6,7,8,9 

from `information_schema`.`tables` 

where table_schema=0x62646B3032 limit 44,1 -- And '8'='8
Run Code Online (Sandbox Code Playgroud)

这个注入返回了mysql表名.这是由该网站上的错误报告系统报告的,我们设法修复了该部分但是我无法理解上述注入意味着什么?

有谁能解释一下?

努伊勒

bre*_*dan 6

他们使用mysql服务器中的Information Schema视图中的select:

http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

他们使用一些聪明的黑客来解决简单的SQL注入预防技术.


eto*_*bot 4

据此MySQL concat( )

返回连接参数所产生的字符串。可能有一个或多个参数。如果所有参数都是非二进制字符串,则结果也是非二进制字符串。如果参数包含任何二进制字符串,则结果为二进制字符串。数字参数转换为其等效的二进制字符串形式

因此 0x232425 被转换为 #$%,它只是添加到 table_name 字段的开头和结尾。也许只是为了让他们以后更容易使用正则表达式提取表名称。

稍后 char(9) 相当于一个制表符,如您在此处看到的看到的那样,只是为了更好地格式化输出。

3,4,5,6,7,8,9 就在那里,以便这些列与他们正在执行 Union 的男孩表相匹配。