MySQL数据库使用concat函数执行的SQL查询

MySQL数据库使用concat函数执行的SQL查询
SQL注入语句有时使用替换查询技术,即让原始查询语句不发现结果错误,并让自己构造的查询语句执行,并将执行结果显示为原来的查询语句,并显示查询结果。

例如:原始查询语句是

复制代码代码如下所示:

选择用户名,电子邮件,内容从哪里test_table user_id = UID;
UID是用户输入。正常显示结果会出现用户名,用户的邮箱,用户留言的内容。但如果uid过滤不严格,我们可以构造如下的SQL语句来获取任何数据表信息。

复制代码代码如下所示:

uid = 1联盟选择的用户名,密码,从test_talbe哪里user_id =管理员身份证内容;
实际执行是

复制代码代码如下所示:

选择用户名,电子邮件的内容,从test_table工会选择user_id = 1的用户名,密码,从test_talbe哪里user_id = ID管理内容;
在普通用户的电子邮件显示,则为显示管理员密码。

但事情往往不是那么简单。首先,我们需要找出漏洞。其次,构建这样的语句时,我们需要考虑类型的每一个领域,所以它是不恰当的显示int或samllint类型字段varchar。最后一件事是说。

如果SQL语句中只有一个或两个字段,我们想知道很多事情。一个或两个领域的太少,能够满足我们的需要。我们可以使用concat函数

Concat函数最初是用来选择concat(我,是的,'ql ');执行的结果is'mysql。即连接。我们可以用它来为我们服务

复制代码代码如下所示:

uid = 1联盟选择用户名,concat(密码,性别,地址,电话),内容从test_talbe。
这个语句实际上查询了六个字段,但是当它显示时,它将密码、性别、地址、电话和其他字段结合起来显示电子邮件应该显示在哪里。

更好的方法:分离器在中间分离:

复制代码代码如下所示:

uid = 1联盟选择用户名,concat(密码,0×3A、性别、0×3A,地址,0×3A,电话);
其中0×3a是:十六的形式。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部