评论

收藏

[其他] SQL注入基础相关概念

网络安全 网络安全 发布于:2021-07-05 10:58 | 阅读数:227 | 评论:0

  一、什么是SQL注入
  SQL注入是指Web应用程序对用户输入的数据的合法性没有判断,前端传入后端的参数是***可控的,并且参数带入数据库查询,那么***可以通过构造不同的SQL语句来实现对数据库的任意操作。
  开发人员可以使用动态SQL语句创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL语句。(不同字段和不同条件)
DSC0000.png

  这里的参数user_id是可控的,且带入数据库查询,所以用户可以任意拼接SQL语句进行***。
  二、 SQL注入的原理
  1. 参数用户可控
  2. 参数带入数据库查询
  三、判断是否存在SQL注入
  1、单引号判断法,正常输出
DSC0001.png

  2、在1后面输入单引号提交,报错,存在SQL注入漏洞
DSC0002.png

  原因:无论字符型还是整型都会因为单引号个数不匹配而报错!
  四、 SQL注入漏洞的两种类型
  1. 数字型
  2. 字符型
  如果是数字型,1=2肯定会报错,由于没有报错,说明该注入类型是字符型
DSC0003.png

DSC0004.png

  五、构造闭合语句
  根据报错内容,知道多了一个单引号
  You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1
  1、构造语句:1' and '1'='1
  最后一个1少输入一个单引号,正好和原来的闭合
DSC0005.png

  2、构造语句:1' and 1=1#
  #符号可以最后的引号屏蔽掉
DSC0006.png

  3、构造语句:1' and 1=1-- 
  "-- ",后面是有一个空格的,同样也可以屏蔽后面的语句
  --+
  %23
DSC0007.png

  六、MySQL注入相关的知识点:
  MySQL 5.0之后,MySQL默认在数据库中存放一个“information_schema”的数据库,该库中存放着这三张表:
  1. SCHEMATA:存储该用户创建的所有数据库的库名,记录库名的字段为
  SCHEMATA_NAME。
  2. TABLES:存储该用户创建的所有数据库的库名和表名,记录库名的字段为
  TABLE_SCHEMA,记录表名的字段为TABLE_NAME。
  3. COLUMNS:存储该用户创建的所有数据库的库名、表名、字段名。记录库名
  的字段为TABLE_SCHEMA,记录表名的字段为TABLE_NAME,记录字段名的字
  段为COLUMN_NAME。
  limit:
  limit m,n
  m:记录开始的位置,0代表第一条记录
  n:取n条记录
  limit 0,2:第一条记录开始,取两条记录!
  常用的函数和属性:
  version():查询MySQL的版本
  database():查询数据库名
  user():查询使用MySQL的用户
  @@datadir:查询数据库物理路径
  @@version:查询MySQL的版本
  七、MySQL的4种注释:
  1. # 我是注释2. -- 我是注释 (--和我是注释之间有空格)
  3. /*我是注释*/
  以上注释都可以放在SQL语句的任意位置中!!!
  4. /*!code*/ (内联注释)
  内联注释可以用于整个SQL语句中,用来执行SQL语句!
  例如:userid=1/*! UNION*//*! SELELCT*/1,2,3,4
DSC0008.jpeg


  
关注下面的标签,发现更多相似文章