目录

  • 1 SQL注入简介
    • 1.1 SQL注入概述
    • 1.2 SQL注入原理
    • 1.3 SQL注入漏洞的危害
  • 2 SQL注入漏洞分类
    • 2.1 注入位置分类
    • 2.2 注入数据类型分类
    • 2.3 注入手法分类
  • 3 SQL知识基础
    • 3.1 MySQL 元数据库 information_schema 内容简介
    • 3.2 MySQL 常用参数
  • 4 总结
  • 参考文献

1 SQL注入简介

1.1 SQL注入概述

  1. 定义:SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。
  2. 动态SQL语句:一般情况下,开发人员可以使用动态SQL 语句创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL 语句。当开发人员在运行过程中需要根据不同的查询标准决定提取什么字段(如select语句),或者根据不同的条件选择不同的查询表时,动态地构造SQL语句会非常有用。
  3. 下面以PHP语句为例。由于这里的参数ID可控,且带入数据库查询,所以非法用户可以任意拼接SQL语句进行攻击。
$query =”SELECT * FROM users WHERE id= $_GET['id']";

1.2 SQL注入原理

  1. 目前,大多数Web编程语言提供了操作SQL的接口,以方便与数据库进行交互。但是在开发Web应用的过程中,由于忽视了代码的健壮性和安全性,攻击者可以构造巧妙的SQL语句从而获取到敏感数据,因此导致了SQL这种攻击方式的流行。
  2. SQL 注入漏洞的产生需要满足以下两个条件:
    • 参数用户可控:前端传给后端的参数内容是用户可以控制的。
    • 参数带入数据库查询: 传入的参数拼接到SQL吾句,且带入数据库查询。

1.3 SQL注入漏洞的危害

  1. 攻击者未经授权可以访问数据库中的数据,盗取用户的隐私以及个人信息,造成用户的信息泄露。
  2. 可以对数据库的数据进行增加或删除操作,例如私自添加或删除管理员账号。
  3. 如果网站目录存在写入权限,可以写入网页木马。攻击者进而可以对网页进行篡改,发布一些违法信息等。
  4. 经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。

2 SQL注入漏洞分类

2.1 注入位置分类

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

  • GET 数据
  • POST 数据
  • http请求头参数注入
    • HTTP Referer:是header的一部分,当浏览器请求网页时,会自动携带一个请求来源,如果后端存在交互,则会引发注入问题的产生。
    • User-Agent 请求头,该请求头携带的是用户浏览器的标识信息,如果此时带入数据库查询,则同样会触发注入问题的产生。
    • X-Forwarded-For:简称XFF头,它代表客户端,用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中
    • Cookie:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
    • X-Real-IP:只记录真实发出请求的客户端IP。
    • Accept-Language:请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言
    • HTTP_CLIENT_IP:该属性是PHP内置属性,同样取得的是客户端的IP,同样可控,如果带入数据库,则会产生注入问题。
  • ……

2.2 注入数据类型分类

从数据类型分类来看,SQL注入分为数字型和字符型。

  • 数字型注入:注入点的数据拼接到SQL语句中是以数字型出现的,数据两边没有单引号、双引号括起来。
  • 字符型注入:注入点的数据两边有单引号、双引号括起来。

2.3 注入手法分类

  • union联合查询注入
    union查询注入是最基础的注入。在SQL中, UNION 操作符用于合并两个或多个 SELECT 语句的结果。union 查询注入利用 UNION 关键字可以追加一条或者多条额外的 SELECT 查询,并将结果追加到原始查询中。
  • 盲注
    盲注指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。主要分为布尔盲注与基于时间的盲注。
  • 报错注入
    黑客攻击时常根据错误回显进行判断,但是现在非常多的Web程序没有正常的错误回显,这样就需要我们利用报错注入的方式来进行SQL注入了。
  • 堆叠查询注入
    堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新的查询或者终止查询,可以达到修改数据和调用存储过程的目的。
  • 二次注入
    在将数据(一次注入的)存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。
  • 宽字节注入
    在使用PHP连接MySQL的时候,当设置“set character_set_client = gbk”时会导致一个编码转换的问题,这就是常说的宽字节注入。
  • base64注入
    base64注入是针对传递的参数被base64加密后的注入点进行注入。除了数据被加密以外,其中注入方式与常规注入一般无二。

3 SQL知识基础

为了更好地进行SQL注入,需要对SQL有所了解,在之前专栏学过的SQL基础语句后,此处对与SQL注入相关性较大的知识做一个温习。

3.1 MySQL 元数据库 information_schema 内容简介

information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。

在该数据库中,有三个表对SQL注入帮助较大,分别是schemata表、tables表、和columns表。.

  • schemata:记录当前 mysql 中所有数据库的信息。该表中字段名SCHEMA_NAME记录着所有数据库的名字。
  • tables:存储 mysql 中的所有表的信息。该表主要字段名如下:
    • TABLE_SCHEMA:记录该表属于哪个数据库。
    • TABLE_NAME:记录该表的名字。
  • colunms:存储 mysql 中所有字段信息。该表主要字段名如下:
    • TABLE_SCHEMA:记录该字段名属于哪个数据库。
    • TABLE_NAME:记录该字段属于哪个表。
    • COLUMN_NAME:记录该字段名。

3.2 MySQL 常用参数

可以利用select语句加上下列常用参数,来查询所需要的信息。比如select 1 <>2数据库将返回1,又比如select version()数据库将返回版本号 。常用参数如下,更多参数、运算符、函数参考文章《SQL常用运算符、通配符及参数》《SQL常用函数简要解析》

参数名 用途
version() 返回当前数据库软件版本
database() 返回当前数据库名
user() 返回用户名
current_user() 返回当前用户名
system_user() 返回系统用户名
@@datadir 返回数据库路径
@@version_compile_os 返回操作系统版本

