SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。

SQL注入基础

漏洞原理

针对SQL注入的攻击行为可描述为通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结外以下两个原因叠加造成的:
1、程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句。
2、未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中。

注入点可能存在的位置

根据SQL 注入漏洞的原理,在用户“可控参数”中注入SQL 语法,也就是说Web 应用在获取用户数据的地方,只要带入数据库查询,都有存在SQL 注入的可能,这些地方通常包括:

@ GET 数据@ POST 数据@ HTTP 头部(HTTP 请求报文其他字段)@ Cookie 数据        

漏洞危害

攻击者利用SQL注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中内容(脱库)。在特别情况下还可以修改数据库内容或者插入内容到数据库,如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过SQL注入漏洞直接获取webshell或者服务器系统权限。

注入分类

SQL 注入漏洞根据不同的标准,有不同的分类。但是从数据类型分类来看,SQL 注入分为数字型和字符型。

数字型注入就是说注入点的数据,拼接到SQL 语句中是以数字型出现的,即数据两边没有被单引号、双引号包括。字符型注入正好相反。

根据注入手法分类,大致可分为以下几个类别:

  1. UNION query SQL injection(可联合查询注入) 联合查询(查)
  2. Error-based SQL injection(报错型注入) 报错注入(查)
  3. Boolean-based blind SQL injection(布尔型注入) 布尔盲注(查)
  4. Time-based blind SQL injection(基于时间延迟注入) 延时注入(查)
  5. Stacked queries SQL injection(可多语句查询注入) 堆叠查询(增删改)

MySQL相关

注释 mysql 数据库的注释大概有以下几种。

    #
    -- (杠杠空格)
    /* ..... */
    /*! .... */ 内联查询

mysql 元数据(库名、表名、字段名)库数据库information_schema

  information_schema   (存了库名、表名、字段名)  一个数据库

    tables       (存了所有的表名)        一个表

      table_name   (存了所有的表名)       一个字段

       table_schema      (表名所属的数据库)       一个字段

     columns         (存了所有字段的名字)       一个表

      column_name  (存了所有的字段名)        一个字段

       table_name   (字段所属的表名)          一个字段

     table_schema  (字段所属的数据库名)      一个字段

MYSQL 常用函数与参数

=|>|>=|<=|<>           比较运算符【select 1<>2】

and|or               逻辑运算符【select true and false】

version()              mysql 数据库版本【select version()】

database()             当前数据库名【select database()】

user()               用户名

current_user()            当前用户名

system_user()            系统用户名

@@datadir             数据库路径

@@versoin_compile_os       操作系统版本

length()             返回字符串的长度【select length('123456')】

substring()           截取字符串

   substr()

   mid()           这三个函数都有以下3个参数【select substr(database(),1,1)】

                 1、截取的字符串2、截取起始位置,从1开始计数3、截取长度,为1

left()             从左侧开始取指定字符个数的字符串【select left('123456'),3】从左取3个

concat()           没有分隔符的连接字符串【select concat('a','b','c')】

concat_ws()         含有分割符的连接字符串【select concat_ws('-','a','b','c')】第一个参数是分隔符

group_conat()         连接一个组的字符串

ord()             返回ASCII 码【select ord(a)】

  ascii()           返回ASCII 码【select ascii(a)】

hex()            将字符串转换为十六进制

unhex()           hex 的反向操作

md5()            返回MD5 值

floor(x)           返回不大于x 的最大整数

round()           返回参数x 接近的整数

rand()            返回0-1 之间的随机浮点数

load_file()         读取文件,并返回文件内容作为一个字符串

sleep()           睡眠时间为指定的秒数

if(true,t,f)          if 判断【select if (true,1,2)】

find_in_set()         返回字符串在字符串列表中的位置

benchmark()         指定语句执行的次数

name_const()         返回表作为结果

SQL注入学习(一)的更多相关文章

  1. SQL注入学习资料总结

    转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html  什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...

  2. sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)

    (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...

  3. SQL学习之SQL注入学习总结

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...

  4. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

  5. SQL注入学习-Dnslog盲注

    1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...

  6. 从零开始的sql注入学习(挖坑不填)

    首先,本人是小白,这篇文章也只是总结了一下大佬们的sql注入方法,要是有错,请各位大佬指出,以便学习. 虽然我是菜鸡,但是太过基础的sql注入问题也就不再重复的解释了.直接从常用的说起. 实战中常用的 ...

  7. 简单sql注入学习

    sql注入是什么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQ ...

  8. SQL注入学习(一)

    注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...

  9. Java SQL注入学习笔记

    1 简介 文章主要内容包括: Java 持久层技术/框架简单介绍 不同场景/框架下易导致 SQL 注入的写法 如何避免和修复 SQL 注入 2 JDBC 介绍 JDBC: 全称 Java Databa ...

  10. sql注入学习心得与sqlmap使用心得

    做题是最好的老师 首先先来分享一下我用来练手的题目,实验吧中的简单的sql注入1,2,3 不得不说,sql注入真是一个神奇的东西,至少我以前看起来一点头绪都没有的题目能入手了 首先是简单的sql注入3 ...

随机推荐

  1. 用Promise处理异步函数

    处理函数之间的异步问题,使其同步进行的其中一种方法,就是使用Promise.Promise在ES6中被提出. 使用示例如下: 假如有三个函数,要求按getone.gettwo.getthree的顺序执 ...

  2. mongodb 获取自增数

    mongodb db.getCollection('user').findAndModify({update:{$inc:{'level':1}},query:{"name":&q ...

  3. 原来python如此神奇

    一.优缺点分析 1.缺点: ① 数学问题的生成中只考虑了消除乘除法加括号的无效情况(例如3*(4+5)或(6*5)/2这样的计算),但没有去掉加减法加括号的无效情况(例如(4+(7+8))或(3-(2 ...

  4. Spark Streaming 入门

    概述 什么是 Spark Streaming? Spark Streaming is an extension of the core Spark API that enables scalable, ...

  5. 项目管理知识点-结合Enovia项目管理模块

    核心知识域:整体管理.范围管理.进度管理.成本管理.质量管理.信息安全管理 保障域:人力资源管理.合同管理.采购管理.风险管理.信息(文档)管理.配置管理.知识产权管理.法律法规标准规范管理.职业道德 ...

  6. springboot启动报错 Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

    新建了一个springboot项目报一下错误: Failed to configure a DataSource: 'url' attribute is not specified and no em ...

  7. Android开发——Toolbar常用设置

    本篇笔记用来记录常用的Toolbar设置,如Toolbar颜色设置,显示返回按钮,显示右边三个点按钮 之前Android 使用的ActionBar,Android5.0开始,谷歌官方推荐使用Toolb ...

  8. Dart数据类型

    变量与常量: 变量: 使用var声明变量,可以赋予不同数据类型的值, 未初始化时默认值是null 使用final声明的变量只能被赋值一次 void main(){ var a; print(a); a ...

  9. 除了Web和Node,JavaScript还能做什么

    前言 提起JavaScript,我们也许经常会想到的是,可以用来写Web页面嘛,又或者,会想起Node.js 这个服务端环境,搞前后端同构. 那么,除此之外, JavaScript还可以做什么?   ...

  10. css 精灵图的使用

    精灵图的使用 1.给一个容器定义一个大小(宽高) 2.引入背景图 3.定位到自己你想要的图片位置 例如:  background-position: 0 0;  background-position ...