1-7SELECT与常用注入逻辑应用

1.语法报错逻辑

语法报错逻辑主要是有两部分,第一部分是注入字符的报错,第二部分是数据类型的报错,这里我们讲解的是注入字符的报错,注入字符的报错有什么用,又是如何进行的,接下来我们用操作来进行演示

我们输入mysql hxf,连接数据库

在这里插入图片描述

show tables;,我们看一下当前的表

在这里插入图片描述

这个时候,我们创一个我们实验要用到的表,users2表,create table users2(uid int(11),uname varchar(32),password varchar(200),mobile bigint(20),isadmin tinyint(4),blog varchar(100),gold int(11),email varchar(20));

在这里插入图片描述

然后在添一条数据进去,insert into users2(uid,uname) select 10011,‘hxf’;

在这里插入图片描述

这下可以开始,实验的演示了

我们查询一下users2表中uname等于hxf的数据,select * from users2 where uname=‘hxf’;

在这里插入图片描述

这条数据是uid等于10011,uname等于hxf

我们打开另外一个窗口,我们查询这个用户,输入uname=hxf

在这里插入图片描述

我们把这个变量输出看一下,echo $uname

在这里插入图片描述

在程序中,我们连接hxf,把它查找出来,mysql hxf -e “select * from users2 where uname=’$uname’”

在这里插入图片描述

这种情况,在正常的查询逻辑中,是没有问题的,也是正常的传入参数,那么我们在注入中要如何应用呢

注入中,比如正常的传参,登录的时候,需要用户名和密码,这个时候,网页是显示正常的,假如,我们在$uname中,在加一个单引号,

mysql hxf -e "select * from users2 where uname='$uname''"

在这里插入图片描述

那么这个时候就报语法错误,语法错误告诉我们,这个uname传入的参数中多了一个单引号,这个语法错误并没有暴露出什么有用的东西,但是对于我们盲注是有帮助的

首先,我们输入的数据是正常的,显示的网页自然也是正常的,我们输入单引号的目的,是测试程序对单引号的处理是怎么样的,测试的结果,如果没有很好的屏蔽掉错误信息,这说明,对我们的攻击是很有帮助的,同时对信息的屏蔽也是有帮助的,因为程序没有很好的处理这些错误信息

第二个,我们很好的测试了,到底程序是如何处理字符串,数字的,因此单引号的作用是非常的强大

这里报错的结果只会让网页显示的不正常,如果程序没有对传入的错误参数进行很好的处理,那么注入就能够充分的利用

我们概括一下,这个单引号的报错

$sql=SELECT * FROM users where uname=.$uname;

正常传参:$uname=‘Michael’

结果: SELECT * FROM users where uname=‘Michael’;

注入测试传参:$uname=‘Michael’’

单引号只是测试对盲注是否有效果,只是测试程序对单引号是否过滤,是否可攻击等

网页报错,如果我们发现网页没有很好的进行处理,那我们就可以进一步,进行猜测其它的内容,猜测其它的内容重要的是猜测处理字段数

2.猜处理字段数逻辑

我们先插入3条数据,

insert into users2(uid,uname) select 10009,‘Sumant’;

insert into users2(uid,uname) select 10008,‘Saniya’;

insert into users2(uid,uname) select 10007,‘Anneka’;

在这里插入图片描述

插入成功,我们可以开始实战了

这个时候,我们查询users2的uid、uname字段内容,select uid,uname from users2;

在这里插入图片描述

这个时候,我们看到有4条记录

那么我们注入者,怎么发现,处理字段有多少个,或者表中到底有多少个子段呢

我们还是在命令行中,模拟我们所需要的字段,我们可以通过猜测处理了多少个字段,以便判断那个字段在那里显示

我们看一下这条语句在这里查询,mysql hxf -e “select * from users2”

在这里插入图片描述

我们看到它返回了,这条表的所有记录

在网页当中,它实际上是这样查询的,但我们看不到,我们也无法知道,它到底处理了多少字段,也不知道这个表到底有多少字段

我们可以使用另外一个办法,在url中,我们传入另外一个参数,这个参数,我们可能是在url当中拼接而成的,我们使用order by 1,mysql hxf -e “select * from users2 order by 1”

在这里插入图片描述

我们发现,网页显示是正常的,order by 2,mysql hxf -e “select * from users2 order by 2”

在这里插入图片描述

