sql注入基础篇


本章概述:这是一篇关于SQL注入基础的文章


前言:之前参照前辈的一些文章,写了一篇SQL盲注总结,算是加深对SQL盲注的理解和运用,但是回过头发现,竟然没有SQL注入的基础篇,因此今天写的这篇文章针对的是SQL注入的基础,仅对SQL注入做一个了解,不会有太深的SQL注入的内容,仅针对小白。

1、SQL基础

1.1、什么是SQL?

这里我们来理解一下这两个概念——数据库、SQL

数据库简单来说就是数据的集合。经常玩游戏的人会知道一个游戏账号有若干个游戏角色,每个角色又有不同的装备、英雄、宠物等等,那么这些装备、英雄等的数据就是放在数据库中。通过数据库,数据被组织成行、列和表。

数据库的存储是表格式的存储,类似于我们平时使用的表格。表格我们所知道的有行和列之分,一行数据拥有不同的属性,一列数据拥有相同的属性。简单来说,列就是比如姓名表中姓名、性别、年龄这些属性。而行就是每个学生的信息了。

一个数据表中有若干行数据,一个数据库中有若干数据表,一个数据库系统中又有若干个数据库。

SQL是一种标准化的编程语言,用于管理关系型数据库并对其中的数据执行各种操作。

(注:以上说的数据库指的是关系型数据库)

1.2、SQL语句分类

SQL语句分为好多类,这里我们关注常用的 四类即可。

(1)DQL:数据查询语言。顾名思义,即为查询操作,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句,也是所有SQL中用的最多的语句。关键字为select,各种简单查询,连接查询等都属于DQL。

(2)DML:数据操纵语言。负责对数据库对象运行数据访问工作的指令集,以insert、update、delete三种指令为核心,分别代表插入、更新与删除数据。

(3)DDL:数据定义语言。负责数据结构定义与数据库对象定义的语言,由create、alter和drop三个语法所组成,create创建数据库及其对象(如表、视图等),alter更改现有的数据库结构,drop从数据库中删除对象。

(4)DCL:数据控制语言。是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。由grant和revoke两个指令组成。DCL以控制用户的访问权限为主,grant为授权语句,对应的revoke是撤销授权语句。

具体SQL语句是怎样写的,网上有很多教程,这里就不具体讲了。

2、SQL注入

2.1、什么是SQL注入?

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

2.2、SQL注入的后果

成功SQL注入漏洞可以:

  • 从数据库读取和修改敏感数据

  • 在数据库上执行管理操作

    • 关闭审核或DBMS
    • 截断表和日志
    • 新增使用者
  • 恢复DBMS文件系统上存在的给定文件的内容

  • 向操作系统发出命令

SQL注入攻击使攻击者能够:

  • 欺骗身份
  • 篡改现有数据
  • 导致拒绝问题,例如使交易无效或余额发生变化
  • 允许完全公开系统上的所有数据
  • 销毁数据或使其不可用
  • 成为数据库服务器的管理员

2.3、字符串SQL注入

下面我们来试试简单的SQL注入,这里我们直接使用mysql来模拟真实场景。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//假设下面的语句是真实一个登录场景的SQL语句,当username和password输入正确时才会返回结果,没有对输入的内容做任何过滤
select * from users where username='' and password='';
//上述的语句在正常用户输入正常的用户名密码的时候,是不会产生问题的,但是当黑客或者渗透人员在输入的时候,就会输入一些特殊的语句来尝试注入。
//当password输入' or 1=1#时,我们会发现,现在的SQL语句是这样子的。
select * from users where username='' and password='' or 1=1#';
MariaDB [security]> select * from users where username='' and password='' or 1=1#';
-> ;
+----+----------+------------+
| id | username | password |
+----+----------+------------+
| 1 | Dumb | Dumb |
| 2 | Angelina | I-kill-you |
| 3 | Dummy | p@ssword |
| 4 | secure | crappy |
| 5 | stupid | stupidity |
| 6 | superman | genious |
| 7 | batman | mob!le |
| 8 | admin | admin |
+----+----------+------------+
//我们在没有输入正确的用户名密码的情况下,把所有信息都取出来了,这里的' or 1=1#我们也叫永真式,后面的or1=1是永远都成立的,因此这整个SQL语句永久成立,自然就把信息全都取出来了

具体的东西我也不讲太多,毕竟是基础篇,想深入的小伙伴可以先去学学SQL语法,不用学的很深,会增删改查就OK了,另外推荐大家安装dvwa平台,可以在里面练习SQL注入。另外也有一个实验平台专门练习SQL注入的,叫sqli-labs,大家可以上网查一查,关于dvwa搭建流程我在之前的文章有说到,可以去看看。

相关文章:dvwa搭建