首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能解释一下这个SQL注入吗?

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

Stack Overflow用户
提问于 2010-08-10 11:57:19
回答 3查看 1.8K关注 0票数 8

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

代码语言:javascript
复制
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表名。这是由该网站上的错误报告系统报告的,我们设法修复了这一部分,但是我不能理解上面的注入是什么意思?

有人能解释这个吗?

佩努埃尔

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-10 22:20:23

根据this的说法,MySQL concat()

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

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

稍后,char(9)相当于一个制表符,因为您可以看到here,它只是为了更好地格式化输出。

3,4,5,6,7,8,9就在那里,这样列就与正在执行Union的boys表相匹配。

票数 4
EN

Stack Overflow用户

发布于 2010-08-10 12:00:54

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

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

他们使用一些巧妙的技巧来阻止简单的sql注入技术。

票数 6
EN

Stack Overflow用户

发布于 2010-08-11 00:26:25

此注入返回mysql表名。

您的意思是,当您提供此输入时,您的网站会显示表名,还是当从mysql客户端运行时,查询会返回该表名?如果它显示在你的网站上,那么攻击者就有能力注入更多有害的查询。检查您的数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3445910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档