CTF从入门到提升(五) 部分截取函数及bool型盲注相关例题分析

简介: bool型盲注有区别与之前的基于时间的盲注,bool型盲注的页面输入会影响输出。​​我们来看操作理解一下:语句结构id=1 ,我们去做判断的时候是id=1 and 1=1,and 1=1的本质是返回一个true,true可以用1来代替,正常回显。

bool型盲注有区别与之前的基于时间的盲注,bool型盲注的页面输入会影响输出。
​​我们来看操作理解一下:
语句结构id=1 ,我们去做判断的时候是id=1 and 1=1,and 1=1的本质是返回一个true,true可以用1来代替,正常回显。我们很多时候就会去接and=0,0类似于1=2返回是false, false类似于0的作用。
5_1

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

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

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

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

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

mid函数 、ORD()函数 、ASCII()函数
5_4
5_4_2
5_5_3
5_4_5

题目分享:
5_5
5_5_2
5_5_3
5_5_4
5_5_5
5_5_6

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

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

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

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

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

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

*- 空格不能用,但可以用内联注释

  • 不能引号就用阿斯克码来代替
    *

5_10
小于127,返回error password,
5_11

大于127,返回 error userid。

5_12

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

再举一个放字母的栗子:

5_13

直接复制下链接:

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

可以随便设time,out,但不能设太低,会直接报错。这个请求发出去后会有一个response返回来,如果我们去检测response中的内容,

5_17

我们想要的是error password
(content就是response中的页面的信息),针对页面信息我们去做个匹配,使用find进行匹配,找不到就返回-1,找到了就要做个添加,操作如图:
5_18

5_19

找到后对返回值做添加:
5_20

继续等待返回结果:
5_21

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

相关文章
|
4月前
|
存储 安全 C语言
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))
74 0
|
4月前
|
存储 C语言
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))
63 0
|
4月前
|
网络安全
编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)
编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)
87 1
|
5月前
|
C语言
C语言每日一题 ----计算日期到天数转换(Day 2)
C语言每日一题 ----计算日期到天数转换(Day 2)
61 0
|
8月前
|
编译器 C++
手把手教你玩转常用字符串函数(包含模拟实现)
手把手教你玩转常用字符串函数(包含模拟实现)
|
9月前
|
C语言
C语言:写一个函数返回参数二进制中 1 的个数(三种思路)-1
思路一:使用 %2 和 /2 取出每一位并判断 总体思路: (一). 创建函数,参数要设置成无符号整数,设置计数器计算1的个数 (二). 使用 while循环 循环判断二进制每一位, 使用 %2 判断最低位是否为 1, 使用 /2 去掉判断了的最低位,下次循环开始判断新的最低位
 C语言:写一个函数返回参数二进制中 1 的个数(三种思路)-1
|
9月前
C进阶:字符串相关函数及其模拟实现
C进阶:字符串相关函数及其模拟实现
33 0
C进阶:字符串相关函数及其模拟实现
|
11月前
|
算法 C++
模拟实现atoi函数(将数字字符串转换为整型)附加leetcode练习题
各位朋友们,大家好啊!今天我为大家分享的知识是如何模拟实现atoi函数。相信大家如果能够理解这个知识,对大家以后的刷题是有帮助的。
【斗鱼笔试题】字符串分类---字符集相同的字符串为同一类
【斗鱼笔试题】字符串分类---字符集相同的字符串为同一类
57 0
|
C语言
C语言进阶之路:输出任意两个数的和
C语言进阶之路:输出任意两个数的和
195 0
C语言进阶之路:输出任意两个数的和