首页 > 技术文章 > 2017-2018-2 20179216 《网络攻防与实践》 SQL注入攻击

jmjm 2018-05-20 21:04 原文

1. SQL语言
结构化查询语言(Structured Query Language)简称SQL:是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

2. SQL注入
SQL注入能使攻击者绕过认证机制,完全控制远程服务器上的数据库。SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令,这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。
SQL注入技术是利用web应用程序和数据库服务器之间的接口来篡改网站内容的攻击技术。通过把SQL命令插入到Web表单提交框、输入域名框或页面请求框中,最终欺骗服务器执行恶意的SQL命令。

3. SQL注入危害

  • 非法读取、篡改、添加、删除数据库中的数据。
  • 盗取用户的各类敏感信息,获取利益。
  • 通过修改数据库来修改网页上的内容。
  • 私自添加或删除账号。
  • 注入木马等等。

4. SQL注入攻击的过程及原理
SQL注入攻击是指攻击者通过在应用程序后台数据库的操作中插入一些恶意SQL语句来达到操作数据库数据的目的。具体来讲就是,SQL注入攻击是攻击者利用Web应用程序,通过输入非法字符,来构造恶意的SQL语句,最终将恶意的SQL语句注入到应用的后台数据库服务器中。数据库服务器执行这些恶意SQL语句后,不会按照数据库数据表设计者的意图去执行某些操作,而是进行一些非法的操作,进而造成数据库数据的丢失,损坏等后果。这种注入攻击方式困扰着众多Web应用。

**5. SQL注入攻击的手段

  • 没有正确过滤转义字符
    应用系统的使用者输入内容,在没有经过前端验证,字符串过滤的情况下,就会发生SQL注入攻击。非法的输入传递给后台的SQL语句,SQL语句最终在数据库中执行非法的操作。

  • Incorrect type handling
    由于Web应用使用者所输入的参数,在传递过程中并不是强类型,也没有实施必要的类型转换,那么就会发生Incorrect type handling这种情况。比如,应用编码者对用户输入的内容并没有进行合法性检验,原本应该输入数字,但是编码者并未进行类型检验。

  • 数据库自身的漏洞
    某些数据库由于自身设计以及实现的漏洞,就会导致攻击者利用这些漏洞对数据库服务器进行攻击。SQLsever有些漏洞会导致攻击者能够越过访问权限,执行越权的操作,这样对数据库的危害也是极大的。因此应该及时修补数据库漏洞。

  • 盲目SQL注入式攻击
    如果应用系统对于承受的SQL注入攻击没有察觉,没有对攻击者进行有效的防范,就会发生盲目的SQL注入攻击。存在SQL注入攻击点的网页可能不会给攻击者展示有用的信息,它会根据注入攻击者注入到合法语句中的不同逻辑,进而显示不同的网页内容,这种攻击手段非常的耗费精力,需要攻击者不断的精心构造注入语句,一旦发现注入点和注入目标就可以很顺利的获取想要的信息。

  • 条件响应
    目前这种SQL注入攻击方式能够在应用程序的网页中进行逻辑计算。

  • 条件性差错
    通过构造逻辑错误来判断应用程序是否具有注入点。总结归纳出该应用所使用的数据库的类型,数据库中包含的一些数据表名,字段名等,这样就可以为接下来注入点的寻找提供帮助。

  • 时间延误
    通过构造SQL注入语句,使得数据库判断逻辑时间变长,通过判断应用页面的加载时间来判断构造的SQL注入语句是否正确。

6. 攻击的过程主要分为如下步骤
(1)通过多次输入不同的内容来测试当前的应用系统是否可以进行SQL注入,如果可以,那么进行第二步,如果不可以,则放弃。
(2)通过不断的输入测试数据,进而寻找SQL注入攻击点,找到SQL注入攻击点后,接下来就要寻找网站中可以被利用的SQL注入的漏洞。在这里,我们可以通过输入一些特殊字符,语句来寻找漏洞,同时我们也可以根据浏览器的返回的数据库信息,进而可以判断该Web应用所使用的数据库的类型。接下来,我们就可以构造数据库的查询语句,从而找寻注入点。
(3)暴力猜解数据库中存储的一些用户名和密码,一般情况下,服务器的数据库数据表中存放的表名、字段名,字段类型等信息都是有一定规律的。可以通过构建特殊数据库语句,这样可以在数据库通过查询语句来获得用户的表名、字段名、用户名和密码的长度以及内容,网络上存在着大量的SQL自动化注入工具,这个暴力猜解的过程可以通过这些工具来快速的实现。
(4)可以着手寻找Web应用管理后台的入口。通常情况下,Web后台管理的界面肯定是不会对于普通用户进行开放的,因此后台管理界面的路径是未知的。不过可以利用网上的一些路径扫描工具来寻找后台真正的登陆路径。这些路径其实是有规律可循的,经过不断的尝试就可以找到真正的管理后台入口的地址。
(5)此时可以进行系统入侵和破坏了。因为刚刚得到了用户表的用户名和密码,这样一来,就能够获取到管理员的用户名和密码,从而拥有了管理员权限,登录管理员账号,进入应用的管理后台,随后就可以进行篡改网页、上传木马、修改、泄漏用户信息等一系列的破坏行为,并进一步入侵数据库服务器。

7. 针对SQL注入攻击的检测方法
作为排在威胁Web应用安全十大攻击手段之首的SQL注入攻击,在安全产业界和学术界有着很多的深入研究。在传统的安全产业界主要检测和识别SQL注入攻击有如下两种技术:一种是基于特征的关键字匹配技术;另一种是基于异常检测技术。

  • 基于特征的关键字匹配技术:它包含许多关键字匹配算法,一个好的匹配算法是这项技术好坏的评价标准之一,目前主要使用的检测技术就是基于特征的关键字匹配技术,这种技术的核心思想是在SQL语句中抽取出特殊字符(例如#等),提取数据库的关键字(例如:select、union等)。通过提取出来的特殊字符来判断该SQL语句是否进行了SQL注入攻击。
  • 基于异常检测技术:它包含基于程序行为的异常检测技术,基于数据流的异常检测技术和基于聚类的异常检测技术等手段,这种检测技术被业界分为学习期与检测期。在学习期,检测系统必须拥有不受影响的网络系统,必须针对需要检测的Web应用具有专业的学习机制,只有当检测系统经过不断的学习,进而学习成熟后,才能进入系统检期。在系统的检测期,检测系统利用其在学习期演变成的准确模型,对传递进系统来的用户输入数据进行系统地全面分析。尽

8. 针对SQL注入攻击的防御措施

  • 普通用户与系统管理员的权限要严格区分
  • 使用参数化的过滤性SQL语句
  • 需要加强对用户输入的验证
  • 使用数据库自带的安全参数
  • 避免出现一些详细的错误消息
  • 多层环境防治SQL注入式攻击
  • 使用专业的漏洞扫描工具
  • 对数据进行加密处理
  • 在Web应用程序开发过程的所有阶段实施代码的安全检查

推荐阅读