本次内容会先介绍一些函数,然后结合一些题目进行讲解。这里的基于时间是指延时。
我们对于盲注最早接触的应该就是SLEEP函数, 很多编程语言中都有它。函数的特点就是添加延时功能,我们可以看一下它的一个效果是什么样子的。
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:1分10秒)
举栗子:
在添加了SLEEP函数之后,它的运行结果要是变慢了,而且它的变慢的时间和我们填的设置的时间是接近的,或者说是长于这个时间的。那么就能够验证佐证就是说我们sleep的函数它产生了这个效果:
刚刚的演示过程,我们输入的代码和正常的访问产生了差异。( 有延时就说明我们的代码生效了,没有延时就说明没有生效。)
整张表只有四条数据,id=1,基于逻辑上判断来说,2逻辑前面为真。id=1之后,它后面的逻辑就不管会不会运行SLEEP,但是针对表中的234,id≠1的,它就会去判断后面这个逻辑,这个时候它就会都去做一个延时,运行一个SLEEP(3)。
延时数据需要一些配合,当前数据库是sectest,很多时候我们去提供一个约束条件(查询条件)的时候,它如果能查出数据来,其实就是告诉我们表中存在一条数据等于admin,或后面有and的时候,它就能够去触发这个效果,整个词的查比较困难一些。但是我们要是换成一个字母一个字母的去查,就会快很多。这里提到if条件,它其实是一个判断语句,它有三个表达式,可以接收三个参数。
Expr1是一个判断语句。
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:9分41秒)
然后这个时候我们再回过头来看一下这些截取函数,做单字母的判断,就是把查询出来的结果做一下拆分。我们来看一下这些函数。第一个就是刚才用SUBSTRING函数,其实它也是个截距函数。比如说我去查一个字符串是ABCDE 5个字母,第一个参数它其实就是代表要被它拆分截取的一个字符串,第二个参数就是position,下一个参数就是length。
另一个函数SUBSTING这个函数其实也是类似的:
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:15分41秒)
我们可以看一下例子:
比如说是AAABBBCCC count是去计算关键词出现的次数。
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:18分14秒)
有的时候方式可以多一些。这里提到既然rlike可以用的话,那么对于正则表达式的一个匹配,还有一个regexp可以对它做一个正则匹配。
除了if还有很多的方就还有其他方式做语法表达。 case在很多编程语言中都理解成是某种情况,根据case也能做一个触发case,当什么的时候什么条件下,它就会触发一个什么效果。
举几个例子:
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:23分30秒)
不想用引号怎么办,那我就要去配合使用阿斯克。把它转成阿斯克码值来做一个判断。
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:27分37秒)
反过来阿斯科码只是一个97,对它做一个阿斯科码的转换,第一个返回值用SLEEP函数。 SOPSTR去分割DATABSE,DATABSE是一个全局变量。SUPSTR(1,1)他这时候的返回的结果是一个字母,它的阿斯克码值就应该是115。如果不是115的时候,比如说114,它是秒回,那么通过这样子,就可以判断115就是第一个DATABSE这个变量的第一个字母的阿斯科码值,也可以反推。
除了SLEEP之外还有一些函数,重复执行某个函数。
BENCHMARK
计算它的处理速度,就是说比如说表达式定义好了之后,这靠的就是它运算次数。
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:30分58秒)
延时的目的其实查询语句都是一致的,只不过最后如何让它产生延时,很有可能是CTF题目中需要想要你去考虑的一个问题。
笛卡尔积
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:34分42秒)
GET_LOCK
就是说它其实类似于上锁的一个问题,对一个字母上了锁之后,下再去查字符串就会产生一个延时。
可以看一下get knock
(在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作 CTF从入门到提升 课时3:39分)
构造一个长字符串,然后再做一个匹配,然后就返回得非常慢。所以这里也只是可以有个了解,那我们来看一下看这个效果。
以上动手演示可见:安全牛课堂《CTF从入门到提升》