打开流量包,有http协议,追踪http流
可以看出,应该是在进行盲注
导出为CSV文件进行分析
既然是要找flag,肯定查询语句中有包含flag,在这个文件里搜索一下flag出现的位置
第一次出现是在这里,但是根据语句我们发现,这只是查询行数的语句,count(*)的作用是用来查询函数
然后我们继续向下寻找,在一千两百多行找到查询flag的语句(每个人可能会不太一样)
这里我们还要了解这个盲注查询的原理,就是根据二分的方法进行查询
这一段就是判断flag的长度,length函数就是判断字符长度
concat_ws()函数就是用前面那个char(94)的符号进行连接,char(94)就是反引号,%20就是空格
然后我们开始判断,刚开始是判断长度是否大于100,下一行就变成了判断是否大
于50,说明大于100是错误的,同时我们看到错误的时候返回的长度是1027,然后
后面又是判断是否大于25,说明不大于50,并且大于25的返回值是1095,说明大
于25是正确的,然后继续判断,大于32是正确的,大于35是正确的,大于37是正
确的,大于38是错误的,所以flag长度应该是38
substr是截断函数
然后下面依次去判断每个flag字符的ascii码,第一个是102(因为大于102是错误的,大于101是正确的)
是根据那个%201来判断现在查询的是哪个字符,这里应该分开来看,是%20和1
然后继续判断第二个字符,可以看到后面原来那个%201变成了%202
应该是108,然后我们依次类推下去判断剩下的36个字符的ascii码
分别为
97/103/123/52/55/101/100/98/56/51/48/48/101/100/53/102/57/98/50/56/102/99/53/52/98/48/100/48/57/101/99/100/101/102/55/125
再加上前两个就是
102/108/97/103/123/52/55/101/100/98/56/51/48/48/101/100/53/102/57/98/50/56/102/99/53/52/98/48/100/48/57/101/99/100/101/102/55/125
用脚本把这些ascii码转换为字符
import re r="102/108/97/103/123/52/55/101/100/98/56/51/48/48/101/100/53/102/57/98/50/56/102/99/53/52/98/48/100/48/57/101/99/100/101/102/55/125" r=re.split("/",r) flag="" for i in range(0,len(r)): flag=flag+chr(int(r[i])) print(flag)
flag{47edb8300ed5f9b28fc54b0d09ecdef7}