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是:十六的形式。