SQL注入介绍

1. SQL注入概念

SQL注入是指WEB应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据服务器数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
在这里插入图片描述

1.1 SQL注入原理

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

1.2 SQL注入特点

  • 变种极多:有经验的攻击者会手工调整攻击的参数,致使攻击的数据是不可枚举的,这导致传统的特征匹配方法仅能识别到相当少的攻击。或者是最常规的攻击,难以做到防范。
  • 攻击简单:攻击过程简单,目前互联网上流行的众多SQL注入攻击工具,攻击者借助这些工具可以很快的对目标网站进行攻击或者是破坏,危害大。
  • 危害极大:由于web语言自身的缺陷,以及具有安全编程的开发人员较少,大多数web应用系统均具有被SQL注入攻击的可能,而攻击者一旦攻击成功,就可以对控制整个web应用系统对数据做任何的修改或者是窃取,破坏力达到了极致。

1.3 SQL注入的来源

  1. 程序员水平的欠缺,对SQL注入不够重视或者没有防范意识
  2. 现在许多教程或者模板存在SQL注入漏洞
  3. Internet 上给出的许多解决办法并未解决问题
  4. 数据库管理员对数据库权限设置不合理
    在这里插入图片描述

1.4 SQL注入的危害

  • 未经授权的情况下操作数据库中的数据。

  • 恶意篡改网页内容,登录后台后发布的内容,也可以发布对首页的更新,这时候更新可能就是一些非法信息,也可以对系统进行添加

    账户或者是数据库账号。这个需要拿到web shell或者是更高的权限。

  • 私自添加系统账号或者是数据库使用者账号。

  • 网页挂木马,拿到 webshell 或者获取到服务器的权限以后,我们将—些网页木马挂在服务器上,去攻击别人。甚至在严重些我们可

    以控制整个web服务器,这个都是非常危险的。

2. SQL注入攻击

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

2.1 SQL注入威胁表达方式

  • 绕过认证,获得非法权限
  • 猜解后台数据库全部的信息
  • 注入可以借助数据库的存储过程进行提权等操作

2.2 SQL注入攻击手段

  • 判断应用程序是否存在注入漏洞
  • 收集信息、并判断数据库类型
  • 根据注入参数类型,重构SQL语句的原貌
  • 猜解表名、字段名
  • 获取账户信息、攻击web或为下一步攻击做准备

2.3 SQL注入是否存在注入的判断方式

在这里插入图片描述

2.4 SQL注入实战步骤

不管何种注入,在最开始都要判断是否存在注入。
在这里插入图片描述

2.5 按照注入点类型分类

在这里插入图片描述

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

  1. GET注入:提交数据的方式是GET,注入点的位置在GET参数部分。比如有这样的一个链接
    http://xoox.com/news.php?id=1,id是注入点。
  2. POST注入:使用POST方式提交数据,注入点位置在POST数据部分,常发生在表单中。
  3. Cookie注入:HTTP请求的时候会带上客户端的Cookie,注入点存在Cookie当中的某个字段中。
  4. HTTP头部注入:注入点在HTTP请求头部的某个字段中。比如存在User-Agent字段中。严格讲的话,Cookie其实应该也是算头部注入的一种形式。因为在HTTP请求的时候,Cookie是头部的一个字段。

2.7 按照执行效果分类

  1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
  3. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  4. 联合查询注入,可以使用union的情况下的注入。
  5. 堆查询注入,可以同时执行多条语句的执行时的注入。

3. MySQL注入常用函数

3.1 MySQL注释风格

在这里插入图片描述
MySQL 支持以下 3 中注释风格:

  • “#”: 注释从 “#” 到行尾
  • "-- " :注释从 “-- ”序列到行位,需要注意的是使用此注释时,后面需要跟上空格
  • /**/:注释从 /* 到 */ 之间的字符

3.2 union操作符

union操作符用于拼接两个或者多select查询语句

union中的每个查询必须拥有相同的列数
在这里插入图片描述

3.3 常用函数

在这里插入图片描述

3.4 MySQL字符串连接函数

concat(str1,str2…)函数,直接连接

group_concat(str1,str2…)函数,使用逗号做为分隔符

concat_ws(sep,str1,str2…)函数,使用第一个参数做为分隔符
在这里插入图片描述

3.5 information_schema结构

在这里插入图片描述

4. SQL注入相关工具

4.1 sqlmap

SQLMAP是一个开源的渗透测试工具,它主要用于自动化地侦测和实施SQL注入攻击以及渗透数据库服务器。SQLMAP配有强大的侦测引擎,适用于高级渗透测试用户,不仅可以获得不同数据库的指纹信息,还可以从数据库中提取数据,此外还能够处理潜在的文件系统以及通过带外数据连接执行系统命令等。
在这里插入图片描述

4.2 Pangolin

Pangolin能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。Pangolin时目前国内使用率最高的SQL注入测试的安全软件,可以说是网站安全测试人员的必备工具之一。

4.3 啊D注入工具

啊D注入工具是一种主要用于SQL的注入工具,由彭岸峰开发,使用了多线程技术,能在极短的时间内扫描注入点。使用者不需要经过太多的学习就可以很熟练的操作。并且该软件附带了一些其他的工具,可以为使用者提供极大的方便。
在这里插入图片描述

4.4 Havij注入工具

HavijPro是一款自动化地SQL注入工具,它能够帮助渗透测试人员发现和利用Web应用程序的SQL注入漏洞。Havij不仅能够自动挖掘可利用的SQL查询,还能够识别后台数据库类型、检索数据的用户名和密码hash、转储表和列、从数据库中提取数据,甚至访问底层文件系统和执行系统命令,当然前提是有一个可利用的SQL注入漏洞。Havij支持广泛的数据库系统,比如MsSQL,MySQL,MSAccess and Oracle。Havij支持参数配置以躲避IDS,支持代理,后台登陆地址扫描。
在这里插入图片描述

5. SQL注入防御

  1. 开发人员在开发过程中要有SQL注入防御的思想,对用户输入的所有内容都要进行过滤。
  2. 使用数据库时,命名应该较为复杂,不应出现admin,user这样的库以及username , password这样的字段。
  3. 涉及密码的时候一定要加密存储。
  4. 使用一些框架及模版前检查代码是否有输入内容检测。
  5. 测试阶段,应进行SQL注入测试。
  6. 数据库权限最小化,防止拿到webshell权限,不要用特权账户或者能够登陆系统的账户启动数据库。

文章参考哔哩哔哩奇安信网络安全培训视频

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值