bool型盲注有区别与之前的基于时间的盲注,bool型盲注的页面输入会影响输出。

我们通过操作来理解一下

语句结构id=1 ,我们去做判断的时候是id=1 and 1=1,and 1=1的本质是返回一个true,true可以用1来代替,正常回显,我们很多时候就会去接and=0,0类似于1=2返回是false, false类似于0的作用。

 

最后会影响到查询结果的是后面的0和1。

比如说触发查询数据,if触达的sleep执行成功返回SLEEP,执行失败返回0,

 

如果映射到bool型盲注这里不再是sleep,返回的结果变成1和0,如果if语句成功执行,它返回结果就是1和1,它不能成功执行返回的就是1和0。可以根据页面的返回内容来判断出到底语句查询是成功还是失败。bool型盲注的逻辑和基于时间的盲注是类似的,只不过判断的方法上是略微有点区别。理解了基于时间的盲注后再回过头来理解bool型盲注其实还应该是比较容易的。

先分享一些场景下截取相关的函数作为知识补充,然后分享一道题。

(说起截取函数在第三节内容中提到过SUBSTRING函数,它是支持这种结构的。)

 

 

 mid函数、 ORD()函数、 ASCII()函数

 

题目分享

 

 

 

 

 

 

连接数据库操作,查询user id是否存在,如果存在这个值,查询出数据是一条就会进入到下面的一个逻辑中去。我们刚才返回的是“ error password”,出现这个结果是因为下面逻辑没有满足:

 

 

针对bool型注入,是不是只要你能够有一个true and fasle,就可以了,可以针对下面这个语句进行注入:

如果数据中存在id就会走到上面的if else 逻辑里面去,因为我们不知道密码,最终返回的是error password。如果id是不存在的,它返回来就不会是一条是零条,所以它返回的就是一个error user id。

验证一下,我们将user id 改成0

返回的是 error userid,说明,当userid 是0或1的时候对输出产生了影响,基于这里,我们就已经可以对它做一个盲注。我们来写一下脚本,和之前的逻辑一样引入一个库:

 

写脚本思路:

 

对它做一个分割和分离,分离的时候我们要看他的过滤机制到底是哪一些。

  • 空格不能用,用内联注释代替
  • 引号不能用,用阿斯克码来代替

 

小于127,返回error password,

 

大于127,返回 error userid。

 

做盲注的时候可以将大于号变成等号,用二分法更快一点。

再举一个放字母的栗子:

 

直接复制下链接:

 

 

请求发出去之后对它做一个判断,定义一个变量,操作如图:

可以随便设time,out,但不能设太低,会直接报错。这个请求发出去后会有一个response返回来,我们去检测response中的内容(content就是response中的页面的信息),针对页面信息我们去做个匹配,使用find进行匹配,找不到就返回-1,找到了就要做个添加,操作如图:

 

 

我们想要的是error password

 

找到后对返回值做添加:

 

继续等待返回结果:

 

 

以上内容参考安全牛课堂《CTF从入门到提升

课程地址:https://www.aqniukt.com/my/course/8954​​​​​​​​