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

时间:2010-08-10 03:57:19

标签: sql sql-injection security

我最近尝试过的网站被以下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

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

任何人都可以解释这个吗?

努伊勒

3 个答案:

答案 0 :(得分:6)

他们正在使用mysql服务器中的信息架构视图中的选择:

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

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

答案 1 :(得分:4)

根据this MySQL concat()

  

返回由此产生的字符串   连接参数。可能有   一个或多个参数。我摔倒   参数是非二进制字符串,   result是一个非二进制字符串。如果   参数包括任何二进制字符串   结果是二进制字符串。一个   数字参数转换为它   等效的二进制字符串形式

所以0x232425转换​​为#$%,它只是添加到table_name字段的开头和结尾。也许只是为了让他们更容易在以后使用Regex取出Table名称。

稍后在char(9)上相当于一个标签,你可以看到here并且只是为了格式化输出更好。

3,4,5,6,7,8,9就在那里,以便列匹配他们正在执行联盟的男孩表。

答案 2 :(得分:3)

此注入返回了mysql表名。

你的意思是你的网站在给出这个输入时显示了表名,或者从mysql客户端运行时查询返回了吗?如果它显示在您的网站上,则攻击者可以注入更多有害查询。检查您的数据。