4 总结

  1. 了解SQL注入漏洞的概念和危害;
  2. 理解SQL注入漏洞产生的两个条件;
  3. 了解SQL注入分类方式;
  4. 加深SQL和数据库相关知识的理解。

参考文献

  1. 《常见sql注入的类型》
  2. 《SQL注入及其危害、防御手段》
  3. 《十种MySQL报错注入》
  4. 《MySQL盲注:基于时间延迟注入9种方法》
  5. 《SQL注入-堆叠注入(堆查询注入)》
  6. 《MySQL 中的 information_schema 数据库》

【SQL注入01】SQL注入漏洞简介、原理及类型相关推荐

  1. 【XSS漏洞-01】XSS漏洞简介、危害与分类及验证

    目录 1 XSS漏洞简介 2 XSS漏洞危害 3 XSS漏洞分类 3.1 反射型XSS 3.2 存储型XSS 3.3 DOM型XSS 3.3.1 节点树模型 3.3.2 DOM型XSS 4 漏洞验证 ...

  2. SQL注入漏洞简介、原理及防护

    目录 1.SQL注入漏洞简介 2.SQL注入漏洞原理 3.SQL注入的分类 4.注入方法 5.SQL注入危害 6.SQL注入防护措施 1.SQL注入漏洞简介 SQL注入漏洞是Web层面最高位的漏洞之一 ...

  3. SQL注入漏洞(原理;网页注入)

    SQL注入漏洞 一.SQL的注入 SQL注入攻击是黑客对数据库进行攻击的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验也参差不齐,相 ...

  4. SQL注入漏洞(原理篇)

    SQL注入是我安全入门学的第一个漏洞,这个漏洞怎么说呢,前期的学习单单记住那几个payload知道如何查库.查表.查列.查字段就可以做题目了.没办法,初学者零基础就是这样,从记忆开始再到逐渐理解结束, ...

  5. SQL注入天书-ASP注入漏洞全接触

    引     言                 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序 ...

  6. 安全漏洞之SQL注入和shell注入

    SQL注入 发生部位 SQL注入安全漏洞发生于应用程序和数据库之间. 原理 当攻击者在输入的字符串之中注入SQL指令,由于程序没有设置相关的字符检查,那么这些指令就会被数据服务器认为是正常的SQL指令 ...

  7. 视频教程-SQL注入与SQLmap工具-漏洞挖掘与利用

    SQL注入与SQLmap工具 玄道,从混迹漏洞平台与SRC应急响应中心的白帽子到创业乙方的技术与运营 刘畅 ¥15.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 AP ...

  8. OWASP TOP 10(2021)之注入漏洞(SQL注入和XSS注入)

    目录 一.SQL注入 1. 漏洞概述及原理 2. 漏洞可能造成的危害 3. 漏洞防范 4. SQL注入的分类与检测 5. 从攻击者的角度,如何绕过SQL注入防范呢? (1)对于关键字的绕过 (2)缓冲 ...

  9. 【网络安全】WEB漏洞 pickchu靶场搭建:实例演示sql数字注入、目录遍历漏洞、文件下载漏洞

    WEB漏洞01 CTE,SRc,红蓝对抗,实战等#简要说明以上漏洞危害情况 #简要说明以上漏洞等级划分 #简要说明以上漏洞重点内容 #简要说明以上漏洞形势问题 靶场搭建:https://github. ...

  10. Java安全-注入漏洞(SQL注入、命令注入、表达式注入、模板注入)

    文章目录 注入 SQL注入 JDBC拼接不当造成SQL注入 框架使用不当造成SQL注入 不安全的反射 命令注入 代码注入 表达式注入 Spel表达式注入 OGNL表达式注入 模板注入 注入 SQL注入 ...

最新文章

  1. H3 BPM钉钉接入配置
  2. iphone系统更新 3002错误
  3. 程序猿必备的硬核知识,你知道哪些?
  4. 【NLP】万字长文带你解读『虚假新闻检测』最新进展
  5. effective C++ 条款 5:了解c++默认编写并调用那些函数
  6. Python:file (read,readline,readline )使用方法
  7. 都道业务提升坑大事儿多,但英特尔云方案却说“简单”
  8. 创建数组表格PHP苹果价格,如何从PHP数组创建HTML表?
  9. Struts2 Hibernate集成示例教程
  10. 【ElasticSearch】es 线程池 ThreadPool 的封装
  11. 嵌入式Linux环境变量如何参与程序运行
  12. anaconda和pythoncharm_Anaconda、TensorFlow安装和Pycharm配置详细教程,亲测有效!
  13. Windows下效率必备软件
  14. java win10窗口启动假死_win10系统下桌面经常假死如何解决
  15. Adobe Dreamweaver CS6(或者CC 2018.2 SP)安装失败解决方案
  16. NPOI 连续插入多张图片的办法,及部分样式的代码
  17. 华为5G的秘密原来掌握在一个土耳其人的手中?!
  18. coffee-script运行环境
  19. osg学习(十一)osg与osgre
  20. Python 63个内置函数超级详解!这63个必会!

热门文章

  1. RHEL/Centos下VSFTPD服务器搭建
  2. C#多线程之线程同步篇2
  3. libsqlite3.dylib找不到
  4. 006--C++动态内存(简介)
  5. sysservers 中找不到服务器,请执行 sp_addlinkedserver 将该服务器添加到sysserver
  6. 解决比较Oracle中CLOB字段问题
  7. php添加pdo_mysql_php下添加pdo_mysql扩展
  8. 6个基础位运算符和4个逻辑运算符
  9. 竞选计算机协会网络部部长,计算机协会部长竞选演讲稿
  10. linux下编译C++文件基本命令