前文写了一些常规的SQL注入的手段和SQL注入产生的原因,之后的SQL注入文章会介绍一些高级注入方法。
Boolean注入
一、什么是Boolean注入
Boolean型的注入意思就是页面返回的结果是Boolean型的,通过构造SQL判断语句,查看页面的返回结果是否报错,页面返回是否正常等来判断哪些SQL判断条件时成立的,通过此来获取数据库中的数据。
二、Boolean注入实战
这里我们可以打开我们sqli-labs的第八关,这个靶场的源代码在之前的渗透测试之外网准备一文中发过了,不知道的可以再去看一下。
第八关是一个Boolean注入的环境,首先我么先输入一个?id=1看一看会有什么情况
这里出现了一个You are in......的字段
那么我们在输入一个?id=1'看看会出现什么
很显然,这里我们输入?id=1’ 查询语句是无法正常执行的,按照以往我们经验这里是会报错的,爆出一个语句查询错误的英文句子,但是这里没有。可是仔细观察,我们就会发现区别。错误的语句中是没有You are in.....这个字段的,那么我们就可以通过这个特性来进行我们的注入了。
三、boolean注入思想
在进行boolean我们是这样思考的。这里打个比方,站在你面前一个人,你问他叫什么名字,但是他是个哑巴不能说话,只会点头和摇头,这个时候你该怎么去得到他的名字呢。对,当然是我们去问他,然后他通过点头或摇头来告诉我们的正确与否。假设这个人名字叫张三,我问他,你姓李吗。他给我摇了个头,这个时候我知道了他不姓李,我继续问,直到我们他你姓张吗,他给我点了个头,这个时候我知道了。哦!原来他姓张,后面才字也是一样的手段。当然这样询问是工作量非常大的,在我们的boolean注入里面也是一样,所以我们在进行boolean注入的时候都会写一些自动化的注入工具来帮助我们完成注入。
四、开始boolean注入
再进行boolean注入之前我们还需要知道一些MySQL的一些内置函数
length(str):返回str字符串的长度。
substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
知道了这些我们就可以开始我么的注入了
我们输入?id=1' and ascii(substr((select database()),1,1))>104 %23
这句话的意思是判断数据库的第一个字符是否是我们所给出的字符
发现给我们返回的是You are in.....字段
那就相当于给我们点了个头
那这样我们就知道了数据库的第一个字符,接下来就是写自动化脚本慢慢拆解了。当然一些代码功底薄弱的师傅还可以借助sqlmap帮助进行注入工作。