SQL注入-数据类型

1.数据型注入点

许多网页链接有类似的结构 http;//ox.com/users,php?id=1基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点id类型为数字,在大多数的网页中,诸如查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,重询出数据库中对应的信息,返回给前台。这一类的SQL语句原型大概为select* from表名 where id=1若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破: select* from表名where id=1 and 1=1

我们在之前文章中说过,我们要对一个网站进行注入前,要先判断是否有SQL注入的注入点,如果没有注入点,那确实就注入不了。这边仍然是以less-2为例,在页面中输入正常指令后,再在最后加了个1=1,发现页面正常显示,这就说明这是一个可执行的注入点。

http://localhost/sqli-labs-master/Less-2/?id=1%20and%201=1

接下来我们通过代码来进行巩固一下,我们找到第二关的代码,如下图,在第一个标号出输入id的值,然后放在第二个标记处进行执行。从这边就可以看出and 1=1这个验证是否有注入点的语句,只适用于数字型注入点的检测。

2.字符型注入点

网页链接有类似的结构http;//xxx.com/users.php?name=admin这种形式,其注入点name类型为字符类型,所以叫字符型注入点。这一类的SQL语句原型大概为select * from 表名 where name= ' admin'值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破: select * from表名 where name= ' admin' and 1=1'我们需要将这些烦人的引号给处理掉。

因为less-2是数字型注入,less-1是字符型注入,所以这边以第一关进行讲解。我们在输入下列指令,按照数字型的注入来说页面应该会进行报错,但这边页面却正常显示,我们接下来还是看一下第一关的源码。

http://localhost/sqli-labs-master/Less-1/?id=1 and 1=2

接下里我们对比一下数字型和字符型来个执行语句的区别,发现$id两边多了'',所以我们加入and 1=2的语句是$sql="SELECT *FROM users WHERE id='1 and 1=2'LIMIT 0,1";这里的' '就是里面的语句是一个整体,在mysql中有一个机制,如果是一个字符型的输入,会自动过滤到第一个数字后的内容,例如id='1dsadas',那么只会找1。

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; //数字型

$sql="SELECT *FROM users WHERE id='$id'LIMIT 0,1"; //字符型

那现在1=1,1=2在字符型中会被过滤掉,那是不是网页中就没有注入点了呢,其实不然,我们需要用到'  '来将语句进行闭合,$sql="SELECT *FROM users WHERE id='1' LIMIT 0,1";还是这个语句,我们在1后面加个'成为$sql="SELECT *FROM users WHERE id='1'' LIMIT 0,1";也就是执行下列语句,发现页面报错。

http://localhost/sqli-labs-master/Less-1/?id=1'

页面报语法错误,换个角度,也就是说,系统把我们传递的'当作语句进入执行了,那我们就知道了,这是一个字符型的注入点。字符型的注入点,经常是传递用户名,username等,如下图。

3.搜索型注入点

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有"keyword=关键字"有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的SQL语句,其原形大致为: select * from表名 where字段 like '%关键字%'若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破: select * from 表名where字段like '%测试%’ and"%1%'='%1%"、

我们先用自己的mysql来熟悉一下语句,先输入账号密码进入MySQL,然后依次输入下列指令。

show databases;
use security;
show tables;
select *from users;

如果我们想要查询表中数据带d的,那应该输入下列语句,此时发现数据不管是D还是d都显示出来了,所以这里的%代表的是通配符,也就是任何数据。

 select *from users where username like'%D%';

这里实战使用pikachu进行举例,假设我们输入个y,放在数据库执行应该是select *from user where like '%y%';,那我们如果输入y%' or 1=1#,那传到数据库中执行的语句就变成了select *from user where like '%y%' or 1=1#%'; #为注释符,也就是#后面的内容都被注释掉了,不会执行,那就只剩下select *from user where like '%y%' or 1=1;因为1=1总是正确的,所以这个语句总为真就会查询所有的数据。

y%' or 1=1#

4.xx型注入点

其他型:也就是由于SQL语句拼接方式不同,在SQL中的实际语句为:,其本质为(xx') or 1=1# )

常见的闭合符号: ' " % (  {
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值