网页显示也是正常的,如果3、4、5、6、7也正常,那我们就一直输,当然这样有点盲目,对于注入者来说,相对比较累,注入攻击,也比较困难,但是当我们输入到9的时候,mysql hxf -e “select * from users2 order by 9”

在这里插入图片描述

我们发现,网页要么报错,要么是处理的数据出来不行,我们甚至可以设置程序对这种情况是如何处理的

如果网页报错,或者显示不正常,那么就说明一个问题,可以注入,到9的时候,我们就知道报错,那么就说明这个表要么只有8个字段,要么程序当中处理的,只有8个字段数,我们可以验证一下,show create table users2;

在这里插入图片描述

我们看到这里确实只有8个字段,这就是我们为什么能够猜测出8个字段

我们可以概括一下

$sql=SELECT * FROM users where uname=.$uname;

正常传参:$uname=‘Michael’

结果: SELECT * FROM users where uname=‘Michael’;

这个是正常的,这样可以查出Michael记录所有字段是什么

注入测试传参:$uname=‘Michael’ order by 1

直至网页报错

但如果所有字段,我们不知道,我们可以猜测,

我们猜测的注入攻击是order by 1,这是关键的内容,1这是按照第一个字段进行排序,我们会测试1、2、3、4、5、6、7、8、9,一直到网页报错,或者是网页显示的不正常,那么就来验证,到底处理了多少个字段,或者这个表有多少字段,也或者,程序对这种逻辑是如何处理的

这是猜测字段数和逻辑的应用

3.空集逻辑

我们在前几篇文章都有遇见过全集逻辑,除了全集的逻辑,还有一个叫空集的逻辑

我们来演示一下空集逻辑是怎么回事,我们查询一下uname为hxf的用户,select * from users2 where uname=‘hxf’;

在这里插入图片描述

我们把它查找出来

在应用程序中,我们把uname定义为hxf,uname=hxf

在这里插入图片描述

在查找的时候,where uname,传入的当然是变量hxf,那么我们在mysql后面,加个参数-vvv,目的是让它输出更详细的信息,mysql -vvv hxf -e “select * from users2 where uname=’$uname’”

在这里插入图片描述

返回的就是uname为hxf的记录,这种情况uname传入的是正常的,查询也是正常的,这是没有问题的

我们希望测试一下网页是否可以注入,注入的时候是如何处理的,我们还有空集的逻辑

空集,我们希望没有查出任何内容,因此,我们对这个uname下内容,在这个uname当中,我们先输入单引号,单引号当然是为了配合这个变量uname前面的单引号进行闭合,or的目的,我们输入的任何数据只要为假,那么结果可能为假,所以,我们输入类似1=2,1=2肯定是假,或者是0=9,等等,这些永远不相等的东西,那么这种情况呢,要写成这样’0’=‘9,9前面要有单引号,和后面uanme的单引号配合进行闭合,uname="’ or ‘0’='9"

在这里插入图片描述

我们在echo $uname变量是怎么样的

在这里插入图片描述

然后我们再把mysql -vvv hxf -e "select * from users2 where uname=’$uname’"执行一下

在这里插入图片描述

我们看到传入的uname为空,或者0=9,我们刚刚传入变量替换的结果是’’ or ‘0’=‘9’,那么结果就是空的,这种结构就叫空集逻辑

我们概括一下

$sql=SELECT * FROM users where uname=.$uname;

正常传参:$uname=‘Michael’

正常的传参是没有问题的

结果: SELECT * FROM users where uname=‘Michael’;

这样查询的结果只有一条记录,

注入测试传参:$uname=‘’or ‘1’=‘2

结果: SELECT * FROM users where uname=‘’or ‘1’=‘2’;

类似这种情况,结果是空,那就是没有。

那如果报错,那处理的结果是按照程序的逻辑走的,也或者其它的情况,那对我们注入攻击的判断也有很大的帮助

网页不报错,但显示页面没有内容等

4.全集逻辑

全集逻辑,我们已经遇见过了

$sql=SELECT * FROM users where uname=.$uname;

正常传参:$uname=‘Michael’

结果: SELECT * FROM users where uname=‘Michael’;

注入测试传参:$uname=‘’or ‘1’=‘1

传入的时候,就是1=1的情况,这是我们最常用的逻辑

结果: SELECT * FROM users where uname=‘’or ‘1’=‘1’;

网页不报错,但显示页面正常或者页数更多等

5.小结

1.SELECT与注入逻辑应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值