SQL注入的原理与分析

SQL注入的原理与分析

1、SQL注入的本质

2、部分SQL语句

3、SQL注入流程

 


一、SQL注入的本质

  SQL注入的本质,就是把用户输入的数据当作代码执行

  Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令

  两个必要关键的条件:

  第一,用户能够控制输入

  第二,原本程序要执行的代码拼接了用户输入的数据然后执行

二、部分SQL语句

  · column_name 字段名

  · table_name 表名

  · schema_name 库名

  · information_schema 数据库所有信息,库、表、字段

  · information_schema.columns 所有字段的信息

    table_schema 所在数据库

    table_name 所在表

    column_name 字段的名字

  · information_schema.tables  所有表的信息

    table_schema 所在数据库

    table_name 表的名字

  · information_schema.schemata 所有数据库的信息

    schema_name 数据库的名字

三、SQL注入流程

  SQL注入流程

  · 找与数据库交互的地方

  · 判断是否存在注入点,注入是字符型or数字型

  · 判断当前表的一个字段数,当前所在的库

  · 去系统自带信息库查表名,字段名

  · 查询需要的字段数据

  SQL注入步骤

  1、判断是否存在注入点

 

  最古老的方法:and 1=1 成立 且 and 1=2 不成立 => 存在sql注入
  最简单的方法:页面后面加单引号,若报错,则存在sql注入
  进阶:如果是数字型传参,可以尝试-1
  and 1=1 and 1=2 被拦截的可能性超高
  可以尝试 and -1 = -1 或者 -1=-2 或者1>0,,,或者直接or sleep(5)

  2、判断是字符型or数字型

  在SQL基础里第八小节里有提到过

  3、判断当前表的字段数,库名

  判断字段数:order by 字段序数   =>  这个语法是是排序语法,根据第几个字段排序,例如,该表有2个字段,若是用了 order by 3 则会报错,因为只有两个字段,不可能根据第三个字段排序。字段序数大于字段数则会报错

  库名,database() 查询当前所在 数据库函数

  4、去系统自带信息库查表名,字段名

  Ps:mysql在5.0以上版本加入了information_schema这个系统自带库,其中保存着关于mysql服务器所维护的其他数据信息,如数据库名,数据库的表,表栏的数据类型与访问权限

  Tip.  库.表 =>  选中某个库里的某个表

  ·  information_schema.tables 存放着表名和库名的对应

  ·  information_schema.coiumns 存放着字段名和表名的的对应

 

posted @ 2021-11-28 00:08  彧先生  阅读(686)  评论(0编辑  收藏  举报