Java教程

sqltest

本文主要是介绍sqltest,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

sqltest

打开流量包,有http协议,追踪http流

image-20220731155926512

可以看出,应该是在进行盲注

导出为CSV文件进行分析

image-20220731160011314

既然是要找flag,肯定查询语句中有包含flag,在这个文件里搜索一下flag出现的位置

image-20220731160236774

第一次出现是在这里,但是根据语句我们发现,这只是查询行数的语句,count(*)的作用是用来查询函数

image-20220731161453333

image-20220731161502725

然后我们继续向下寻找,在一千两百多行找到查询flag的语句(每个人可能会不太一样)

image-20220731162106957

这里我们还要了解这个盲注查询的原理,就是根据二分的方法进行查询

image-20220731160801643

这一段就是判断flag的长度,length函数就是判断字符长度

concat_ws()函数就是用前面那个char(94)的符号进行连接,char(94)就是反引号,%20就是空格

image-20220731162206446

然后我们开始判断,刚开始是判断长度是否大于100,下一行就变成了判断是否大

于50,说明大于100是错误的,同时我们看到错误的时候返回的长度是1027,然后

后面又是判断是否大于25,说明不大于50,并且大于25的返回值是1095,说明大

于25是正确的,然后继续判断,大于32是正确的,大于35是正确的,大于37是正

确的,大于38是错误的,所以flag长度应该是38

image-20220731162714147

substr是截断函数

image-20220731164043373

然后下面依次去判断每个flag字符的ascii码,第一个是102(因为大于102是错误的,大于101是正确的)

是根据那个%201来判断现在查询的是哪个字符,这里应该分开来看,是%20和1

然后继续判断第二个字符,可以看到后面原来那个%201变成了%202

image-20220731163016677

应该是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}

这篇关于sqltest的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!