zoukankan      html  css  js  c++  java
  • sql注入原理,利用与防护

    一、sql注入原理

    注入攻击的本质就是把用户输入的数据当作代码来执行。所以注入攻击有两个必要条件

    1.用户能够控制的输入。

    2.原本程序要执行的代码,拼接了用户输入的数据。

    二、sql注入分类

    按照请求方法可以分为:GET请求、POST请求

    按照参数类型可以分为:数字型、字符型

    按照数据返回结果分为:回显、报错、盲注

    盲注又分为:布尔盲注、延时盲注

    三、sql注入测试方法

    一般测试语句:

    or 1=1 --+ 'or 1=1 --+ "or 1=1 --+
    )or 1=1 --+ ')or 1=1 --+ ")or 1=1--+
    "))or 1=1 --+    

     

    ps: #  url编码后为 %23 ,可以用 --+ 替换

    常用测试函数:

    函数名 作用
    version() 数据库版本
    user() 数据库用户名
    database() 数据库名
    @@datadir() 数据库路径
    @@version_compile_os 操作系统版本

     
     
     
     
     

    测试流程:

    这里是在本地搭建的一个 sqli 的靶场,用来自己做练习,感觉还不错。

    文章最后附带的有链接,小伙伴们可以自行下载。

    1.检测sql注入类型

     直接在url处添加 单引号 发现网站报错、说明sql语句出错,就可能存在注入

    2.闭合sql语句

      一般有两种方法:

      a.使用 # 号,把本行 # 号后面的内容注释调,这样就可以避免sql语句出错,使我们构造的 payload 可以正确执行

      b.根据sql语句,用符号进行闭合

     这里就直接用 # 进行注释了,可以看到网站的页面回复了正常

    3.探测字段列数

    假设列数为 4 进行测试,页面出错,说明小于 4 列

    然后列数为 3 进行测试,页面正常,说明存在 3 列

    4.查看显示位,进行测试

     

     可以看到数据库的版本信息,说明存在sql注入漏洞

    四、sql注入防护技巧

    数据与代码分离

    对用户输入的数据进行严格过滤

    对特殊字符进行转义

    使用预编译语句

    使用安全函数

    检查数据类型

  • 相关阅读:
    ApplicationContext
    消息队列种类
    Zookeeper的功能以及工作原理
    java多线程(1)模式 不可变对象
    dubbo容错,负载均衡,协议
    dubbo的底层原理
    消息事务处理
    多线程循环打印 abc
    Spring 事务管理
    文件上传和下载
  • 原文地址:https://www.cnblogs.com/Excellent-person/p/11721468.html
Copyright © 2011-2022 走看看