首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTF从入门到提升(五) 部分截取函数及bool型盲注相关例题分析

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

原创
作者头像
牛油果
修改2019-08-27 14:59:05
5040
修改2019-08-27 14:59:05
举报

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中的内容,

我们想要的是error password

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

找到后对返回值做添加:

继续等待返回结果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档