SQL注入 (中级篇)盲注

盲注:

其实对于初学SQL注入,并不需要区分注入类型。

 

想要学好一种漏洞最重要的是理解漏洞的原理,也就是漏洞源码,

测试漏洞链接: http://45.32.81.200:8080/vul/sqli/sqli_blind_b.php

先看一下什么是盲注,当输入 kobe 后,

--------------------------------------------------------------

-------------------------------------------------------------

如上图  ,可以查询到他的相关信息

根据之前所说的字符型注入可知(之前写的博客),如果这里存在字符型注入,那么输入 kobe ' or 1=1#   

所有信息会暴露出来,如下图

-------------------------------------------------------------

-------------------------------------------------------------

但是这里输入kobe ' or 1=1# 确没有显示,难道这里没有注入的漏洞吗?

于是决定开挂,看看他的原码到底是啥

-----------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

初学盲注的人,看这段代码可能会看的云里雾里,实际上不需要看懂他,

简单的解释一下,当刚刚输入kobe ' or 1=1# 其实信息已经被后台查出来了

后台执行的语句为 select id,email from member where username='kobe ' or 1=1#'

(井号用于注释后面的引号),所以无论username输入的是啥 ,后面的1=1 都为永真

但是,为什么查询到的记录并没有显示到页面上呢???

很简单,因为看原码 有一句 

if ( $result    &&   $mysqli_num_rows($result)==1  ){

理解这句话关键是理解 $mysqli_num_rows()这个函数 ,可以百度一下,

该函数的功能:      返回结果集中行的数量

简单的说这行代码的意思是,如果后台查询到的   查询结果为非空,并且只有一行,就为真

所以我们输入 kobe ' and 1=1# 和  输入  kobe 返回的结果是一样的

于是可以用后面的and逻辑来进行判断 ,例如输入

kobe' and length(database())>8 #

再输入 kobe' and length(database())<8 #

根据返回的不同,可以判断数据库的长度是大于8,还是小于8 

常见的测试函数还有很多 例如substr函数,substr()用法   

substr("abcd",1,2)  从  第一个字母开始截取,截取2 个,结果为    ab

于是可以继续构造payload ,例如输入

kobe' and substr(database(),1,1)>'c' #

并且输入 kobe' and substr(database(),1,1)<'c' #

根据返回的不同结果,就可以判断数据库名的第一个字母是否大于c

好了,以上就是关于bool的盲注

 

关于时间盲注:

来,直接上代码

-----------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------

与bool盲注的代码类似,也是这么个逻辑,就是只要查出的信息多于一行,就不会正常输出

但是,与bool盲注不同的是,即使输入后查询正确信息,且查出为一行,输出的也是和非正常输出的一样

所以,再用之前的payload ,并不能让我们得到有用的信息了

mysql中有一个这样的函数,sleep(),该函数的作用就是休眠

既然我们不能从页面显示的信息来判断,那是否可以用时间来呢???

测试链接 http://45.32.81.200:8080/vul/sqli/sqli_blind_t.php

输入 kobe' and sleep(5) #

等待5秒,信息才会显露出来

现在,用mysql中的if来进一步判断,与之前的bool注入类似,这里就多用一个if函数

输入 kobe ' and if ((substr(database(),1,1))='p',sleep(5),null)#

如果 (substr(database(),1,1))='p' 函数为真 ,执行sleep(5),否则什么也不执行

好了,这里就是盲注的基于时间注入了      (找到盲注漏洞后,一般都用sqlmap来拿库)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值