CTF从入门到提升(三)基于时间的盲注及部分函数

简介: 本次内容会先介绍一些函数,然后结合一些题目进行讲解。这里的基于时间是指延时。

本次内容会先介绍一些函数,然后结合一些题目进行讲解。这里的基于时间是指延时。

​​我们对于盲注最早接触的应该就是SLEEP函数, 很多编程语言中都有它。函数的特点就是添加延时功能,我们可以看一下它的一个效果是什么样子的。

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:1分10秒)

举栗子:

在添加了SLEEP函数之后,它的运行结果要是变慢了,而且它的变慢的时间和我们填的设置的时间是接近的,或者说是长于这个时间的。那么就能够验证佐证就是说我们sleep的函数它产生了这个效果:
ctf3_1
3_2

刚刚的演示过程,我们输入的代码和正常的访问产生了差异。( 有延时就说明我们的代码生效了,没有延时就说明没有生效。)
3_3

整张表只有四条数据,id=1,基于逻辑上判断来说,2逻辑前面为真。id=1之后,它后面的逻辑就不管会不会运行SLEEP,但是针对表中的234,id≠1的,它就会去判断后面这个逻辑,这个时候它就会都去做一个延时,运行一个SLEEP(3)。
3_4
3_5

延时数据需要一些配合,当前数据库是sectest,很多时候我们去提供一个约束条件(查询条件)的时候,它如果能查出数据来,其实就是告诉我们表中存在一条数据等于admin,或后面有and的时候,它就能够去触发这个效果,整个词的查比较困难一些。但是我们要是换成一个字母一个字母的去查,就会快很多。这里提到if条件,它其实是一个判断语句,它有三个表达式,可以接收三个参数。
3_6

Expr1是一个判断语句。

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:9分41秒)
3_7

然后这个时候我们再回过头来看一下这些截取函数,做单字母的判断,就是把查询出来的结果做一下拆分。我们来看一下这些函数。第一个就是刚才用SUBSTRING函数,其实它也是个截距函数。比如说我去查一个字符串是ABCDE 5个字母,第一个参数它其实就是代表要被它拆分截取的一个字符串,第二个参数就是position,下一个参数就是length。
3_8

另一个函数SUBSTING这个函数其实也是类似的:

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:15分41秒)
3_9

我们可以看一下例子:

比如说是AAABBBCCC count是去计算关键词出现的次数。

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:18分14秒)

3_10


有的时候方式可以多一些。这里提到既然rlike可以用的话,那么对于正则表达式的一个匹配,还有一个regexp可以对它做一个正则匹配。

3_11

除了if还有很多的方就还有其他方式做语法表达。 case在很多编程语言中都理解成是某种情况,根据case也能做一个触发case,当什么的时候什么条件下,它就会触发一个什么效果。

举几个例子:

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:23分30秒)
3_12
3_13

不想用引号怎么办,那我就要去配合使用阿斯克。把它转成阿斯克码值来做一个判断。

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:27分37秒)
3_14
3_15

反过来阿斯科码只是一个97,对它做一个阿斯科码的转换,第一个返回值用SLEEP函数。 SOPSTR去分割DATABSE,DATABSE是一个全局变量。SUPSTR(1,1)他这时候的返回的结果是一个字母,它的阿斯克码值就应该是115。如果不是115的时候,比如说114,它是秒回,那么通过这样子,就可以判断115就是第一个DATABSE这个变量的第一个字母的阿斯科码值,也可以反推。

除了SLEEP之外还有一些函数,重复执行某个函数。

BENCHMARK
3_16

计算它的处理速度,就是说比如说表达式定义好了之后,这靠的就是它运算次数。

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:30分58秒)
3_17
3_18

延时的目的其实查询语句都是一致的,只不过最后如何让它产生延时,很有可能是CTF题目中需要想要你去考虑的一个问题。

笛卡尔积
3_19

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:34分42秒)
3_20

GET_LOCK

就是说它其实类似于上锁的一个问题,对一个字母上了锁之后,下再去查字符串就会产生一个延时。
3_21

可以看一下get knock

(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:39分)
3_22

构造一个长字符串,然后再做一个匹配,然后就返回得非常慢。所以这里也只是可以有个了解,那我们来看一下看这个效果。
3_23
3_24
3_25

以上动手演示可见:安全牛课堂《CTF从入门到提升》

相关文章
|
29天前
|
C#
C#语法快速热身
C#语法快速热身
7 0
|
1月前
|
存储 C语言
拒绝摆烂!C语言练习打卡第一天
拒绝摆烂!C语言练习打卡第一天
拒绝摆烂!C语言练习打卡第一天
|
1月前
|
编译器 C语言
拒绝摆烂!C语言练习打卡第三天
拒绝摆烂!C语言练习打卡第三天
|
2月前
|
SQL 数据库
小课堂 -- 时间​​盲注和Bool盲注
小课堂 -- 时间​​盲注和Bool盲注
8 0
|
7月前
|
安全 编译器 网络安全
CTF竞赛:从格式化输出函数到完全控制
CTF竞赛:从格式化输出函数到完全控制
|
9月前
|
存储 SQL 关系型数据库
【MySQL新手到通关】第六章 时间日期函数
MySQL的日期函数主要用来对日期和时间类型的数据进行计算、格式化和转换,能够帮助程序员更加方便地处理存储在MySQL数据库中的时间数据。使用这些函数可以实现以下功能: 格式化日期和时间:通过指定不同的日期格式输出相应的日期或时间字符串。 提取日期和时间的各个部分:提取一个时间值中的年、月、日、时、分、秒等信息。 进行日期加减操作:在一个日期值上进行加减运算,例如将某一日期加上一天或减去半个月。 返回日期时间差异:计算两个日期或时间的差值,例如计算两个日期之间相隔多少天、小时或分钟等。 循CC
|
测试技术 Python
软件测试|教你如何用Python获取昨天今天明天的日期
软件测试|教你如何用Python获取昨天今天明天的日期
195 0
软件测试|教你如何用Python获取昨天今天明天的日期
|
SQL 数据采集 安全
下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
93 0
下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
|
人工智能 自然语言处理 前端开发
程序老鸟C#学习:5天学会全部基础--第一天
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
202 0
|
C语言 前端开发 rax
Phper 学 C 兴趣入门 -为什么有时候字符串的处理这么难
Phper 学 C 兴趣入门 -为什么有时候字符串的处理这么难
397 0